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

Commit 190495a6 authored by Dmitri Plotnikov's avatar Dmitri Plotnikov Committed by Android (Google) Code Review
Browse files

Merge "Adding "quiescent" reboot mechanism to support STB operators"

parents 7a5ad264 a8d2c645
Loading
Loading
Loading
Loading
+4 −1
Original line number Original line Diff line number Diff line
@@ -37,6 +37,10 @@ int main()
    char value[PROPERTY_VALUE_MAX];
    char value[PROPERTY_VALUE_MAX];
    property_get("debug.sf.nobootanimation", value, "0");
    property_get("debug.sf.nobootanimation", value, "0");
    int noBootAnimation = atoi(value);
    int noBootAnimation = atoi(value);
    if (!noBootAnimation) {
        property_get("ro.boot.quiescent", value, "0");
        noBootAnimation = atoi(value);
    }
    ALOGI_IF(noBootAnimation,  "boot animation disabled");
    ALOGI_IF(noBootAnimation,  "boot animation disabled");
    if (!noBootAnimation) {
    if (!noBootAnimation) {


@@ -47,7 +51,6 @@ int main()
        sp<BootAnimation> boot = new BootAnimation();
        sp<BootAnimation> boot = new BootAnimation();


        IPCThreadState::self()->joinThreadPool();
        IPCThreadState::self()->joinThreadPool();

    }
    }
    return 0;
    return 0;
}
}
+6 −0
Original line number Original line Diff line number Diff line
@@ -420,6 +420,12 @@ public final class PowerManager {
     */
     */
    public static final String REBOOT_SAFE_MODE = "safemode";
    public static final String REBOOT_SAFE_MODE = "safemode";


    /**
     * The 'reason' value used when rebooting the device without turning on the screen.
     * @hide
     */
    public static final String REBOOT_QUIESCENT = "quiescent";

    /**
    /**
     * The value to pass as the 'reason' argument to android_reboot().
     * The value to pass as the 'reason' argument to android_reboot().
     * @hide
     * @hide
+42 −7
Original line number Original line Diff line number Diff line
@@ -134,6 +134,8 @@ public final class PowerManagerService extends SystemService
    private static final int DIRTY_DOCK_STATE = 1 << 10;
    private static final int DIRTY_DOCK_STATE = 1 << 10;
    // Dirty bit: brightness boost changed
    // Dirty bit: brightness boost changed
    private static final int DIRTY_SCREEN_BRIGHTNESS_BOOST = 1 << 11;
    private static final int DIRTY_SCREEN_BRIGHTNESS_BOOST = 1 << 11;
    // Dirty bit: sQuiescent changed
    private static final int DIRTY_QUIESCENT = 1 << 12;


    // Summarizes the state of all active wakelocks.
    // Summarizes the state of all active wakelocks.
    private static final int WAKE_LOCK_CPU = 1 << 0;
    private static final int WAKE_LOCK_CPU = 1 << 0;
@@ -169,6 +171,9 @@ public final class PowerManagerService extends SystemService
    // Default setting for double tap to wake.
    // Default setting for double tap to wake.
    private static final int DEFAULT_DOUBLE_TAP_TO_WAKE = 0;
    private static final int DEFAULT_DOUBLE_TAP_TO_WAKE = 0;


    // System property indicating that the screen should remain off until an explicit user action
    private static final String SYSTEM_PROPERTY_QUIESCENT = "ro.boot.quiescent";

    /** Constants for {@link #shutdownOrRebootInternal} */
    /** Constants for {@link #shutdownOrRebootInternal} */
    @Retention(RetentionPolicy.SOURCE)
    @Retention(RetentionPolicy.SOURCE)
    @IntDef({HALT_MODE_SHUTDOWN, HALT_MODE_REBOOT, HALT_MODE_REBOOT_SAFE_MODE})
    @IntDef({HALT_MODE_SHUTDOWN, HALT_MODE_REBOOT, HALT_MODE_REBOOT_SAFE_MODE})
@@ -398,6 +403,9 @@ public final class PowerManagerService extends SystemService
    // True if the device should stay on.
    // True if the device should stay on.
    private boolean mStayOn;
    private boolean mStayOn;


    // True if the lights should stay off until an explicit user action.
    private static boolean sQuiescent;

    // True if the proximity sensor reads a positive result.
    // True if the proximity sensor reads a positive result.
    private boolean mProximityPositive;
    private boolean mProximityPositive;


@@ -530,6 +538,8 @@ public final class PowerManagerService extends SystemService


            mWakefulness = WAKEFULNESS_AWAKE;
            mWakefulness = WAKEFULNESS_AWAKE;


            sQuiescent = SystemProperties.get(SYSTEM_PROPERTY_QUIESCENT, "0").equals("1");

            nativeInit();
            nativeInit();
            nativeSetAutoSuspend(false);
            nativeSetAutoSuspend(false);
            nativeSetInteractive(true);
            nativeSetInteractive(true);
@@ -1190,12 +1200,19 @@ public final class PowerManagerService extends SystemService
                        && eventTime > mLastUserActivityTime) {
                        && eventTime > mLastUserActivityTime) {
                    mLastUserActivityTimeNoChangeLights = eventTime;
                    mLastUserActivityTimeNoChangeLights = eventTime;
                    mDirty |= DIRTY_USER_ACTIVITY;
                    mDirty |= DIRTY_USER_ACTIVITY;
                    if (event == PowerManager.USER_ACTIVITY_EVENT_BUTTON) {
                        mDirty |= DIRTY_QUIESCENT;
                    }

                    return true;
                    return true;
                }
                }
            } else {
            } else {
                if (eventTime > mLastUserActivityTime) {
                if (eventTime > mLastUserActivityTime) {
                    mLastUserActivityTime = eventTime;
                    mLastUserActivityTime = eventTime;
                    mDirty |= DIRTY_USER_ACTIVITY;
                    mDirty |= DIRTY_USER_ACTIVITY;
                    if (event == PowerManager.USER_ACTIVITY_EVENT_BUTTON) {
                        mDirty |= DIRTY_QUIESCENT;
                    }
                    return true;
                    return true;
                }
                }
            }
            }
