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

Commit 6733e6c6 authored by Fyodor Kupolov's avatar Fyodor Kupolov
Browse files

Do not report uptime to tron after runtime restart

Runtime restart doesn't reset the uptime counter. We shouldn't report
boot timings in that case.

Bug: 32807863
Test: manual
Change-Id: If9510c0d5c633acefe70f241e0823da8f6c248a2
parent 6fd63e4d
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -657,8 +657,11 @@ public class ZygoteInit {
        }

        try {
            // Report Zygote start time to tron
            MetricsLogger.histogram(null, "boot_zygote_init", (int) SystemClock.uptimeMillis());
            // Report Zygote start time to tron unless it is a runtime restart
            if (!"1".equals(SystemProperties.get("sys.boot_completed"))) {
                MetricsLogger.histogram(null, "boot_zygote_init",
                        (int) SystemClock.elapsedRealtime());
            }

            String bootTimeTag = Process.is64Bit() ? "Zygote64Timing" : "Zygote32Timing";
            BootTimingsTraceLog bootTimingsTraceLog = new BootTimingsTraceLog(bootTimeTag,
+24 −11
Original line number Diff line number Diff line
@@ -219,6 +219,7 @@ public final class SystemServer {

    private boolean mOnlyCore;
    private boolean mFirstBoot;
    private final boolean mRuntimeRestart;

    /**
     * Start the sensor service.
@@ -235,6 +236,8 @@ public final class SystemServer {
    public SystemServer() {
        // Check for factory test mode.
        mFactoryTestMode = FactoryTest.getMode();
        // Remember if it's runtime restart(when sys.boot_completed is already set) or reboot
        mRuntimeRestart = "1".equals(SystemProperties.get("sys.boot_completed"));
    }

    private void run() {
@@ -271,13 +274,16 @@ public final class SystemServer {

            // Here we go!
            Slog.i(TAG, "Entered the Android system server!");
            int uptimeMillis = (int) SystemClock.uptimeMillis();
            int uptimeMillis = (int) SystemClock.elapsedRealtime();
            EventLog.writeEvent(EventLogTags.BOOT_PROGRESS_SYSTEM_RUN, uptimeMillis);
            if (!mRuntimeRestart) {
                MetricsLogger.histogram(null, "boot_system_server_init", uptimeMillis);
                // Also report when first stage of init has started
                long initStartNs = SystemProperties.getLong("ro.boottime.init", -1);
                if (initStartNs >= 0) {
                MetricsLogger.histogram(null, "boot_android_init", (int)(initStartNs / 1000000));
                    MetricsLogger.histogram(null, "boot_android_init",
                            (int)(initStartNs / 1000000));
                }
            }

            // In case the runtime switched since last boot (such as when
@@ -370,7 +376,10 @@ public final class SystemServer {
        if (StrictMode.conditionallyEnableDebugLogging()) {
            Slog.i(TAG, "Enabled StrictMode for system server main thread.");
        }
        MetricsLogger.histogram(null, "boot_system_server_ready", (int) SystemClock.uptimeMillis());
        if (!mRuntimeRestart) {
            MetricsLogger.histogram(null, "boot_system_server_ready",
                    (int) SystemClock.elapsedRealtime());
        }

        // Loop forever.
        Looper.loop();
@@ -499,16 +508,20 @@ public final class SystemServer {
        }

        // Start the package manager.
        if (!mRuntimeRestart) {
            MetricsLogger.histogram(null, "boot_package_manager_init_start",
                (int) SystemClock.uptimeMillis());
                    (int) SystemClock.elapsedRealtime());
        }
        traceBeginAndSlog("StartPackageManagerService");
        mPackageManagerService = PackageManagerService.main(mSystemContext, installer,
                mFactoryTestMode != FactoryTest.FACTORY_TEST_OFF, mOnlyCore);
        mFirstBoot = mPackageManagerService.isFirstBoot();
        mPackageManager = mSystemContext.getPackageManager();
        traceEnd();
        if (!mRuntimeRestart) {
            MetricsLogger.histogram(null, "boot_package_manager_init_ready",
                (int) SystemClock.uptimeMillis());
                    (int) SystemClock.elapsedRealtime());
        }
        // Manages A/B OTA dexopting. This is a bootstrap service as we need it to rename
        // A/B artifacts after boot, before anything else might touch/need them.
        // Note: this isn't needed during decryption (we don't have /data anyways).