Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dd7e4756 authored by jovanak's avatar jovanak
Browse files

Adding tracing to create user flow.

UserManagerService tracing is to ss, and Settings to pm tags.

Bug: 140101272
Test: manual verification
Change-Id: I8b4e86465a329c0a812321191e27ff57515d1845
parent 1d40886b
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -62,6 +62,7 @@ import android.os.PersistableBundle;
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.BasePermission;
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 @@ public final class Settings {
        }
    }

    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 @@ public final class Settings {
                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 @@ public final class Settings {
                Slog.w(TAG, "Failed to prepare app data", e);
            }
        }
        t.traceEnd(); // createAppData
        synchronized (mLock) {
            applyDefaultPreferredAppsLPw(userHandle);
        }
        t.traceEnd(); // createNewUser
    }

    void removeUserLPw(int userId) {
+27 −2
Original line number Diff line number Diff line
@@ -2713,14 +2713,25 @@ public class UserManagerService extends IUserManager.Stub {
        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 @@ public class UserManagerService extends IUserManager.Stub {
                    }
                }
            }

            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 @@ public class UserManagerService extends IUserManager.Stub {
            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,