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
This commit is contained in:
Calin Juravle
2020-03-25 19:38:44 -07:00
parent 072d9fe006
commit 46bddf8e36
5 changed files with 158 additions and 10 deletions

View File

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