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 Original line Diff line number Diff line
@@ -62,6 +62,7 @@ import android.os.PersistableBundle;
import android.os.Process;
import android.os.Process;
import android.os.SELinux;
import android.os.SELinux;
import android.os.SystemClock;
import android.os.SystemClock;
import android.os.Trace;
import android.os.UserHandle;
import android.os.UserHandle;
import android.os.UserManager;
import android.os.UserManager;
import android.os.storage.StorageManager;
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.PermissionSettings;
import com.android.server.pm.permission.PermissionsState;
import com.android.server.pm.permission.PermissionsState;
import com.android.server.pm.permission.PermissionsState.PermissionState;
import com.android.server.pm.permission.PermissionsState.PermissionState;
import com.android.server.utils.TimingsTraceAndSlog;


import libcore.io.IoUtils;
import libcore.io.IoUtils;


@@ -4012,8 +4014,11 @@ public final class Settings {
        }
        }
    }
    }


    void createNewUserLI(@NonNull PackageManagerService service, @NonNull Installer installer,
    void createNewUserLI(@NonNull PackageManagerService service,
            int userHandle, String[] disallowedPackages) {
            @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[] volumeUuids;
        String[] names;
        String[] names;
        int[] appIds;
        int[] appIds;
@@ -4051,6 +4056,7 @@ public final class Settings {
                targetSdkVersions[i] = ps.pkg.applicationInfo.targetSdkVersion;
                targetSdkVersions[i] = ps.pkg.applicationInfo.targetSdkVersion;
            }
            }
        }
        }
        t.traceBegin("createAppData");
        for (int i = 0; i < packagesCount; i++) {
        for (int i = 0; i < packagesCount; i++) {
            if (names[i] == null) {
            if (names[i] == null) {
                continue;
                continue;
@@ -4064,9 +4070,11 @@ public final class Settings {
                Slog.w(TAG, "Failed to prepare app data", e);
                Slog.w(TAG, "Failed to prepare app data", e);
            }
            }
        }
        }
        t.traceEnd(); // createAppData
        synchronized (mLock) {
        synchronized (mLock) {
            applyDefaultPreferredAppsLPw(userHandle);
            applyDefaultPreferredAppsLPw(userHandle);
        }
        }
        t.traceEnd(); // createNewUser
    }
    }


    void removeUserLPw(int userId) {
    void removeUserLPw(int userId) {
+27 −2
Original line number Original line Diff line number Diff line
@@ -2713,14 +2713,25 @@ public class UserManagerService extends IUserManager.Stub {
        return createUserInternalUnchecked(name, flags, parentId, disallowedPackages);
        return createUserInternalUnchecked(name, flags, parentId, disallowedPackages);
    }
    }


    private UserInfo createUserInternalUnchecked(String name, int flags, int parentId,
    private UserInfo createUserInternalUnchecked(@Nullable String name, int flags,
            String[] disallowedPackages) {
            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
        DeviceStorageMonitorInternal dsm = LocalServices
                .getService(DeviceStorageMonitorInternal.class);
                .getService(DeviceStorageMonitorInternal.class);
        if (dsm.isMemoryLow()) {
        if (dsm.isMemoryLow()) {
            Log.w(LOG_TAG, "Cannot add user. Not enough space on disk.");
            Log.w(LOG_TAG, "Cannot add user. Not enough space on disk.");
            return null;
            return null;
        }
        }

        final boolean isGuest = (flags & UserInfo.FLAG_GUEST) != 0;
        final boolean isGuest = (flags & UserInfo.FLAG_GUEST) != 0;
        final boolean isManagedProfile = (flags & UserInfo.FLAG_MANAGED_PROFILE) != 0;
        final boolean isManagedProfile = (flags & UserInfo.FLAG_MANAGED_PROFILE) != 0;
        final boolean isRestricted = (flags & UserInfo.FLAG_RESTRICTED) != 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);
            final StorageManager storage = mContext.getSystemService(StorageManager.class);
            storage.createUserKey(userId, userInfo.serialNumber, userInfo.isEphemeral());
            storage.createUserKey(userId, userInfo.serialNumber, userInfo.isEphemeral());
            t.traceEnd();

            t.traceBegin("prepareUserData");
            mUserDataPreparer.prepareUserData(userId, userInfo.serialNumber,
            mUserDataPreparer.prepareUserData(userId, userInfo.serialNumber,
                    StorageManager.FLAG_STORAGE_DE | StorageManager.FLAG_STORAGE_CE);
                    StorageManager.FLAG_STORAGE_DE | StorageManager.FLAG_STORAGE_CE);
            t.traceEnd();

            t.traceBegin("PM.createNewUser");
            mPm.createNewUser(userId, disallowedPackages);
            mPm.createNewUser(userId, disallowedPackages);
            t.traceEnd();

            userInfo.partial = false;
            userInfo.partial = false;
            synchronized (mPackagesLock) {
            synchronized (mPackagesLock) {
                writeUserLP(userData);
                writeUserLP(userData);
@@ -2839,7 +2860,11 @@ public class UserManagerService extends IUserManager.Stub {
            synchronized (mRestrictionsLock) {
            synchronized (mRestrictionsLock) {
                mBaseUserRestrictions.append(userId, restrictions);
                mBaseUserRestrictions.append(userId, restrictions);
            }
            }

            t.traceBegin("PM.onNewUserCreated");
            mPm.onNewUserCreated(userId);
            mPm.onNewUserCreated(userId);
            t.traceEnd();

            Intent addedIntent = new Intent(Intent.ACTION_USER_ADDED);
            Intent addedIntent = new Intent(Intent.ACTION_USER_ADDED);
            addedIntent.putExtra(Intent.EXTRA_USER_HANDLE, userId);
            addedIntent.putExtra(Intent.EXTRA_USER_HANDLE, userId);
            mContext.sendBroadcastAsUser(addedIntent, UserHandle.ALL,
            mContext.sendBroadcastAsUser(addedIntent, UserHandle.ALL,