Merge "Do not report boot timings on first boot or runtime restart"
This commit is contained in:
committed by
Android (Google) Code Review
commit
847d338a05
@@ -35,13 +35,15 @@ 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>();
|
||||
|
||||
private int mCurrentPhase = -1;
|
||||
|
||||
public SystemServiceManager(Context context) {
|
||||
SystemServiceManager(Context context) {
|
||||
mContext = context;
|
||||
}
|
||||
|
||||
@@ -235,7 +237,7 @@ public class SystemServiceManager {
|
||||
}
|
||||
|
||||
/** Sets the safe mode flag for services to query. */
|
||||
public void setSafeMode(boolean safeMode) {
|
||||
void setSafeMode(boolean safeMode) {
|
||||
mSafeMode = safeMode;
|
||||
}
|
||||
|
||||
@@ -247,6 +249,28 @@ public class SystemServiceManager {
|
||||
return mSafeMode;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return true if runtime was restarted, false if it's normal boot
|
||||
*/
|
||||
public boolean isRuntimeRestarted() {
|
||||
return mRuntimeRestarted;
|
||||
}
|
||||
|
||||
void setRuntimeRestarted(boolean runtimeRestarted) {
|
||||
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.
|
||||
*/
|
||||
|
||||
@@ -255,10 +255,11 @@ final class UserController {
|
||||
// storage is already unlocked.
|
||||
if (uss.setState(STATE_BOOTING, STATE_RUNNING_LOCKED)) {
|
||||
mInjector.getUserManagerInternal().setUserState(userId, uss.state);
|
||||
|
||||
int uptimeSeconds = (int)(SystemClock.elapsedRealtime() / 1000);
|
||||
MetricsLogger.histogram(mInjector.getContext(), "framework_locked_boot_completed",
|
||||
uptimeSeconds);
|
||||
if (!mInjector.isRuntimeRestarted() && !mInjector.isFirstBoot()) {
|
||||
int uptimeSeconds = (int)(SystemClock.elapsedRealtime() / 1000);
|
||||
MetricsLogger.histogram(mInjector.getContext(),
|
||||
"framework_locked_boot_completed", uptimeSeconds);
|
||||
}
|
||||
|
||||
mHandler.sendMessage(mHandler.obtainMessage(REPORT_LOCKED_BOOT_COMPLETE_MSG,
|
||||
userId, 0));
|
||||
@@ -429,9 +430,11 @@ final class UserController {
|
||||
}
|
||||
|
||||
Slog.d(TAG, "Sending BOOT_COMPLETE user #" + userId);
|
||||
int uptimeSeconds = (int)(SystemClock.elapsedRealtime() / 1000);
|
||||
MetricsLogger.histogram(mInjector.getContext(), "framework_boot_completed",
|
||||
uptimeSeconds);
|
||||
if (!mInjector.isRuntimeRestarted() && !mInjector.isFirstBoot()) {
|
||||
int uptimeSeconds = (int) (SystemClock.elapsedRealtime() / 1000);
|
||||
MetricsLogger.histogram(mInjector.getContext(), "framework_boot_completed",
|
||||
uptimeSeconds);
|
||||
}
|
||||
final Intent bootIntent = new Intent(Intent.ACTION_BOOT_COMPLETED, null);
|
||||
bootIntent.putExtra(Intent.EXTRA_USER_HANDLE, userId);
|
||||
bootIntent.addFlags(Intent.FLAG_RECEIVER_NO_ABORT
|
||||
@@ -1696,6 +1699,14 @@ final class UserController {
|
||||
mService.mSystemServiceManager.stopUser(userId);
|
||||
}
|
||||
|
||||
boolean isRuntimeRestarted() {
|
||||
return mService.mSystemServiceManager.isRuntimeRestarted();
|
||||
}
|
||||
|
||||
boolean isFirstBoot() {
|
||||
return mService.mSystemServiceManager.isFirstBoot();
|
||||
}
|
||||
|
||||
void sendPreBootBroadcast(int userId, boolean quiet, final Runnable onFinish) {
|
||||
new PreBootBroadcaster(mService, userId, null, quiet) {
|
||||
@Override
|
||||
|
||||
@@ -278,7 +278,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) {
|
||||
if (!mRuntimeRestart && !mFirstBoot) {
|
||||
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);
|
||||
@@ -352,6 +352,8 @@ 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();
|
||||
@@ -378,7 +380,7 @@ public final class SystemServer {
|
||||
if (StrictMode.conditionallyEnableDebugLogging()) {
|
||||
Slog.i(TAG, "Enabled StrictMode for system server main thread.");
|
||||
}
|
||||
if (!mRuntimeRestart) {
|
||||
if (!mRuntimeRestart && !mFirstBoot) {
|
||||
MetricsLogger.histogram(null, "boot_system_server_ready",
|
||||
(int) SystemClock.elapsedRealtime());
|
||||
}
|
||||
@@ -520,7 +522,7 @@ public final class SystemServer {
|
||||
mFirstBoot = mPackageManagerService.isFirstBoot();
|
||||
mPackageManager = mSystemContext.getPackageManager();
|
||||
traceEnd();
|
||||
if (!mRuntimeRestart) {
|
||||
if (!mRuntimeRestart && !mFirstBoot) {
|
||||
MetricsLogger.histogram(null, "boot_package_manager_init_ready",
|
||||
(int) SystemClock.elapsedRealtime());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user