From 6dff0925c078a1ee31cc13552ca023d1caadcd3b Mon Sep 17 00:00:00 2001 From: Fengjiang Li Date: Sat, 14 Oct 2023 07:10:10 -0700 Subject: [PATCH] If COLD startup occurs while launcher is backgrounded, do not wait until user goes to home to end startup session. Fix: 305243183 Test: lock screen, force stop launcher, verify COLD startup is logged before user unlocks screen Flag: N/A Change-Id: I2d93dc3346e1aec82555162c9bb868cc4ddb621b --- src/com/android/launcher3/Launcher.java | 30 ++++++++++++------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index dfcd2799a2..4e755dac88 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -2631,26 +2631,24 @@ public class Launcher extends StatefulActivity Trace.endAsyncSection(DISPLAY_WORKSPACE_TRACE_METHOD_NAME, DISPLAY_WORKSPACE_TRACE_COOKIE); } - mStartupLatencyLogger - .logCardinality(workspaceItemCount) - .logEnd(isBindSync - ? LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_SYNC - : LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_ASYNC); - // In the first rootview's onDraw after onInitialBindComplete(), log end of startup latency. + MAIN_EXECUTOR.getHandler().postAtFrontOfQueue(() -> { + mStartupLatencyLogger + .logCardinality(workspaceItemCount) + .logEnd(isBindSync + ? LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_SYNC + : LAUNCHER_LATENCY_STARTUP_WORKSPACE_LOADER_ASYNC) + .logEnd(LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION) + .log() + .reset(); + if (mIsColdStartupAfterReboot) { + Trace.endAsyncSection(COLD_STARTUP_TRACE_METHOD_NAME, + COLD_STARTUP_TRACE_COOKIE); + } + }); getRootView().getViewTreeObserver().addOnDrawListener( new ViewTreeObserver.OnDrawListener() { - @Override public void onDraw() { - mStartupLatencyLogger - .logEnd(LAUNCHER_LATENCY_STARTUP_TOTAL_DURATION) - .log() - .reset(); - if (mIsColdStartupAfterReboot) { - Trace.endAsyncSection(COLD_STARTUP_TRACE_METHOD_NAME, - COLD_STARTUP_TRACE_COOKIE); - } - MAIN_EXECUTOR.getHandler().postAtFrontOfQueue( () -> getRootView().getViewTreeObserver() .removeOnDrawListener(this));