From 927d6dcc6c9c05d7d17e7ae70ddffc51fdbedbda Mon Sep 17 00:00:00 2001 From: Schneider Victor-tulias Date: Thu, 26 Aug 2021 11:56:47 -0700 Subject: [PATCH] Add tracing to help in launcher load time profiling. Bug: 195674813 Test: None Change-Id: I895a64bbba515ce7b7df8d093d40e0a5b6056d2e --- src/com/android/launcher3/Launcher.java | 24 +++++++++++++++++++ .../android/launcher3/model/LoaderTask.java | 16 +++++++++++-- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index ed9f0449b9..85dd3b3cc6 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -87,6 +87,7 @@ import android.os.Parcelable; import android.os.Process; import android.os.StrictMode; import android.os.SystemClock; +import android.os.Trace; import android.text.TextUtils; import android.text.method.TextKeyListener; import android.util.Log; @@ -280,6 +281,11 @@ public class Launcher extends StatefulActivity implements Launche private static final int THEME_CROSS_FADE_ANIMATION_DURATION = 375; + private static final String DISPLAY_WORKSPACE_TRACE_METHOD_NAME = "DisplayWorkspaceFirstFrame"; + private static final String DISPLAY_ALL_APPS_TRACE_METHOD_NAME = "DisplayAllApps"; + public static final int DISPLAY_WORKSPACE_TRACE_COOKIE = 0; + public static final int DISPLAY_ALL_APPS_TRACE_COOKIE = 1; + private Configuration mOldConfig; @Thunk @@ -366,7 +372,15 @@ public class Launcher extends StatefulActivity implements Launche private LauncherState mPrevLauncherState; @Override + @TargetApi(Build.VERSION_CODES.S) protected void onCreate(Bundle savedInstanceState) { + // Only use a hard-coded cookie since we only want to trace this once. + if (Utilities.ATLEAST_S) { + Trace.beginAsyncSection( + DISPLAY_WORKSPACE_TRACE_METHOD_NAME, DISPLAY_WORKSPACE_TRACE_COOKIE); + Trace.beginAsyncSection(DISPLAY_ALL_APPS_TRACE_METHOD_NAME, + DISPLAY_ALL_APPS_TRACE_COOKIE); + } Object traceToken = TraceHelper.INSTANCE.beginSection(ON_CREATE_EVT, TraceHelper.FLAG_UI_EVENT); if (DEBUG_STRICT_MODE) { @@ -2584,6 +2598,7 @@ public class Launcher extends StatefulActivity implements Launche } @Override + @TargetApi(Build.VERSION_CODES.S) public void onInitialBindComplete(IntSet boundPages, RunnableList pendingTasks) { mSynchronouslyBoundPages = boundPages; mPagesToBindSynchronously = new IntSet(); @@ -2606,6 +2621,10 @@ public class Launcher extends StatefulActivity implements Launche executor.onLoadAnimationCompleted(); } executor.attachTo(this); + if (Utilities.ATLEAST_S) { + Trace.endAsyncSection(DISPLAY_WORKSPACE_TRACE_METHOD_NAME, + DISPLAY_WORKSPACE_TRACE_COOKIE); + } } /** @@ -2669,9 +2688,14 @@ public class Launcher extends StatefulActivity implements Launche * Implementation of the method from LauncherModel.Callbacks. */ @Override + @TargetApi(Build.VERSION_CODES.S) public void bindAllApplications(AppInfo[] apps, int flags) { mAppsView.getAppsStore().setApps(apps, flags); PopupContainerWithArrow.dismissInvalidPopup(this); + if (Utilities.ATLEAST_S) { + Trace.endAsyncSection(DISPLAY_ALL_APPS_TRACE_METHOD_NAME, + DISPLAY_ALL_APPS_TRACE_COOKIE); + } } /** diff --git a/src/com/android/launcher3/model/LoaderTask.java b/src/com/android/launcher3/model/LoaderTask.java index f4a0eb89bd..c178b02d43 100644 --- a/src/com/android/launcher3/model/LoaderTask.java +++ b/src/com/android/launcher3/model/LoaderTask.java @@ -43,6 +43,7 @@ import android.content.pm.ShortcutInfo; import android.graphics.Point; import android.net.Uri; import android.os.Bundle; +import android.os.Trace; import android.os.UserHandle; import android.os.UserManager; import android.text.TextUtils; @@ -197,7 +198,12 @@ public class LoaderTask implements Runnable { TimingLogger logger = new TimingLogger(TAG, "run"); try (LauncherModel.LoaderTransaction transaction = mApp.getModel().beginLoader(this)) { List allShortcuts = new ArrayList<>(); - loadWorkspace(allShortcuts); + Trace.beginSection("LoadWorkspace"); + try { + loadWorkspace(allShortcuts); + } finally { + Trace.endSection(); + } logASplit(logger, "loadWorkspace"); // Sanitize data re-syncs widgets/shortcuts based on the workspace loaded from db. @@ -225,7 +231,13 @@ public class LoaderTask implements Runnable { verifyNotStopped(); // second step - List allActivityList = loadAllApps(); + Trace.beginSection("LoadAllApps"); + List allActivityList; + try { + allActivityList = loadAllApps(); + } finally { + Trace.endSection(); + } logASplit(logger, "loadAllApps"); verifyNotStopped();