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

Commit b7f32d07 authored by Vali Dobrota's avatar Vali Dobrota
Browse files

Add debug.tracing.profile.* system properties


Adds debug.tracing.profile_boot_classpath and debug.tracing.profile_system_server system properties, so that Perfetto can show when the device is in Boot Classpath or System Server profiling mode. The performance of the system and interpretation of traces is affected by enabling or disabling this profiling.

BUG=372503978

Change-Id: I20400cab34b4f06bde2e75e87010175cff48f58b
Flag: EXEMPT small change, tested
parent bbfd7f0e
Loading
Loading
Loading
Loading
+21 −1
Original line number Diff line number Diff line
@@ -249,6 +249,10 @@ public class ZygoteInit {
        return isExperimentEnabled("profilesystemserver");
    }

    private static boolean shouldProfileBootClasspath() {
        return isExperimentEnabled("profilebootclasspath");
    }

    /**
     * Performs Zygote process initialization. Loads and initializes commonly used classes.
     *
@@ -352,7 +356,7 @@ public class ZygoteInit {
            // If we are profiling the boot image, reset the Jit counters after preloading the
            // classes. We want to preload for performance, and we can use method counters to
            // infer what clases are used after calling resetJitCounters, for profile purposes.
            if (isExperimentEnabled("profilebootclasspath")) {
            if (shouldProfileBootClasspath()) {
                Trace.traceBegin(Trace.TRACE_TAG_DALVIK, "ResetJitCounters");
                VMRuntime.resetJitCounters();
                Trace.traceEnd(Trace.TRACE_TAG_DALVIK);
@@ -460,12 +464,28 @@ public class ZygoteInit {
                            ? String.join(":", systemServerClasspath, standaloneSystemServerJars)
                            : systemServerClasspath;
                    prepareSystemServerProfile(systemServerPaths);
                    try {
                        SystemProperties.set("debug.tracing.profile_system_server", "1");
                    } catch (RuntimeException e) {
                        Slog.e(TAG, "Failed to set debug.tracing.profile_system_server", e);
                    }
                } catch (Exception e) {
                    Log.wtf(TAG, "Failed to set up system server profile", e);
                }
            }
        }

        // Zygote can't set system properties due to permission denied. We need to be in System
        // Server to set system properties, so we do it here instead of the more natural place in
        // preloadClasses.
        if (shouldProfileBootClasspath()) {
            try {
                SystemProperties.set("debug.tracing.profile_boot_classpath", "1");
            } catch (RuntimeException e) {
                Slog.e(TAG, "Failed to set debug.tracing.profile_boot_classpath", e);
            }
        }

        if (parsedArgs.mInvokeWith != null) {
            String[] args = parsedArgs.mRemainingArgs;
            // If we have a non-null system server class path, we'll have to duplicate the