summaryrefslogtreecommitdiff
path: root/services/java/com/android/server/SystemServer.java
diff options
context:
space:
mode:
authorCalin Juravle <calin@google.com>2020-03-25 19:38:44 -0700
committerCalin Juravle <calin@google.com>2020-04-06 12:43:13 -0700
commit46bddf8e3638338eebc49e32300445268d4ed955 (patch)
tree9ffe916ef56621d8bab910dfbd095ce023d7afea /services/java/com/android/server/SystemServer.java
parent072d9fe0069af5feb0ce8892a3d691c1878b25a4 (diff)
Setup dex load reporter for system server
System server may load code at runtime from outside its original classpath. In order to ensure this code is optimized (verified) we need to report it to PackageManager which can optimize it during idle-maintenance windows. This CL sets up the reporting infrastructure for system server. Test: atest DexManagerTest Bug: 148774920 Change-Id: Ibd2ee38857b97bde426ee0a01c60543f1acb8671
Diffstat (limited to 'services/java/com/android/server/SystemServer.java')
-rw-r--r--services/java/com/android/server/SystemServer.java7
1 files changed, 7 insertions, 0 deletions
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 2a914ecf4db6..61a12a53eb77 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -136,6 +136,7 @@ import com.android.server.pm.OtaDexoptService;
import com.android.server.pm.PackageManagerService;
import com.android.server.pm.ShortcutService;
import com.android.server.pm.UserManagerService;
+import com.android.server.pm.dex.SystemServerDexLoadReporter;
import com.android.server.policy.PermissionPolicyService;
import com.android.server.policy.PhoneWindowManager;
import com.android.server.policy.role.LegacyRoleResolutionPolicy;
@@ -171,6 +172,7 @@ 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;
@@ -839,6 +841,11 @@ public final class SystemServer {
Watchdog.getInstance().resumeWatchingCurrentThread("packagemanagermain");
}
+ // 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));
+
mFirstBoot = mPackageManagerService.isFirstBoot();
mPackageManager = mSystemContext.getPackageManager();
t.traceEnd();