From 12d2a30a3e944615090f01c8be4c65cba8bdf8dd Mon Sep 17 00:00:00 2001 From: Adam Bookatz Date: Mon, 8 Nov 2021 17:14:22 -0800 Subject: [PATCH] Multiuser perfetto metric: adb tracepoints Add tracepoints in adb for user switches and creation, for the primary purpose of performance metrics in trace_processor. These need to be done at the level of shell, not UserController/UserManager because each entrypoint needs an explicit tracepoint. We already have some for UI-based entrypoints - and we want to time from the moment the user requests the switch, not some internal point that might be substantially later - so to capture adb-based switching/creation within the same trace processor mechanism, we must also add tracepoints for the shell commands. Bug: 192001071 Test: manual Change-Id: I2d7d30faf7906eb455f5d2dc05f0d6b2d96518c2 --- .../am/ActivityManagerShellCommand.java | 26 ++++++++++++------- .../com/android/server/am/UserController.java | 2 +- .../server/pm/PackageManagerShellCommand.java | 4 +++ 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java index 0f7163987b2c8..d13110c31a9cb 100644 --- a/services/core/java/com/android/server/am/ActivityManagerShellCommand.java +++ b/services/core/java/com/android/server/am/ActivityManagerShellCommand.java @@ -85,6 +85,7 @@ import android.os.ShellCommand; import android.os.StrictMode; import android.os.SystemClock; import android.os.SystemProperties; +import android.os.Trace; import android.os.UserHandle; import android.os.UserManager; import android.text.TextUtils; @@ -1880,16 +1881,21 @@ final class ActivityManagerShellCommand extends ShellCommand { int userId = Integer.parseInt(getNextArgRequired()); boolean switched; - if (wait) { - switched = switchUserAndWaitForComplete(userId); - } else { - switched = mInterface.switchUser(userId); - } - if (switched) { - return 0; - } else { - pw.printf("Error: Failed to switch to user %d\n", userId); - return 1; + Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "shell_runSwitchUser"); + try { + if (wait) { + switched = switchUserAndWaitForComplete(userId); + } else { + switched = mInterface.switchUser(userId); + } + if (switched) { + return 0; + } else { + pw.printf("Error: Failed to switch to user %d\n", userId); + return 1; + } + } finally { + Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER); } } diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java index fa7eae3b2231c..bf640c38c1863 100644 --- a/services/core/java/com/android/server/am/UserController.java +++ b/services/core/java/com/android/server/am/UserController.java @@ -1373,7 +1373,7 @@ class UserController implements Handler.Callback { @Nullable IProgressListener unlockListener) { TimingsTraceAndSlog t = new TimingsTraceAndSlog(); - t.traceBegin("startUser-" + userId + "-" + (foreground ? "fg" : "bg")); + t.traceBegin("UserController.startUser-" + userId + "-" + (foreground ? "fg" : "bg")); try { return startUserInternal(userId, foreground, unlockListener, t); } finally { diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java index 3554cc02b9fc3..fc59541af1ea7 100644 --- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java +++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java @@ -81,6 +81,7 @@ import android.os.ServiceSpecificException; import android.os.ShellCommand; import android.os.SystemClock; import android.os.SystemProperties; +import android.os.Trace; import android.os.UserHandle; import android.os.UserManager; import android.os.incremental.V4Signature; @@ -2629,6 +2630,7 @@ class PackageManagerShellCommand extends ShellCommand { if (userType == null) { userType = UserInfo.getDefaultUserType(flags); } + Trace.traceBegin(Trace.TRACE_TAG_PACKAGE_MANAGER, "shell_runCreateUser"); try { if (UserManager.isUserTypeRestricted(userType)) { // In non-split user mode, userId can only be SYSTEM @@ -2645,6 +2647,8 @@ class PackageManagerShellCommand extends ShellCommand { } } catch (ServiceSpecificException e) { getErrPrintWriter().println("Error: " + e); + } finally { + Trace.traceEnd(Trace.TRACE_TAG_PACKAGE_MANAGER); } if (info != null) {