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

Commit 9c631d32 authored by Anna Bauza's avatar Anna Bauza Committed by Android (Google) Code Review
Browse files

Merge "Fix wrong userId being reported to CUJ metrics"

parents 9157854c 8f749a77
Loading
Loading
Loading
Loading
+47 −26
Original line number Diff line number Diff line
@@ -4466,17 +4466,19 @@ public class UserManagerService extends IUserManager.Stub {
            boolean preCreate, @Nullable String[] disallowedPackages,
            @Nullable Object token)
            throws UserManager.CheckedUserOperationException {
        final int nextProbableUserId = getNextAvailableId();
        final int noneUserId = -1;
        final TimingsTraceAndSlog t = new TimingsTraceAndSlog();
        t.traceBegin("createUser-" + flags);
        final long sessionId = logUserCreateJourneyBegin(nextProbableUserId, userType, flags);
        final long sessionId = logUserCreateJourneyBegin(noneUserId);
        UserInfo newUser = null;
        try {
            newUser = createUserInternalUncheckedNoTracing(name, userType, flags, parentId,
                        preCreate, disallowedPackages, t, token);
            return newUser;
        } finally {
            logUserCreateJourneyFinish(sessionId, nextProbableUserId, newUser != null);
            logUserCreateJourneyFinish(sessionId,
                    newUser != null ? newUser.id : noneUserId, userType, flags,
                    newUser != null);
            t.traceEnd();
        }
    }
@@ -4969,42 +4971,60 @@ public class UserManagerService extends IUserManager.Stub {
                && !userTypeDetails.getName().equals(UserManager.USER_TYPE_FULL_RESTRICTED);
    }

    private long logUserCreateJourneyBegin(@UserIdInt int userId, String userType,
            @UserInfoFlag int flags) {
    private long logUserCreateJourneyBegin(@UserIdInt int userId) {
        return logUserJourneyBegin(
                FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__JOURNEY__USER_CREATE,
                userId, userType, flags);
                userId);
    }

    private void logUserCreateJourneyFinish(long sessionId, @UserIdInt int userId, boolean finish) {
        FrameworkStatsLog.write(FrameworkStatsLog.USER_LIFECYCLE_EVENT_OCCURRED, sessionId, userId,
                FrameworkStatsLog.USER_LIFECYCLE_EVENT_OCCURRED__EVENT__CREATE_USER,
                finish ? FrameworkStatsLog.USER_LIFECYCLE_EVENT_OCCURRED__STATE__FINISH
                        : FrameworkStatsLog.USER_LIFECYCLE_EVENT_OCCURRED__STATE__NONE);
    private void logUserCreateJourneyFinish(long sessionId, @UserIdInt int userId, String userType,
            @UserInfoFlag int flags, boolean finish) {
        logUserJourneyFinish(sessionId,
                FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__JOURNEY__USER_CREATE,
                userId, userType, flags, finish);
    }

    private long logUserRemoveJourneyBegin(@UserIdInt int userId, String userType,
            @UserInfoFlag int flags) {
    private long logUserRemoveJourneyBegin(@UserIdInt int userId) {
        return logUserJourneyBegin(
                FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__JOURNEY__USER_REMOVE,
                userId, userType, flags);
                userId);
    }

    private void logUserRemoveJourneyFinish(long sessionId, @UserIdInt int userId, boolean finish) {
        FrameworkStatsLog.write(FrameworkStatsLog.USER_LIFECYCLE_EVENT_OCCURRED, sessionId, userId,
                FrameworkStatsLog.USER_LIFECYCLE_EVENT_OCCURRED__EVENT__REMOVE_USER,
                finish ? FrameworkStatsLog.USER_LIFECYCLE_EVENT_OCCURRED__STATE__FINISH
                        : FrameworkStatsLog.USER_LIFECYCLE_EVENT_OCCURRED__STATE__NONE);
    private void logUserRemoveJourneyFinish(long sessionId, @UserIdInt int userId, String userType,
            @UserInfoFlag int flags, boolean finish) {
        logUserJourneyFinish(sessionId,
                FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__JOURNEY__USER_REMOVE,
                userId, userType, flags, finish);
    }

    private long logUserJourneyBegin(int journey, @UserIdInt int userId, String userType,
            @UserInfoFlag int flags) {
        final long sessionId = ThreadLocalRandom.current().nextLong(1, Long.MAX_VALUE);
    private void logUserJourneyFinish(long sessionId, int journey, @UserIdInt int userId,
            String userType, @UserInfoFlag int flags, boolean finish) {

        // log the journey atom with the user metadata
        FrameworkStatsLog.write(FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED, sessionId,
                journey, /* origin_user= */ -1, userId,
                UserManager.getUserTypeForStatsd(userType), flags);

        int event;
        switch (journey) {
            case FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__JOURNEY__USER_CREATE:
                event = FrameworkStatsLog.USER_LIFECYCLE_EVENT_OCCURRED__EVENT__CREATE_USER;
                break;
            case FrameworkStatsLog.USER_LIFECYCLE_JOURNEY_REPORTED__JOURNEY__USER_REMOVE:
                event = FrameworkStatsLog.USER_LIFECYCLE_EVENT_OCCURRED__EVENT__REMOVE_USER;
                break;
            default:
                throw new IllegalArgumentException("Journey " + journey + " not expected.");
        }
        FrameworkStatsLog.write(FrameworkStatsLog.USER_LIFECYCLE_EVENT_OCCURRED, sessionId, userId,
                event,
                finish ? FrameworkStatsLog.USER_LIFECYCLE_EVENT_OCCURRED__STATE__FINISH
                        : FrameworkStatsLog.USER_LIFECYCLE_EVENT_OCCURRED__STATE__NONE);
    }

    private long logUserJourneyBegin(int journey, @UserIdInt int userId) {
        final long sessionId = ThreadLocalRandom.current().nextLong(1, Long.MAX_VALUE);

        // log the event atom to indicate the event start
        int event;
        switch (journey) {
@@ -5322,8 +5342,7 @@ public class UserManagerService extends IUserManager.Stub {
                writeUserLP(userData);
            }

            final long sessionId = logUserRemoveJourneyBegin(
                    userId, userData.info.userType, userData.info.flags);
            final long sessionId = logUserRemoveJourneyBegin(userId);

            try {
                mAppOpsService.removeUser(userId);
@@ -5344,11 +5363,13 @@ public class UserManagerService extends IUserManager.Stub {
                            @Override
                            public void userStopped(int userIdParam) {
                                finishRemoveUser(userIdParam);
                                logUserRemoveJourneyFinish(sessionId, userIdParam, true);
                                logUserRemoveJourneyFinish(sessionId, userIdParam,
                                        userData.info.userType, userData.info.flags, true);
                            }
                            @Override
                            public void userStopAborted(int userIdParam) {
                                logUserRemoveJourneyFinish(sessionId, userIdParam, false);
                                logUserRemoveJourneyFinish(sessionId, userIdParam,
                                        userData.info.userType, userData.info.flags, false);
                            }
                        });
            } catch (RemoteException e) {