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

Commit b4106fb6 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Partially revert "Make Light Doze timings deterministic.""

parents 0741fd3a a12b7957
Loading
Loading
Loading
Loading
+127 −152
Original line number Diff line number Diff line
@@ -244,7 +244,7 @@ import java.util.stream.Collectors;
         label="LIGHT_STATE_INACTIVE\nScreen off AND Not charging",
         color=black,shape=diamond
       ]
       LIGHT_STATE_IDLE [label="LIGHT_STATE_IDLE\n",color=blue,shape=oval]
       LIGHT_STATE_IDLE [label="LIGHT_STATE_IDLE\n",color=red,shape=box]
       LIGHT_STATE_WAITING_FOR_NETWORK [
         label="LIGHT_STATE_WAITING_FOR_NETWORK\n"
             + "Coming out of LIGHT_STATE_IDLE, waiting for network",
@@ -490,9 +490,9 @@ public class DeviceIdleController extends SystemService
    @GuardedBy("this")
    private long mNextLightIdleDelay;
    @GuardedBy("this")
    private long mNextLightAlarmTime;
    private long mNextLightIdleDelayFlex;
    @GuardedBy("this")
    private long mNextLightMaintenanceAlarmTime;
    private long mNextLightAlarmTime;
    @GuardedBy("this")
    private long mNextSensingTimeoutAlarmTime;

@@ -689,15 +689,6 @@ public class DeviceIdleController extends SystemService
        }
    };

    private final AlarmManager.OnAlarmListener mLightMaintenanceAlarmListener = () -> {
        if (DEBUG) {
            Slog.d(TAG, "Light maintenance alarm fired");
        }
        synchronized (DeviceIdleController.this) {
            stepLightIdleStateLocked("s:alarm");
        }
    };

    /** AlarmListener to start monitoring motion if there are registered stationary listeners. */
    private final AlarmManager.OnAlarmListener mMotionRegistrationAlarmListener = () -> {
        synchronized (DeviceIdleController.this) {
@@ -962,6 +953,9 @@ public class DeviceIdleController extends SystemService
        private static final String KEY_LIGHT_IDLE_AFTER_INACTIVE_TIMEOUT =
                "light_after_inactive_to";
        private static final String KEY_LIGHT_IDLE_TIMEOUT = "light_idle_to";
        private static final String KEY_LIGHT_IDLE_TIMEOUT_INITIAL_FLEX =
                "light_idle_to_initial_flex";
        private static final String KEY_LIGHT_IDLE_TIMEOUT_MAX_FLEX = "light_max_idle_to_flex";
        private static final String KEY_LIGHT_IDLE_FACTOR = "light_idle_factor";
        private static final String KEY_LIGHT_MAX_IDLE_TIMEOUT = "light_max_idle_to";
        private static final String KEY_LIGHT_IDLE_MAINTENANCE_MIN_BUDGET =
@@ -1010,6 +1004,10 @@ public class DeviceIdleController extends SystemService
                !COMPRESS_TIME ? 4 * 60 * 1000L : 30 * 1000L;
        private long mDefaultLightIdleTimeout =
                !COMPRESS_TIME ? 5 * 60 * 1000L : 15 * 1000L;
        private long mDefaultLightIdleTimeoutInitialFlex =
                !COMPRESS_TIME ? 60 * 1000L : 5 * 1000L;
        private long mDefaultLightIdleTimeoutMaxFlex =
                !COMPRESS_TIME ? 15 * 60 * 1000L : 60 * 1000L;
        private float mDefaultLightIdleFactor = 2f;
        private long mDefaultLightMaxIdleTimeout =
                !COMPRESS_TIME ? 15 * 60 * 1000L : 60 * 1000L;
@@ -1083,6 +1081,22 @@ public class DeviceIdleController extends SystemService
         */
        public long LIGHT_IDLE_TIMEOUT = mDefaultLightIdleTimeout;

        /**
         * This is the initial alarm window size that we will tolerate for light idle maintenance
         * timing.
         *
         * @see #KEY_LIGHT_IDLE_TIMEOUT_MAX_FLEX
         * @see #mNextLightIdleDelayFlex
         */
        public long LIGHT_IDLE_TIMEOUT_INITIAL_FLEX = mDefaultLightIdleTimeoutInitialFlex;

        /**
         * This is the maximum value that {@link #mNextLightIdleDelayFlex} should take.
         *
         * @see #KEY_LIGHT_IDLE_TIMEOUT_INITIAL_FLEX
         */
        public long LIGHT_IDLE_TIMEOUT_MAX_FLEX = mDefaultLightIdleTimeoutMaxFlex;

        /**
         * Scaling factor to apply to the light idle mode time each time we complete a cycle.
         *
@@ -1321,6 +1335,14 @@ public class DeviceIdleController extends SystemService
            mDefaultLightIdleTimeout = getTimeout(
                    res.getInteger(com.android.internal.R.integer.device_idle_light_idle_to_ms),
                    mDefaultLightIdleTimeout);
            mDefaultLightIdleTimeoutInitialFlex = getTimeout(
                    res.getInteger(
                            com.android.internal.R.integer.device_idle_light_idle_to_init_flex_ms),
                    mDefaultLightIdleTimeoutInitialFlex);
            mDefaultLightIdleTimeoutMaxFlex = getTimeout(
                    res.getInteger(
                            com.android.internal.R.integer.device_idle_light_idle_to_max_flex_ms),
                    mDefaultLightIdleTimeoutMaxFlex);
            mDefaultLightIdleFactor = res.getFloat(
                    com.android.internal.R.integer.device_idle_light_idle_factor);
            mDefaultLightMaxIdleTimeout = getTimeout(
@@ -1400,6 +1422,8 @@ public class DeviceIdleController extends SystemService
            FLEX_TIME_SHORT = mDefaultFlexTimeShort;
            LIGHT_IDLE_AFTER_INACTIVE_TIMEOUT = mDefaultLightIdleAfterInactiveTimeout;
            LIGHT_IDLE_TIMEOUT = mDefaultLightIdleTimeout;
            LIGHT_IDLE_TIMEOUT_INITIAL_FLEX = mDefaultLightIdleTimeoutInitialFlex;
            LIGHT_IDLE_TIMEOUT_MAX_FLEX = mDefaultLightIdleTimeoutMaxFlex;
            LIGHT_IDLE_FACTOR = mDefaultLightIdleFactor;
            LIGHT_MAX_IDLE_TIMEOUT = mDefaultLightMaxIdleTimeout;
            LIGHT_IDLE_MAINTENANCE_MIN_BUDGET = mDefaultLightIdleMaintenanceMinBudget;
@@ -1457,6 +1481,16 @@ public class DeviceIdleController extends SystemService
                            LIGHT_IDLE_TIMEOUT = properties.getLong(
                                    KEY_LIGHT_IDLE_TIMEOUT, mDefaultLightIdleTimeout);
                            break;
                        case KEY_LIGHT_IDLE_TIMEOUT_INITIAL_FLEX:
                            LIGHT_IDLE_TIMEOUT_INITIAL_FLEX = properties.getLong(
                                    KEY_LIGHT_IDLE_TIMEOUT_INITIAL_FLEX,
                                    mDefaultLightIdleTimeoutInitialFlex);
                            break;
                        case KEY_LIGHT_IDLE_TIMEOUT_MAX_FLEX:
                            LIGHT_IDLE_TIMEOUT_MAX_FLEX = properties.getLong(
                                    KEY_LIGHT_IDLE_TIMEOUT_MAX_FLEX,
                                    mDefaultLightIdleTimeoutMaxFlex);
                            break;
                        case KEY_LIGHT_IDLE_FACTOR:
                            LIGHT_IDLE_FACTOR = Math.max(1, properties.getFloat(
                                    KEY_LIGHT_IDLE_FACTOR, mDefaultLightIdleFactor));
@@ -1613,6 +1647,14 @@ public class DeviceIdleController extends SystemService
            TimeUtils.formatDuration(LIGHT_IDLE_TIMEOUT, pw);
            pw.println();

            pw.print("    "); pw.print(KEY_LIGHT_IDLE_TIMEOUT_INITIAL_FLEX); pw.print("=");
            TimeUtils.formatDuration(LIGHT_IDLE_TIMEOUT_INITIAL_FLEX, pw);
            pw.println();

            pw.print("    "); pw.print(KEY_LIGHT_IDLE_TIMEOUT_MAX_FLEX); pw.print("=");
            TimeUtils.formatDuration(LIGHT_IDLE_TIMEOUT_MAX_FLEX, pw);
            pw.println();

            pw.print("    "); pw.print(KEY_LIGHT_IDLE_FACTOR); pw.print("=");
            pw.print(LIGHT_IDLE_FACTOR);
            pw.println();
@@ -3209,7 +3251,7 @@ public class DeviceIdleController extends SystemService
            if (conn != mNetworkConnected) {
                mNetworkConnected = conn;
                if (conn && mLightState == LIGHT_STATE_WAITING_FOR_NETWORK) {
                    stepLightIdleStateLocked("network", /* forceProgression */ true);
                    stepLightIdleStateLocked("network");
                }
            }
        }
