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

Commit a7610b3b authored by Philip Junker's avatar Philip Junker Committed by Android (Google) Code Review
Browse files

Merge "Sync BatteryStats user activity types with PowerManager ones."

parents 826ce0df 20fde6c3
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -961,7 +961,7 @@ public abstract class BatteryStats {
         * also be bumped.
         */
        static final String[] USER_ACTIVITY_TYPES = {
            "other", "button", "touch", "accessibility", "attention"
            "other", "button", "touch", "accessibility", "attention", "faceDown", "deviceState"
        };

        public static final int NUM_USER_ACTIVITY_TYPES = USER_ACTIVITY_TYPES.length;
+33 −0
Original line number Diff line number Diff line
@@ -347,6 +347,39 @@ public final class PowerManager {
     */
    public static final int USER_ACTIVITY_EVENT_DEVICE_STATE = 6;

    /**
     * @hide
     */
    @IntDef(prefix = { "USER_ACTIVITY_EVENT_" }, value = {
            USER_ACTIVITY_EVENT_OTHER,
            USER_ACTIVITY_EVENT_BUTTON,
            USER_ACTIVITY_EVENT_TOUCH,
            USER_ACTIVITY_EVENT_ACCESSIBILITY,
            USER_ACTIVITY_EVENT_ATTENTION,
            USER_ACTIVITY_EVENT_FACE_DOWN,
            USER_ACTIVITY_EVENT_DEVICE_STATE,
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface UserActivityEvent{}

    /**
     *
     * Convert the user activity event to a string for debugging purposes.
     * @hide
     */
    public static String userActivityEventToString(@UserActivityEvent int userActivityEvent) {
        switch (userActivityEvent) {
            case USER_ACTIVITY_EVENT_OTHER: return "other";
            case USER_ACTIVITY_EVENT_BUTTON: return "button";
            case USER_ACTIVITY_EVENT_TOUCH: return "touch";
            case USER_ACTIVITY_EVENT_ACCESSIBILITY: return "accessibility";
            case USER_ACTIVITY_EVENT_ATTENTION: return "attention";
            case USER_ACTIVITY_EVENT_FACE_DOWN: return "faceDown";
            case USER_ACTIVITY_EVENT_DEVICE_STATE: return "deviceState";
            default: return Integer.toString(userActivityEvent);
        }
    }

    /**
     * User activity flag: If already dimmed, extend the dim timeout
     * but do not brighten.  This flag is useful for keeping the screen on
+2 −1
Original line number Diff line number Diff line
@@ -571,7 +571,8 @@ public class Notifier {
    /**
     * Called when there has been user activity.
     */
    public void onUserActivity(int displayGroupId, int event, int uid) {
    public void onUserActivity(int displayGroupId, @PowerManager.UserActivityEvent int event,
            int uid) {
        if (DEBUG) {
            Slog.d(TAG, "onUserActivity: event=" + event + ", uid=" + uid);
        }
+20 −7
Original line number Diff line number Diff line
@@ -74,6 +74,8 @@ public class PowerGroup {
    private long mLastPowerOnTime;
    private long mLastUserActivityTime;
    private long mLastUserActivityTimeNoChangeLights;
    @PowerManager.UserActivityEvent
    private int mLastUserActivityEvent;
    /** Timestamp (milliseconds since boot) of the last time the power group was awoken.*/
    private long mLastWakeTime;
    /** Timestamp (milliseconds since boot) of the last time the power group was put to sleep. */
@@ -244,7 +246,7 @@ public class PowerGroup {
        return true;
    }

    boolean dozeLocked(long eventTime, int uid, int reason) {
    boolean dozeLocked(long eventTime, int uid, @PowerManager.GoToSleepReason int reason) {
        if (eventTime < getLastWakeTimeLocked() || !isInteractive(mWakefulness)) {
            return false;
        }
@@ -253,9 +255,14 @@ public class PowerGroup {
        try {
            reason = Math.min(PowerManager.GO_TO_SLEEP_REASON_MAX,
                    Math.max(reason, PowerManager.GO_TO_SLEEP_REASON_MIN));
            long millisSinceLastUserActivity = eventTime - Math.max(
                    mLastUserActivityTimeNoChangeLights, mLastUserActivityTime);
            Slog.i(TAG, "Powering off display group due to "
                    + PowerManager.sleepReasonToString(reason)  + " (groupId= " + getGroupId()
                    + ", uid= " + uid + ")...");
                    + PowerManager.sleepReasonToString(reason)
                    + " (groupId= " + getGroupId() + ", uid= " + uid
                    + ", millisSinceLastUserActivity=" + millisSinceLastUserActivity
                    + ", lastUserActivityEvent=" + PowerManager.userActivityEventToString(
                    mLastUserActivityEvent) + ")...");

            setSandmanSummonedLocked(/* isSandmanSummoned= */ true);
            setWakefulnessLocked(WAKEFULNESS_DOZING, eventTime, uid, reason, /* opUid= */ 0,
@@ -266,14 +273,16 @@ public class PowerGroup {
        return true;
    }

    boolean sleepLocked(long eventTime, int uid, int reason) {
    boolean sleepLocked(long eventTime, int uid, @PowerManager.GoToSleepReason int reason) {
        if (eventTime < mLastWakeTime || getWakefulnessLocked() == WAKEFULNESS_ASLEEP) {
            return false;
        }

        Trace.traceBegin(Trace.TRACE_TAG_POWER, "sleepPowerGroup");
        try {
            Slog.i(TAG, "Sleeping power group (groupId=" + getGroupId() + ", uid=" + uid + ")...");
            Slog.i(TAG,
                    "Sleeping power group (groupId=" + getGroupId() + ", uid=" + uid + ", reason="
                            + PowerManager.sleepReasonToString(reason) + ")...");
            setSandmanSummonedLocked(/* isSandmanSummoned= */ true);
            setWakefulnessLocked(WAKEFULNESS_ASLEEP, eventTime, uid, reason, /* opUid= */0,
                    /* opPackageName= */ null, /* details= */ null);
@@ -287,16 +296,20 @@ public class PowerGroup {
        return mLastUserActivityTime;
    }

    void setLastUserActivityTimeLocked(long lastUserActivityTime) {
    void setLastUserActivityTimeLocked(long lastUserActivityTime,
            @PowerManager.UserActivityEvent int event) {
        mLastUserActivityTime = lastUserActivityTime;
        mLastUserActivityEvent = event;
    }

    public long getLastUserActivityTimeNoChangeLightsLocked() {
        return mLastUserActivityTimeNoChangeLights;
    }

    public void setLastUserActivityTimeNoChangeLightsLocked(long time) {
    public void setLastUserActivityTimeNoChangeLightsLocked(long time,
            @PowerManager.UserActivityEvent int event) {
        mLastUserActivityTimeNoChangeLights = time;
        mLastUserActivityEvent = event;
    }

    public int getUserActivitySummaryLocked() {
+27 −17
Original line number Diff line number Diff line
@@ -1216,6 +1216,7 @@ public final class PowerManagerService extends SystemService
                return;
            }

            Slog.i(TAG, "onFlip(): Face " + (isFaceDown ? "down." : "up."));
            mIsFaceDown = isFaceDown;
            if (isFaceDown) {
                final long currentTime = mClock.uptimeMillis();
@@ -1937,12 +1938,13 @@ public final class PowerManagerService extends SystemService

    // Called from native code.
    @SuppressWarnings("unused")
    private void userActivityFromNative(long eventTime, int event, int displayId, int flags) {
    private void userActivityFromNative(long eventTime, @PowerManager.UserActivityEvent int event,
            int displayId, int flags) {
        userActivityInternal(displayId, eventTime, event, flags, Process.SYSTEM_UID);
    }

    private void userActivityInternal(int displayId, long eventTime, int event, int flags,
            int uid) {
    private void userActivityInternal(int displayId, long eventTime,
            @PowerManager.UserActivityEvent int event, int flags, int uid) {
        synchronized (mLock) {
            if (displayId == Display.INVALID_DISPLAY) {
                if (userActivityNoUpdateLocked(eventTime, event, flags, uid)) {
@@ -1993,11 +1995,12 @@ public final class PowerManagerService extends SystemService

    @GuardedBy("mLock")
    private boolean userActivityNoUpdateLocked(final PowerGroup powerGroup, long eventTime,
            int event, int flags, int uid) {
            @PowerManager.UserActivityEvent int event, int flags, int uid) {
        final int groupId = powerGroup.getGroupId();
        if (DEBUG_SPEW) {
            Slog.d(TAG, "userActivityNoUpdateLocked: groupId=" + groupId
                    + ", eventTime=" + eventTime + ", event=" + event
                    + ", eventTime=" + eventTime
                    + ", event=" + PowerManager.userActivityEventToString(event)
                    + ", flags=0x" + Integer.toHexString(flags) + ", uid=" + uid);
        }

@@ -2032,7 +2035,7 @@ public final class PowerManagerService extends SystemService
            if ((flags & PowerManager.USER_ACTIVITY_FLAG_NO_CHANGE_LIGHTS) != 0) {
                if (eventTime > powerGroup.getLastUserActivityTimeNoChangeLightsLocked()
                        && eventTime > powerGroup.getLastUserActivityTimeLocked()) {
                    powerGroup.setLastUserActivityTimeNoChangeLightsLocked(eventTime);
                    powerGroup.setLastUserActivityTimeNoChangeLightsLocked(eventTime, event);
                    mDirty |= DIRTY_USER_ACTIVITY;
                    if (event == PowerManager.USER_ACTIVITY_EVENT_BUTTON) {
                        mDirty |= DIRTY_QUIESCENT;
@@ -2042,7 +2045,7 @@ public final class PowerManagerService extends SystemService
                }
            } else {
                if (eventTime > powerGroup.getLastUserActivityTimeLocked()) {
                    powerGroup.setLastUserActivityTimeLocked(eventTime);
                    powerGroup.setLastUserActivityTimeLocked(eventTime, event);
                    mDirty |= DIRTY_USER_ACTIVITY;
                    if (event == PowerManager.USER_ACTIVITY_EVENT_BUTTON) {
                        mDirty |= DIRTY_QUIESCENT;
@@ -2069,7 +2072,8 @@ public final class PowerManagerService extends SystemService
            @WakeReason int reason, String details, int uid, String opPackageName, int opUid) {
        if (DEBUG_SPEW) {
            Slog.d(TAG, "wakePowerGroupLocked: eventTime=" + eventTime
                    + ", groupId=" + powerGroup.getGroupId() + ", uid=" + uid);
                    + ", groupId=" + powerGroup.getGroupId()
                    + ", reason=" + PowerManager.wakeReasonToString(reason) + ", uid=" + uid);
        }
        if (mForceSuspendActive || !mSystemReady) {
            return;
@@ -2092,11 +2096,11 @@ public final class PowerManagerService extends SystemService

    @GuardedBy("mLock")
    private boolean dozePowerGroupLocked(final PowerGroup powerGroup, long eventTime,
            int reason, int uid) {
            @GoToSleepReason int reason, int uid) {
        if (DEBUG_SPEW) {
            Slog.d(TAG, "dozePowerGroup: eventTime=" + eventTime
                    + ", groupId=" + powerGroup.getGroupId() + ", reason=" + reason
                    + ", uid=" + uid);
                    + ", groupId=" + powerGroup.getGroupId()
                    + ", reason=" + PowerManager.sleepReasonToString(reason) + ", uid=" + uid);
        }

        if (!mSystemReady || !mBootCompleted) {
@@ -2107,10 +2111,12 @@ public final class PowerManagerService extends SystemService
    }

    @GuardedBy("mLock")
    private boolean sleepPowerGroupLocked(final PowerGroup powerGroup, long eventTime, int reason,
            int uid) {
    private boolean sleepPowerGroupLocked(final PowerGroup powerGroup, long eventTime,
            @GoToSleepReason int reason, int uid) {
        if (DEBUG_SPEW) {
            Slog.d(TAG, "sleepPowerGroup: eventTime=" + eventTime + ", uid=" + uid);
            Slog.d(TAG, "sleepPowerGroup: eventTime=" + eventTime
                    + ", groupId=" + powerGroup.getGroupId()
                    + ", reason=" + PowerManager.sleepReasonToString(reason) + ", uid=" + uid);
        }
        if (!mBootCompleted || !mSystemReady) {
            return false;
@@ -2172,7 +2178,10 @@ public final class PowerManagerService extends SystemService
            case WAKEFULNESS_DOZING:
                traceMethodName = "goToSleep";
                Slog.i(TAG, "Going to sleep due to " + PowerManager.sleepReasonToString(reason)
                        + " (uid " + uid + ")...");
                        + " (uid " + uid + ", screenOffTimeout=" + mScreenOffTimeoutSetting
                        + ", activityTimeoutWM=" + mUserActivityTimeoutOverrideFromWindowManager
                        + ", maxDimRatio=" + mMaximumScreenDimRatioConfig
                        + ", maxDimDur=" + mMaximumScreenDimDurationConfig + ")...");
                mLastGlobalSleepTime = eventTime;
                mLastGlobalSleepReason = reason;
                mLastGlobalSleepTimeRealtime = mClock.elapsedRealtime();
@@ -4258,7 +4267,7 @@ public final class PowerManagerService extends SystemService
    void onUserActivity() {
        synchronized (mLock) {
            mPowerGroups.get(Display.DEFAULT_DISPLAY_GROUP).setLastUserActivityTimeLocked(
                    mClock.uptimeMillis());
                    mClock.uptimeMillis(), PowerManager.USER_ACTIVITY_EVENT_OTHER);
        }
    }

@@ -5646,7 +5655,8 @@ public final class PowerManagerService extends SystemService
        }

        @Override // Binder call
        public void userActivity(int displayId, long eventTime, int event, int flags) {
        public void userActivity(int displayId, long eventTime,
                @PowerManager.UserActivityEvent int event, int flags) {
            final long now = mClock.uptimeMillis();
            if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER)
                    != PackageManager.PERMISSION_GRANTED
Loading