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

Commit 4ba91b9a authored by Fyodor Kupolov's avatar Fyodor Kupolov
Browse files

Do not log boot times for secondary users and upgrades

Do not log framework_boot_completed/framework_locked_boot_completed
for secondary users, runtime restarts or first boot/upgrade.

First boot/upgrade also applies to boot_system_server_ready/
boot_package_manager_init_ready

Test: Manual update with fingerprint change
Test: runtime restart - not logged

Bug: 34516002
Bug: 32807863
Change-Id: I2e4237bf49e82101f483df6190111f4541328d19
parent ecbc96bb
Loading
Loading
Loading
Loading
+0 −11
Original line number Diff line number Diff line
@@ -36,7 +36,6 @@ public class SystemServiceManager {
    private final Context mContext;
    private boolean mSafeMode;
    private boolean mRuntimeRestarted;
    private boolean mFirstBoot;

    // Services that should receive lifecycle events.
    private final ArrayList<SystemService> mServices = new ArrayList<SystemService>();
@@ -260,16 +259,6 @@ public class SystemServiceManager {
        mRuntimeRestarted = runtimeRestarted;
    }

    /**
     * @return true if it's first boot after OTA
     */
    public boolean isFirstBoot() {
        return mFirstBoot;
    }

    void setFirstBoot(boolean firstBoot) {
        mFirstBoot = firstBoot;
    }

    /**
     * Outputs the state of this manager to the System log.
+15 −4
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ import static com.android.server.am.UserState.STATE_RUNNING_UNLOCKING;
import android.annotation.NonNull;
import android.annotation.UserIdInt;
import android.app.ActivityManager;
import android.app.AppGlobals;
import android.app.AppOpsManager;
import android.app.Dialog;
import android.app.IStopUserCallback;
@@ -55,6 +56,7 @@ import android.app.KeyguardManager;
import android.content.Context;
import android.content.IIntentReceiver;
import android.content.Intent;
import android.content.pm.IPackageManager;
import android.content.pm.PackageManager;
import android.content.pm.UserInfo;
import android.os.BatteryStats;
@@ -255,7 +257,9 @@ final class UserController {
            // storage is already unlocked.
            if (uss.setState(STATE_BOOTING, STATE_RUNNING_LOCKED)) {
                mInjector.getUserManagerInternal().setUserState(userId, uss.state);
                if (!mInjector.isRuntimeRestarted() && !mInjector.isFirstBoot()) {
                // Do not report secondary users, runtime restarts or first boot/upgrade
                if (userId == UserHandle.USER_SYSTEM
                        && !mInjector.isRuntimeRestarted() && !mInjector.isFirstBootOrUpgrade()) {
                    int uptimeSeconds = (int)(SystemClock.elapsedRealtime() / 1000);
                    MetricsLogger.histogram(mInjector.getContext(),
                            "framework_locked_boot_completed", uptimeSeconds);
@@ -436,7 +440,9 @@ final class UserController {
            }

            Slog.d(TAG, "Sending BOOT_COMPLETE user #" + userId);
            if (!mInjector.isRuntimeRestarted() && !mInjector.isFirstBoot()) {
            // Do not report secondary users, runtime restarts or first boot/upgrade
            if (userId == UserHandle.USER_SYSTEM
                    && !mInjector.isRuntimeRestarted() && !mInjector.isFirstBootOrUpgrade()) {
                int uptimeSeconds = (int) (SystemClock.elapsedRealtime() / 1000);
                MetricsLogger.histogram(mInjector.getContext(), "framework_boot_completed",
                        uptimeSeconds);
@@ -1709,8 +1715,13 @@ final class UserController {
            return mService.mSystemServiceManager.isRuntimeRestarted();
        }

        boolean isFirstBoot() {
            return mService.mSystemServiceManager.isFirstBoot();
        boolean isFirstBootOrUpgrade() {
            IPackageManager pm = AppGlobals.getPackageManager();
            try {
                return pm.isFirstBoot() || pm.isUpgrade();
            } catch (RemoteException e) {
                throw e.rethrowFromSystemServer();
            }
        }

        void sendPreBootBroadcast(int userId, boolean quiet, final Runnable onFinish) {
+7 −4
Original line number Diff line number Diff line
@@ -280,7 +280,7 @@ public final class SystemServer {
            Slog.i(TAG, "Entered the Android system server!");
            int uptimeMillis = (int) SystemClock.elapsedRealtime();
            EventLog.writeEvent(EventLogTags.BOOT_PROGRESS_SYSTEM_RUN, uptimeMillis);
            if (!mRuntimeRestart && !mFirstBoot) {
            if (!mRuntimeRestart) {
                MetricsLogger.histogram(null, "boot_system_server_init", uptimeMillis);
            }

@@ -349,7 +349,6 @@ public final class SystemServer {
            // Create the system service manager.
            mSystemServiceManager = new SystemServiceManager(mSystemContext);
            mSystemServiceManager.setRuntimeRestarted(mRuntimeRestart);
            mSystemServiceManager.setFirstBoot(mFirstBoot);
            LocalServices.addService(SystemServiceManager.class, mSystemServiceManager);
            // Prepare the thread pool for init tasks that can be parallelized
            SystemServerInitThreadPool.get();
@@ -376,7 +375,7 @@ public final class SystemServer {
        if (StrictMode.conditionallyEnableDebugLogging()) {
            Slog.i(TAG, "Enabled StrictMode for system server main thread.");
        }
        if (!mRuntimeRestart && !mFirstBoot) {
        if (!mRuntimeRestart && !isFirstBootOrUpgrade()) {
            int uptimeMillis = (int) SystemClock.elapsedRealtime();
            MetricsLogger.histogram(null, "boot_system_server_ready", uptimeMillis);
            final int MAX_UPTIME_MILLIS = 60 * 1000;
@@ -391,6 +390,10 @@ public final class SystemServer {
        throw new RuntimeException("Main thread loop unexpectedly exited");
    }

    private boolean isFirstBootOrUpgrade() {
        return mPackageManagerService.isFirstBoot() || mPackageManagerService.isUpgrade();
    }

    private void reportWtf(String msg, Throwable e) {
        Slog.w(TAG, "***********************************************");
        Slog.wtf(TAG, "BOOT FAILURE " + msg, e);
@@ -523,7 +526,7 @@ public final class SystemServer {
        mFirstBoot = mPackageManagerService.isFirstBoot();
        mPackageManager = mSystemContext.getPackageManager();
        traceEnd();
        if (!mRuntimeRestart && !mFirstBoot) {
        if (!mRuntimeRestart && !isFirstBootOrUpgrade()) {
            MetricsLogger.histogram(null, "boot_package_manager_init_ready",
                    (int) SystemClock.elapsedRealtime());
        }