Report SystemServer classpath to PackageManager
This will enable us to optimize system server classpath during idle-maintenance windows. Test: m Bug: 148774920 Change-Id: Ibd7641cd10944bb5d7740486d259a412f882cd1f
This commit is contained in:
@@ -38,7 +38,7 @@ public class SystemServerDexLoadReporter implements BaseDexClassLoader.Reporter
|
||||
|
||||
private final IPackageManager mPackageManager;
|
||||
|
||||
public SystemServerDexLoadReporter(IPackageManager pm) {
|
||||
private SystemServerDexLoadReporter(IPackageManager pm) {
|
||||
mPackageManager = pm;
|
||||
}
|
||||
|
||||
@@ -61,4 +61,23 @@ public class SystemServerDexLoadReporter implements BaseDexClassLoader.Reporter
|
||||
// We're in system server, it can't happen.
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Configures system server dex file reporting.
|
||||
* <p>The method will install a reporter in the BaseDexClassLoader and also
|
||||
* force the reporting of any dex files already loaded by the system server.
|
||||
*/
|
||||
public static void configureSystemServerDexReporter(IPackageManager pm) {
|
||||
Slog.i(TAG, "Configuring system server dex reporter");
|
||||
|
||||
SystemServerDexLoadReporter reporter = new SystemServerDexLoadReporter(pm);
|
||||
BaseDexClassLoader.setReporter(reporter);
|
||||
ClassLoader currrentClassLoader = reporter.getClass().getClassLoader();
|
||||
if (currrentClassLoader instanceof BaseDexClassLoader) {
|
||||
((BaseDexClassLoader) currrentClassLoader).reportClassLoaderChain();
|
||||
} else {
|
||||
Slog.wtf(TAG, "System server class loader is not a BaseDexClassLoader. type="
|
||||
+ currrentClassLoader.getClass().getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -172,7 +172,6 @@ import com.android.server.wm.ActivityTaskManagerService;
|
||||
import com.android.server.wm.WindowManagerGlobalLock;
|
||||
import com.android.server.wm.WindowManagerService;
|
||||
|
||||
import dalvik.system.BaseDexClassLoader;
|
||||
import dalvik.system.VMRuntime;
|
||||
|
||||
import com.google.android.startop.iorap.IorapForwardingService;
|
||||
@@ -844,7 +843,7 @@ public final class SystemServer {
|
||||
// Now that the package manager has started, register the dex load reporter to capture any
|
||||
// dex files loaded by system server.
|
||||
// These dex files will be optimized by the BackgroundDexOptService.
|
||||
BaseDexClassLoader.setReporter(new SystemServerDexLoadReporter(mPackageManagerService));
|
||||
SystemServerDexLoadReporter.configureSystemServerDexReporter(mPackageManagerService);
|
||||
|
||||
mFirstBoot = mPackageManagerService.isFirstBoot();
|
||||
mPackageManager = mSystemContext.getPackageManager();
|
||||
|
||||
Reference in New Issue
Block a user