@@ -3454,11 +3496,7 @@ public class DeviceIdleController extends SystemService
            moveToLightStateLocked(LIGHT_STATE_INACTIVE, "no activity");
            resetLightIdleManagementLocked();
            scheduleLightAlarmLocked(mConstants.LIGHT_IDLE_AFTER_INACTIVE_TIMEOUT,
                    mConstants.FLEX_TIME_SHORT);
            // After moving in INACTIVE, the maintenance window should start the time inactive
            // timeout and a single light idle period.
            scheduleLightMaintenanceAlarmLocked(
                    mConstants.LIGHT_IDLE_AFTER_INACTIVE_TIMEOUT + mConstants.LIGHT_IDLE_TIMEOUT);
                    mConstants.FLEX_TIME_SHORT, true);
        }
    }

@@ -3480,8 +3518,9 @@ public class DeviceIdleController extends SystemService
    private void resetLightIdleManagementLocked() {
        mNextLightIdleDelay = mConstants.LIGHT_IDLE_TIMEOUT;
        mMaintenanceStartTime = 0;
        mNextLightIdleDelayFlex = mConstants.LIGHT_IDLE_TIMEOUT_INITIAL_FLEX;
        mCurLightIdleBudget = mConstants.LIGHT_IDLE_MAINTENANCE_MIN_BUDGET;
        cancelAllLightAlarmsLocked();
        cancelLightAlarmLocked();
    }

    @GuardedBy("this")
