Merge "Do not report boot timings on first boot or runtime restart"

This commit is contained in:
TreeHugger Robot
2017-01-11 23:48:13 +00:00
committed by Android (Google) Code Review
3 changed files with 49 additions and 12 deletions

View File

@@ -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.
*/

View File

@@ -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

View File

@@ -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());
}