diff options
| -rw-r--r-- | services/core/java/com/android/server/pm/dex/SystemServerDexLoadReporter.java | 21 | ||||
| -rw-r--r-- | services/java/com/android/server/SystemServer.java | 3 |
2 files changed, 21 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/pm/dex/SystemServerDexLoadReporter.java b/services/core/java/com/android/server/pm/dex/SystemServerDexLoadReporter.java index c090253cbbb1..807c82d887e3 100644 --- a/services/core/java/com/android/server/pm/dex/SystemServerDexLoadReporter.java +++ b/services/core/java/com/android/server/pm/dex/SystemServerDexLoadReporter.java @@ -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()); + } + } } diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 61a12a53eb77..c67b08cdafc8 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -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(); |