Phase 1 of refactoring SystemServer.

SystemServer is currently a monolithic class that brings up key system
services. This change is the first phase of refactoring it to be more
configurable. Specifically, it adds a set of on/off switches used to control
startup of individual services. Future plans include finer grained controls
and a more explicit and consistent startup sequence for these services.

Change-Id: I7299f5ce7d7b74a34eb56dffb788366fbc058532
This commit is contained in:
Dan Morrill
2013-03-28 18:10:43 -07:00
parent 9bd9404383
commit e4d9a01bfc
11 changed files with 745 additions and 451 deletions

View File

@ -29,6 +29,7 @@ import android.graphics.SurfaceTexture;
import android.os.Process;
import android.util.Log;
import android.view.Surface;
import android.os.SystemProperties;
@ -56,20 +57,22 @@ public class RenderScript {
* We use a class initializer to allow the native code to cache some
* field offsets.
*/
@SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"})
@SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"}) // TODO: now used locally; remove?
static boolean sInitialized;
native static void _nInit();
static {
sInitialized = false;
try {
System.loadLibrary("rs_jni");
_nInit();
sInitialized = true;
} catch (UnsatisfiedLinkError e) {
Log.e(LOG_TAG, "Error loading RS jni library: " + e);
throw new RSRuntimeException("Error loading RS jni library: " + e);
if (!SystemProperties.getBoolean("config.disable_renderscript", false)) {
try {
System.loadLibrary("rs_jni");
_nInit();
sInitialized = true;
} catch (UnsatisfiedLinkError e) {
Log.e(LOG_TAG, "Error loading RS jni library: " + e);
throw new RSRuntimeException("Error loading RS jni library: " + e);
}
}
}
@ -97,6 +100,11 @@ public class RenderScript {
* @param cacheDir A directory the current process can write to
*/
public static void setupDiskCache(File cacheDir) {
if (!sInitialized) {
Log.e(LOG_TAG, "RenderScript.setupDiskCache() called when disabled");
return;
}
File f = new File(cacheDir, CACHE_PATH);
mCachePath = f.getAbsolutePath();
f.mkdirs();
@ -1036,6 +1044,11 @@ public class RenderScript {
* @return RenderScript
*/
public static RenderScript create(Context ctx, int sdkVersion, ContextType ct) {
if (!sInitialized) {
Log.e(LOG_TAG, "RenderScript.create() called when disabled; someone is likely to crash");
return null;
}
RenderScript rs = new RenderScript(ctx);
rs.mDev = rs.nDeviceCreate();