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

Commit 1ed9d64b authored by Islam Elbanna's avatar Islam Elbanna
Browse files

Allow profiling for standalone system server jars.

Currently we profile only main system server classpath, this is to allow
profiling for the standalone system server jars.

Bug: 241823638
Test: System server profiling: verified the profile snapshot of the boot image profile, and it showed the new jars profiling data.
Change-Id: I5b10373fb22ddfecdb95b6a4611f4af97bb5666d
parent d01036ee
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -517,7 +517,12 @@ public class ZygoteInit {
            if (shouldProfileSystemServer() && (Build.IS_USERDEBUG || Build.IS_ENG)) {
                try {
                    Log.d(TAG, "Preparing system server profile");
                    prepareSystemServerProfile(systemServerClasspath);
                    final String standaloneSystemServerJars =
                            Os.getenv("STANDALONE_SYSTEMSERVER_JARS");
                    final String systemServerPaths = standaloneSystemServerJars != null
                            ? String.join(":", systemServerClasspath, standaloneSystemServerJars)
                            : systemServerClasspath;
                    prepareSystemServerProfile(systemServerPaths);
                } catch (Exception e) {
                    Log.wtf(TAG, "Failed to set up system server profile", e);
                }
@@ -603,12 +608,12 @@ public class ZygoteInit {
     * permissions. From the installer perspective the system server is a regular package which can
     * capture profile information.
     */
    private static void prepareSystemServerProfile(String systemServerClasspath)
    private static void prepareSystemServerProfile(String systemServerPaths)
            throws RemoteException {
        if (systemServerClasspath.isEmpty()) {
        if (systemServerPaths.isEmpty()) {
            return;
        }
        String[] codePaths = systemServerClasspath.split(":");
        String[] codePaths = systemServerPaths.split(":");

        final IInstalld installd = IInstalld.Stub
                .asInterface(ServiceManager.getService("installd"));
+5 −0
Original line number Diff line number Diff line
@@ -339,6 +339,11 @@ public class ArtManagerService extends android.content.pm.dex.IArtManager.Stub {
        String classpath = String.join(":", Os.getenv("BOOTCLASSPATH"),
                Os.getenv("SYSTEMSERVERCLASSPATH"));

        final String standaloneSystemServerJars = Os.getenv("STANDALONE_SYSTEMSERVER_JARS");
        if (standaloneSystemServerJars != null) {
            classpath = String.join(":", classpath, standaloneSystemServerJars);
        }

        // Create the snapshot.
        createProfileSnapshot(BOOT_IMAGE_ANDROID_PACKAGE, BOOT_IMAGE_PROFILE_NAME, classpath,
                /*appId*/ -1, callback);