@@ -3514,15 +3553,10 @@ public class DeviceIdleController extends SystemService
        }
    }

    @GuardedBy("this")
    private void stepLightIdleStateLocked(String reason) {
        stepLightIdleStateLocked(reason, false);
    }

    @GuardedBy("this")
    @VisibleForTesting
    @SuppressLint("WakelockTimeout")
    void stepLightIdleStateLocked(String reason, boolean forceProgression) {
    void stepLightIdleStateLocked(String reason) {
        if (mLightState == LIGHT_STATE_ACTIVE || mLightState == LIGHT_STATE_OVERRIDE) {
            // If we are already in deep device idle mode, then
            // there is nothing left to do for light mode.
@@ -3530,37 +3564,44 @@ public class DeviceIdleController extends SystemService
        }

        if (DEBUG) {
            Slog.d(TAG, "stepLightIdleStateLocked: mLightState=" + lightStateToString(mLightState)
                    + " force=" + forceProgression);
            Slog.d(TAG, "stepLightIdleStateLocked: mLightState=" + lightStateToString(mLightState));
        }
        EventLogTags.writeDeviceIdleLightStep();

        final long nowElapsed = mInjector.getElapsedRealtime();
        final boolean crossedMaintenanceTime =
                mNextLightMaintenanceAlarmTime > 0 && nowElapsed >= mNextLightMaintenanceAlarmTime;
        final boolean crossedProgressionTime =
                mNextLightAlarmTime > 0 && nowElapsed >= mNextLightAlarmTime;
        final boolean enterMaintenance;
        if (crossedMaintenanceTime) {
            if (crossedProgressionTime) {
                enterMaintenance = (mNextLightAlarmTime <= mNextLightMaintenanceAlarmTime);
            } else {
                enterMaintenance = true;
            }
        } else if (crossedProgressionTime) {
            enterMaintenance = false;
        } else if (forceProgression) {
            // This will happen for adb commands, unit tests,
            // and when we're in WAITING_FOR_NETWORK and the network connects.
            enterMaintenance =
                    mLightState == LIGHT_STATE_IDLE
                            || mLightState == LIGHT_STATE_WAITING_FOR_NETWORK;
        switch (mLightState) {
            case LIGHT_STATE_INACTIVE:
                mCurLightIdleBudget = mConstants.LIGHT_IDLE_MAINTENANCE_MIN_BUDGET;
                // Reset the upcoming idle delays.
                mNextLightIdleDelay = mConstants.LIGHT_IDLE_TIMEOUT;
                mNextLightIdleDelayFlex = mConstants.LIGHT_IDLE_TIMEOUT_INITIAL_FLEX;
                mMaintenanceStartTime = 0;
                // Fall through to immediately idle.
            case LIGHT_STATE_IDLE_MAINTENANCE:
                if (mMaintenanceStartTime != 0) {
                    long duration = SystemClock.elapsedRealtime() - mMaintenanceStartTime;
                    if (duration < mConstants.LIGHT_IDLE_MAINTENANCE_MIN_BUDGET) {
                        // We didn't use up all of our minimum budget; add this to the reserve.
                        mCurLightIdleBudget +=
                                (mConstants.LIGHT_IDLE_MAINTENANCE_MIN_BUDGET - duration);
                    } else {
            Slog.wtfStack(TAG, "stepLightIdleStateLocked called in invalid state: " + mLightState);
            return;
                        // We used more than our minimum budget; this comes out of the reserve.
                        mCurLightIdleBudget -=
                                (duration - mConstants.LIGHT_IDLE_MAINTENANCE_MIN_BUDGET);
                    }

        if (enterMaintenance) {
                }
                mMaintenanceStartTime = 0;
                scheduleLightAlarmLocked(mNextLightIdleDelay, mNextLightIdleDelayFlex, true);
                mNextLightIdleDelay = Math.min(mConstants.LIGHT_MAX_IDLE_TIMEOUT,
                        (long) (mNextLightIdleDelay * mConstants.LIGHT_IDLE_FACTOR));
                mNextLightIdleDelayFlex = Math.min(mConstants.LIGHT_IDLE_TIMEOUT_MAX_FLEX,
                        (long) (mNextLightIdleDelayFlex * mConstants.LIGHT_IDLE_FACTOR));
                moveToLightStateLocked(LIGHT_STATE_IDLE, reason);
                addEvent(EVENT_LIGHT_IDLE, null);
                mGoingIdleWakeLock.acquire();
                mHandler.sendEmptyMessage(MSG_REPORT_IDLE_ON_LIGHT);
                break;
            case LIGHT_STATE_IDLE:
            case LIGHT_STATE_WAITING_FOR_NETWORK:
                if (mNetworkConnected || mLightState == LIGHT_STATE_WAITING_FOR_NETWORK) {
                    // We have been idling long enough, now it is time to do some work.
                    mActiveIdleOpCount = 1;
@@ -3571,13 +3612,7 @@ public class DeviceIdleController extends SystemService
                    } else if (mCurLightIdleBudget > mConstants.LIGHT_IDLE_MAINTENANCE_MAX_BUDGET) {
                        mCurLightIdleBudget = mConstants.LIGHT_IDLE_MAINTENANCE_MAX_BUDGET;
                    }
                mNextLightIdleDelay = Math.min(mConstants.LIGHT_MAX_IDLE_TIMEOUT,
                        (long) (mNextLightIdleDelay * mConstants.LIGHT_IDLE_FACTOR));
                // We're entering MAINTENANCE. It should end curLightIdleBudget time from now.
                // The next maintenance window should be curLightIdleBudget + nextLightIdleDelay
                // time from now.
                scheduleLightAlarmLocked(mCurLightIdleBudget, mConstants.FLEX_TIME_SHORT);
                scheduleLightMaintenanceAlarmLocked(mCurLightIdleBudget + mNextLightIdleDelay);
                    scheduleLightAlarmLocked(mCurLightIdleBudget, mConstants.FLEX_TIME_SHORT, true);
                    moveToLightStateLocked(LIGHT_STATE_IDLE_MAINTENANCE, reason);
                    addEvent(EVENT_LIGHT_MAINTENANCE, null);
                    mHandler.sendEmptyMessage(MSG_REPORT_IDLE_OFF);
@@ -3585,36 +3620,11 @@ public class DeviceIdleController extends SystemService
                    // We'd like to do maintenance, but currently don't have network
                    // connectivity...  let's try to wait until the network comes back.
                    // We'll only wait for another full idle period, however, and then give up.
                scheduleLightMaintenanceAlarmLocked(mNextLightIdleDelay);
                cancelLightAlarmLocked();
                    scheduleLightAlarmLocked(mNextLightIdleDelay,
                            mNextLightIdleDelayFlex / 2, true);
                    moveToLightStateLocked(LIGHT_STATE_WAITING_FOR_NETWORK, reason);
                }
        } else {
            if (mMaintenanceStartTime != 0) {
                // Cap duration at budget since the non-wakeup alarm to exit maintenance may
                // not fire at the exact intended time, but once the system is up, we will stop
                // more ongoing work.
                long duration = Math.min(mCurLightIdleBudget,
                        SystemClock.elapsedRealtime() - mMaintenanceStartTime);
                if (duration < mConstants.LIGHT_IDLE_MAINTENANCE_MIN_BUDGET) {
                    // We didn't use up all of our minimum budget; add this to the reserve.
                    mCurLightIdleBudget +=
                            (mConstants.LIGHT_IDLE_MAINTENANCE_MIN_BUDGET - duration);
                } else {
                    // We used more than our minimum budget; this comes out of the reserve.
                    mCurLightIdleBudget -=
                            (duration - mConstants.LIGHT_IDLE_MAINTENANCE_MIN_BUDGET);
                }
            }
            mMaintenanceStartTime = 0;
            // We're entering IDLE. We may have used less than curLightIdleBudget for the
            // maintenance window, so reschedule the alarm starting from now.
            scheduleLightMaintenanceAlarmLocked(mNextLightIdleDelay);
            cancelLightAlarmLocked();
            moveToLightStateLocked(LIGHT_STATE_IDLE, reason);
            addEvent(EVENT_LIGHT_IDLE, null);
            mGoingIdleWakeLock.acquire();
            mHandler.sendEmptyMessage(MSG_REPORT_IDLE_ON_LIGHT);
                break;
        }
    }

@@ -3749,7 +3759,7 @@ public class DeviceIdleController extends SystemService
                moveToStateLocked(STATE_IDLE, reason);
                if (mLightState != LIGHT_STATE_OVERRIDE) {
                    moveToLightStateLocked(LIGHT_STATE_OVERRIDE, "deep");
                    cancelAllLightAlarmsLocked();
                    cancelLightAlarmLocked();
                }
                addEvent(EVENT_DEEP_IDLE, null);
                mGoingIdleWakeLock.acquire();
@@ -3995,7 +4005,7 @@ public class DeviceIdleController extends SystemService
                if (mState == STATE_IDLE_MAINTENANCE) {
                    stepIdleStateLocked("s:early");
                } else {
                    stepLightIdleStateLocked("s:early", /* forceProgression */ true);
                    stepLightIdleStateLocked("s:early");
                }
            }
        }
