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:
Calin Juravle
2020-03-26 22:46:55 -07:00
parent 46bddf8e36
commit d75a077d85
2 changed files with 21 additions and 3 deletions

View File

@@ -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());
}
}
}

View File

@@ -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();