summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/pm/dex/SystemServerDexLoadReporter.java21
-rw-r--r--services/java/com/android/server/SystemServer.java3
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();