@@ -2096,7 +2113,7 @@ public final class PowerManagerService extends SystemService
        final boolean oldDisplayReady = mDisplayReady;
        final boolean oldDisplayReady = mDisplayReady;
        if ((dirty & (DIRTY_WAKE_LOCKS | DIRTY_USER_ACTIVITY | DIRTY_WAKEFULNESS
        if ((dirty & (DIRTY_WAKE_LOCKS | DIRTY_USER_ACTIVITY | DIRTY_WAKEFULNESS
                | DIRTY_ACTUAL_DISPLAY_POWER_STATE_UPDATED | DIRTY_BOOT_COMPLETED
                | DIRTY_ACTUAL_DISPLAY_POWER_STATE_UPDATED | DIRTY_BOOT_COMPLETED
                | DIRTY_SETTINGS | DIRTY_SCREEN_BRIGHTNESS_BOOST)) != 0) {
                | DIRTY_SETTINGS | DIRTY_SCREEN_BRIGHTNESS_BOOST | DIRTY_QUIESCENT)) != 0) {
            mDisplayPowerRequest.policy = getDesiredScreenPolicyLocked();
            mDisplayPowerRequest.policy = getDesiredScreenPolicyLocked();


            // Determine appropriate screen brightness and auto-brightness adjustments.
            // Determine appropriate screen brightness and auto-brightness adjustments.
@@ -2163,6 +2180,9 @@ public final class PowerManagerService extends SystemService
                    mRequestWaitForNegativeProximity);
                    mRequestWaitForNegativeProximity);
            mRequestWaitForNegativeProximity = false;
            mRequestWaitForNegativeProximity = false;


            if ((dirty & DIRTY_QUIESCENT) != 0) {
                sQuiescent = false;
            }
            if (DEBUG_SPEW) {
            if (DEBUG_SPEW) {
                Slog.d(TAG, "updateDisplayPowerStateLocked: mDisplayReady=" + mDisplayReady
                Slog.d(TAG, "updateDisplayPowerStateLocked: mDisplayReady=" + mDisplayReady
                        + ", policy=" + mDisplayPowerRequest.policy
                        + ", policy=" + mDisplayPowerRequest.policy
@@ -2170,8 +2190,8 @@ public final class PowerManagerService extends SystemService
                        + ", mWakeLockSummary=0x" + Integer.toHexString(mWakeLockSummary)
                        + ", mWakeLockSummary=0x" + Integer.toHexString(mWakeLockSummary)
                        + ", mUserActivitySummary=0x" + Integer.toHexString(mUserActivitySummary)
                        + ", mUserActivitySummary=0x" + Integer.toHexString(mUserActivitySummary)
                        + ", mBootCompleted=" + mBootCompleted
                        + ", mBootCompleted=" + mBootCompleted
                        + ", mScreenBrightnessBoostInProgress="
                        + ", mScreenBrightnessBoostInProgress=" + mScreenBrightnessBoostInProgress
                                + mScreenBrightnessBoostInProgress);
                        + ", sQuiescent=" + sQuiescent);
            }
            }
        }
        }
        return mDisplayReady && !oldDisplayReady;
        return mDisplayReady && !oldDisplayReady;
@@ -2210,7 +2230,7 @@ public final class PowerManagerService extends SystemService
    }
    }


    private int getDesiredScreenPolicyLocked() {
    private int getDesiredScreenPolicyLocked() {
        if (mWakefulness == WAKEFULNESS_ASLEEP) {
        if (mWakefulness == WAKEFULNESS_ASLEEP || sQuiescent) {
            return DisplayPowerRequest.POLICY_OFF;
            return DisplayPowerRequest.POLICY_OFF;
        }
        }


@@ -2899,10 +2919,25 @@ public final class PowerManagerService extends SystemService
        }
        }
        if (reason.equals(PowerManager.REBOOT_RECOVERY)
        if (reason.equals(PowerManager.REBOOT_RECOVERY)
                || reason.equals(PowerManager.REBOOT_RECOVERY_UPDATE)) {
                || reason.equals(PowerManager.REBOOT_RECOVERY_UPDATE)) {
            SystemProperties.set("sys.powerctl", "reboot,recovery");
            reason = "recovery";
        } else {
        }
            SystemProperties.set("sys.powerctl", "reboot," + reason);

        // If the reason is "quiescent", it means that the boot process should proceed
        // without turning on the screen/lights.
        // The "quiescent" property is sticky, meaning that any number
        // of subsequent reboots should honor the property until it is reset.
        if (reason.equals(PowerManager.REBOOT_QUIESCENT)) {
            sQuiescent = true;
            reason = "";
        }
        }

        if (sQuiescent) {
            // Pass the optional "quiescent" argument to the bootloader to let it know
            // that it should not turn the screen/lights on.
            reason = reason + ",quiescent";
        }

        SystemProperties.set("sys.powerctl", "reboot," + reason);
        try {
        try {
            Thread.sleep(20 * 1000L);
            Thread.sleep(20 * 1000L);
        } catch (InterruptedException e) {
        } catch (InterruptedException e) {