@@ -4102,12 +4112,6 @@ public class DeviceIdleController extends SystemService
        }
    }

    @GuardedBy("this")
    private void cancelAllLightAlarmsLocked() {
        cancelLightAlarmLocked();
        cancelLightMaintenanceAlarmLocked();
    }

    @GuardedBy("this")
    private void cancelLightAlarmLocked() {
        if (mNextLightAlarmTime != 0) {
@@ -4116,14 +4120,6 @@ public class DeviceIdleController extends SystemService
        }
    }

    @GuardedBy("this")
    private void cancelLightMaintenanceAlarmLocked() {
        if (mNextLightMaintenanceAlarmTime != 0) {
            mNextLightMaintenanceAlarmTime = 0;
            mAlarmManager.cancel(mLightMaintenanceAlarmListener);
        }
    }

    @GuardedBy("this")
    void cancelLocatingLocked() {
        if (mLocating) {
@@ -4188,40 +4184,26 @@ public class DeviceIdleController extends SystemService
    }

    @GuardedBy("this")
    @VisibleForTesting
    void scheduleLightAlarmLocked(long delay, long flex) {
    void scheduleLightAlarmLocked(long delay, long flex, boolean wakeup) {
        if (DEBUG) {
            Slog.d(TAG, "scheduleLightAlarmLocked(" + delay
                    + (mConstants.USE_WINDOW_ALARMS ? "/" + flex : "")
                    + ")");
                    + ", wakeup=" + wakeup + ")");
        }
        mNextLightAlarmTime = mInjector.getElapsedRealtime() + delay;
        if (mConstants.USE_WINDOW_ALARMS) {
            mAlarmManager.setWindow(
                    AlarmManager.ELAPSED_REALTIME,
                    wakeup ? AlarmManager.ELAPSED_REALTIME_WAKEUP : AlarmManager.ELAPSED_REALTIME,
                    mNextLightAlarmTime, flex,
                    "DeviceIdleController.light", mLightAlarmListener, mHandler);
        } else {
            mAlarmManager.set(
                    AlarmManager.ELAPSED_REALTIME,
                    wakeup ? AlarmManager.ELAPSED_REALTIME_WAKEUP : AlarmManager.ELAPSED_REALTIME,
                    mNextLightAlarmTime,
                    "DeviceIdleController.light", mLightAlarmListener, mHandler);
        }
    }

    @GuardedBy("this")
    @VisibleForTesting
    void scheduleLightMaintenanceAlarmLocked(long delay) {
        if (DEBUG) {
            Slog.d(TAG, "scheduleLightMaintenanceAlarmLocked(" + delay + ")");
        }
        mNextLightMaintenanceAlarmTime = mInjector.getElapsedRealtime() + delay;
        mAlarmManager.setWindow(
                AlarmManager.ELAPSED_REALTIME_WAKEUP,
                mNextLightMaintenanceAlarmTime, mConstants.FLEX_TIME_SHORT,
                "DeviceIdleController.light", mLightMaintenanceAlarmListener, mHandler);
    }

    @VisibleForTesting
    long getNextLightAlarmTimeForTesting() {
        synchronized (this) {
@@ -4229,13 +4211,6 @@ public class DeviceIdleController extends SystemService
        }
    }

    @VisibleForTesting
    long getNextLightMaintenanceAlarmTimeForTesting() {
        synchronized (this) {
            return mNextLightMaintenanceAlarmTime;
        }
    }

    private void scheduleMotionRegistrationAlarmLocked() {
        if (DEBUG) Slog.d(TAG, "scheduleMotionRegistrationAlarmLocked");
        long nextMotionRegistrationAlarmTime =
@@ -4605,7 +4580,7 @@ public class DeviceIdleController extends SystemService
                        pw.print("Stepped to deep: ");
                        pw.println(stateToString(mState));
                    } else if ("light".equals(arg)) {
                        stepLightIdleStateLocked("s:shell", /* forceProgression */ true);
                        stepLightIdleStateLocked("s:shell");
                        pw.print("Stepped to light: "); pw.println(lightStateToString(mLightState));
                    } else {
                        pw.println("Unknown idle mode: " + arg);
@@ -4645,7 +4620,7 @@ public class DeviceIdleController extends SystemService
                        becomeInactiveIfAppropriateLocked();
                        int curLightState = mLightState;
                        while (curLightState != LIGHT_STATE_IDLE) {
                            stepLightIdleStateLocked("s:shell", /* forceProgression */ true);
                            stepLightIdleStateLocked("s:shell");
                            if (curLightState == mLightState) {
                                pw.print("Unable to go light idle; stopped at ");
                                pw.println(lightStateToString(mLightState));
@@ -5266,19 +5241,19 @@ public class DeviceIdleController extends SystemService
            if (mNextLightIdleDelay != 0) {
                pw.print("  mNextLightIdleDelay=");
                TimeUtils.formatDuration(mNextLightIdleDelay, pw);
                if (mConstants.USE_WINDOW_ALARMS) {
                    pw.print(" (flex=");
                    TimeUtils.formatDuration(mNextLightIdleDelayFlex, pw);
                    pw.println(")");
                } else {
                    pw.println();
                }
            }
            if (mNextLightAlarmTime != 0) {
                pw.print("  mNextLightAlarmTime=");
                TimeUtils.formatDuration(mNextLightAlarmTime, SystemClock.elapsedRealtime(), pw);
                pw.println();
            }
            if (mNextLightMaintenanceAlarmTime != 0) {
                pw.print("  mNextLightMaintenanceAlarmTime=");
                TimeUtils.formatDuration(
                        mNextLightMaintenanceAlarmTime, SystemClock.elapsedRealtime(), pw);
                pw.println();
            }
            if (mCurLightIdleBudget != 0) {
                pw.print("  mCurLightIdleBudget=");
                TimeUtils.formatDuration(mCurLightIdleBudget, pw);
+7 −1
Original line number Diff line number Diff line
@@ -28,11 +28,17 @@
    <integer name="device_idle_flex_time_short_ms">60000</integer>

    <!-- Default for DeviceIdleController.Constants.LIGHT_IDLE_AFTER_INACTIVE_TIMEOUT -->
    <integer name="device_idle_light_after_inactive_to_ms">180000</integer>
    <integer name="device_idle_light_after_inactive_to_ms">240000</integer>

    <!-- Default for DeviceIdleController.Constants.LIGHT_IDLE_TIMEOUT -->
    <integer name="device_idle_light_idle_to_ms">300000</integer>

    <!-- Default for DeviceIdleController.Constants.LIGHT_IDLE_TIMEOUT_MAX_FLEX -->
    <integer name="device_idle_light_idle_to_init_flex_ms">60000</integer>

    <!-- Default for DeviceIdleController.Constants.LIGHT_IDLE_TIMEOUT_MAX_FLEX -->
    <integer name="device_idle_light_idle_to_max_flex_ms">900000</integer>

    <!-- Default for DeviceIdleController.Constants.LIGHT_IDLE_FACTOR -->
    <item name="device_idle_light_idle_factor" format="float" type="integer">2.0</item>

+2 −0
Original line number Diff line number Diff line
@@ -4417,6 +4417,8 @@
  <java-symbol type="integer" name="device_idle_flex_time_short_ms" />
  <java-symbol type="integer" name="device_idle_light_after_inactive_to_ms" />
  <java-symbol type="integer" name="device_idle_light_idle_to_ms" />
  <java-symbol type="integer" name="device_idle_light_idle_to_init_flex_ms" />
  <java-symbol type="integer" name="device_idle_light_idle_to_max_flex_ms" />
  <java-symbol type="integer" name="device_idle_light_idle_factor" />
  <java-symbol type="integer" name="device_idle_light_max_idle_to_ms" />
  <java-symbol type="integer" name="device_idle_light_idle_maintenance_min_budget_ms" />
+51 −117

File changed.

Preview size limit exceeded, changes collapsed.