Adding tracing to create user flow.
UserManagerService tracing is to ss, and Settings to pm tags.
Bug: 140101272
Test: manual verification
Change-Id: I8b4e86465a329c0a812321191e27ff57515d1845
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index 5972468..1873a4e 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -62,6 +62,7 @@
import android.os.Process;
import android.os.SELinux;
import android.os.SystemClock;
+import android.os.Trace;
import android.os.UserHandle;
import android.os.UserManager;
import android.os.storage.StorageManager;
@@ -94,6 +95,7 @@
import com.android.server.pm.permission.PermissionSettings;
import com.android.server.pm.permission.PermissionsState;
import com.android.server.pm.permission.PermissionsState.PermissionState;
+import com.android.server.utils.TimingsTraceAndSlog;
import libcore.io.IoUtils;
@@ -4012,8 +4014,11 @@
}
}
- void createNewUserLI(@NonNull PackageManagerService service, @NonNull Installer installer,
- int userHandle, String[] disallowedPackages) {
+ void createNewUserLI(@NonNull PackageManagerService service,
+ @NonNull Installer installer, int userHandle, String[] disallowedPackages) {
+ final TimingsTraceAndSlog t = new TimingsTraceAndSlog(TAG + "Timing",
+ Trace.TRACE_TAG_PACKAGE_MANAGER);
+ t.traceBegin("createNewUser-" + userHandle);
String[] volumeUuids;
String[] names;
int[] appIds;
@@ -4051,6 +4056,7 @@
targetSdkVersions[i] = ps.pkg.applicationInfo.targetSdkVersion;
}
}
+ t.traceBegin("createAppData");
for (int i = 0; i < packagesCount; i++) {
if (names[i] == null) {
continue;
@@ -4064,9 +4070,11 @@
Slog.w(TAG, "Failed to prepare app data", e);
}
}
+ t.traceEnd(); // createAppData
synchronized (mLock) {
applyDefaultPreferredAppsLPw(userHandle);
}
+ t.traceEnd(); // createNewUser
}
void removeUserLPw(int userId) {
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index dd1adb7..9371c44 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -2713,14 +2713,25 @@
return createUserInternalUnchecked(name, flags, parentId, disallowedPackages);
}
- private UserInfo createUserInternalUnchecked(String name, int flags, int parentId,
- String[] disallowedPackages) {
+ private UserInfo createUserInternalUnchecked(@Nullable String name, int flags,
+ int parentId, @Nullable String[] disallowedPackages) {
+ TimingsTraceAndSlog t = new TimingsTraceAndSlog();
+ t.traceBegin("createUser");
+ UserInfo userInfo =
+ createUserInternalUncheckedNoTracing(name, flags, parentId, disallowedPackages, t);
+ t.traceEnd();
+ return userInfo;
+ }
+
+ private UserInfo createUserInternalUncheckedNoTracing(@Nullable String name, int flags,
+ int parentId, @Nullable String[] disallowedPackages, @NonNull TimingsTraceAndSlog t) {
DeviceStorageMonitorInternal dsm = LocalServices
.getService(DeviceStorageMonitorInternal.class);
if (dsm.isMemoryLow()) {
Log.w(LOG_TAG, "Cannot add user. Not enough space on disk.");
return null;
}
+
final boolean isGuest = (flags & UserInfo.FLAG_GUEST) != 0;
final boolean isManagedProfile = (flags & UserInfo.FLAG_MANAGED_PROFILE) != 0;
final boolean isRestricted = (flags & UserInfo.FLAG_RESTRICTED) != 0;
@@ -2820,11 +2831,21 @@
}
}
}
+
+ t.traceBegin("createUserKey");
final StorageManager storage = mContext.getSystemService(StorageManager.class);
storage.createUserKey(userId, userInfo.serialNumber, userInfo.isEphemeral());
+ t.traceEnd();
+
+ t.traceBegin("prepareUserData");
mUserDataPreparer.prepareUserData(userId, userInfo.serialNumber,
StorageManager.FLAG_STORAGE_DE | StorageManager.FLAG_STORAGE_CE);
+ t.traceEnd();
+
+ t.traceBegin("PM.createNewUser");
mPm.createNewUser(userId, disallowedPackages);
+ t.traceEnd();
+
userInfo.partial = false;
synchronized (mPackagesLock) {
writeUserLP(userData);
@@ -2839,7 +2860,11 @@
synchronized (mRestrictionsLock) {
mBaseUserRestrictions.append(userId, restrictions);
}
+
+ t.traceBegin("PM.onNewUserCreated");
mPm.onNewUserCreated(userId);
+ t.traceEnd();
+
Intent addedIntent = new Intent(Intent.ACTION_USER_ADDED);
addedIntent.putExtra(Intent.EXTRA_USER_HANDLE, userId);
mContext.sendBroadcastAsUser(addedIntent, UserHandle.ALL,