Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d75a077d authored by Calin Juravle's avatar Calin Juravle
Browse files

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
parent 46bddf8e
Loading
Loading
Loading
Loading
+20 −1
Original line number Diff line number Diff line
@@ -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());
        }
    }
}
+1 −2
Original line number Diff line number Diff line
@@ -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();