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

Commit 29dce0f0 authored by Fiona Campbell's avatar Fiona Campbell
Browse files

Make PowerManagerService use float for brightness

Change the override brightness values to use float instead of an int in
PowerManagerService.

Bug: 150671605

Test: WmTests:RootWindowContainerTests
FrameworksServicesTests:PowerManagerServiceTest
CtsOsTestCases:android.os.cts.PowerManagerTest
FrameworksCoreTests:android.os.PowerManagerTest

Change-Id: I97e97e1500dac7f8beb112812d1347fa420afbf7
parent bc930092
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -102,9 +102,9 @@ public abstract class PowerManagerInternal {
     *
     *
     * This method must only be called by the window manager.
     * This method must only be called by the window manager.
     *
     *
     * @param brightness The overridden brightness, or -1 to disable the override.
     * @param brightness The overridden brightness, or Float.NaN to disable the override.
     */
     */
    public abstract void setScreenBrightnessOverrideFromWindowManager(int brightness);
    public abstract void setScreenBrightnessOverrideFromWindowManager(float brightness);


    /**
    /**
     * Used by the window manager to override the user activity timeout based on the
     * Used by the window manager to override the user activity timeout based on the
+14 −19
Original line number Original line Diff line number Diff line
@@ -513,10 +513,7 @@ public final class PowerManagerService extends SystemService


    // The screen brightness setting override from the window manager
    // The screen brightness setting override from the window manager
    // to allow the current foreground activity to override the brightness.
    // to allow the current foreground activity to override the brightness.
    // Use -1 to disable.
    private float mScreenBrightnessOverrideFromWindowManager =
    private int mScreenBrightnessOverrideFromWindowManager = -1;

    private float mScreenBrightnessOverrideFromWindowManagerFloat =
            PowerManager.BRIGHTNESS_INVALID_FLOAT;
            PowerManager.BRIGHTNESS_INVALID_FLOAT;


    // The window manager has determined the user to be inactive via other means.
    // The window manager has determined the user to be inactive via other means.
@@ -2846,7 +2843,7 @@ public final class PowerManagerService extends SystemService
                screenBrightnessOverride = mScreenBrightnessSettingDefault;
                screenBrightnessOverride = mScreenBrightnessSettingDefault;
            } else if (isValidBrightness(mScreenBrightnessOverrideFromWindowManager)) {
            } else if (isValidBrightness(mScreenBrightnessOverrideFromWindowManager)) {
                autoBrightness = false;
                autoBrightness = false;
                screenBrightnessOverride = mScreenBrightnessOverrideFromWindowManagerFloat;
                screenBrightnessOverride = mScreenBrightnessOverrideFromWindowManager;
            } else {
            } else {
                autoBrightness = (mScreenBrightnessModeSetting ==
                autoBrightness = (mScreenBrightnessModeSetting ==
                        Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
                        Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
@@ -2927,8 +2924,8 @@ public final class PowerManagerService extends SystemService
        return !mIsVrModeEnabled && mScreenBrightnessBoostInProgress;
        return !mIsVrModeEnabled && mScreenBrightnessBoostInProgress;
    }
    }


    private static boolean isValidBrightness(int value) {
    private static boolean isValidBrightness(float value) {
        return value >= 0 && value <= 255;
        return value >= PowerManager.BRIGHTNESS_MIN && value <= PowerManager.BRIGHTNESS_MAX;
    }
    }


    @VisibleForTesting
    @VisibleForTesting
@@ -3583,13 +3580,11 @@ public final class PowerManagerService extends SystemService
        }
        }
    }
    }


    // TODO(brightnessfloat): change to float
    private void setScreenBrightnessOverrideFromWindowManagerInternal(float brightness) {
    private void setScreenBrightnessOverrideFromWindowManagerInternal(int brightness) {
        synchronized (mLock) {
        synchronized (mLock) {
            if (mScreenBrightnessOverrideFromWindowManager != brightness) {
            if (!BrightnessSynchronizer.floatEquals(mScreenBrightnessOverrideFromWindowManager,
                    brightness)) {
                mScreenBrightnessOverrideFromWindowManager = brightness;
                mScreenBrightnessOverrideFromWindowManager = brightness;
                mScreenBrightnessOverrideFromWindowManagerFloat =
                        BrightnessSynchronizer.brightnessIntToFloat(mContext, brightness);
                mDirty |= DIRTY_SETTINGS;
                mDirty |= DIRTY_SETTINGS;
                updatePowerStateLocked();
                updatePowerStateLocked();
            }
            }
@@ -3890,8 +3885,8 @@ public final class PowerManagerService extends SystemService
                    + isMaximumScreenOffTimeoutFromDeviceAdminEnforcedLocked() + ")");
                    + isMaximumScreenOffTimeoutFromDeviceAdminEnforcedLocked() + ")");
            pw.println("  mStayOnWhilePluggedInSetting=" + mStayOnWhilePluggedInSetting);
            pw.println("  mStayOnWhilePluggedInSetting=" + mStayOnWhilePluggedInSetting);
            pw.println("  mScreenBrightnessModeSetting=" + mScreenBrightnessModeSetting);
            pw.println("  mScreenBrightnessModeSetting=" + mScreenBrightnessModeSetting);
            pw.println("  mScreenBrightnessOverrideFromWindowManagerFloat="
            pw.println("  mScreenBrightnessOverrideFromWindowManager="
                    + mScreenBrightnessOverrideFromWindowManagerFloat);
                    + mScreenBrightnessOverrideFromWindowManager);
            pw.println("  mUserActivityTimeoutOverrideFromWindowManager="
            pw.println("  mUserActivityTimeoutOverrideFromWindowManager="
                    + mUserActivityTimeoutOverrideFromWindowManager);
                    + mUserActivityTimeoutOverrideFromWindowManager);
            pw.println("  mUserInactiveOverrideFromWindowManager="
            pw.println("  mUserInactiveOverrideFromWindowManager="
@@ -4231,7 +4226,7 @@ public final class PowerManagerService extends SystemService
            proto.write(
            proto.write(
                    PowerServiceSettingsAndConfigurationDumpProto
                    PowerServiceSettingsAndConfigurationDumpProto
                            .SCREEN_BRIGHTNESS_OVERRIDE_FROM_WINDOW_MANAGER,
                            .SCREEN_BRIGHTNESS_OVERRIDE_FROM_WINDOW_MANAGER,
                    mScreenBrightnessOverrideFromWindowManagerFloat);
                    mScreenBrightnessOverrideFromWindowManager);
            proto.write(
            proto.write(
                    PowerServiceSettingsAndConfigurationDumpProto
                    PowerServiceSettingsAndConfigurationDumpProto
                            .USER_ACTIVITY_TIMEOUT_OVERRIDE_FROM_WINDOW_MANAGER_MS,
                            .USER_ACTIVITY_TIMEOUT_OVERRIDE_FROM_WINDOW_MANAGER_MS,
@@ -5430,10 +5425,10 @@ public final class PowerManagerService extends SystemService
    @VisibleForTesting
    @VisibleForTesting
    final class LocalService extends PowerManagerInternal {
    final class LocalService extends PowerManagerInternal {
        @Override
        @Override
        public void setScreenBrightnessOverrideFromWindowManager(int screenBrightness) {
        public void setScreenBrightnessOverrideFromWindowManager(float screenBrightness) {
            if (screenBrightness < PowerManager.BRIGHTNESS_DEFAULT
            if (screenBrightness < PowerManager.BRIGHTNESS_MIN
                    || screenBrightness > PowerManager.BRIGHTNESS_ON) {
                    || screenBrightness > PowerManager.BRIGHTNESS_MAX) {
                screenBrightness = PowerManager.BRIGHTNESS_DEFAULT;
                screenBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
            }
            }
            setScreenBrightnessOverrideFromWindowManagerInternal(screenBrightness);
            setScreenBrightnessOverrideFromWindowManagerInternal(screenBrightness);
        }
        }
+12 −13
Original line number Original line Diff line number Diff line
@@ -178,7 +178,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent>


    private Object mLastWindowFreezeSource = null;
    private Object mLastWindowFreezeSource = null;
    private Session mHoldScreen = null;
    private Session mHoldScreen = null;
    private float mScreenBrightness = -1;
    private float mScreenBrightnessOverride = PowerManager.BRIGHTNESS_INVALID_FLOAT;
    private long mUserActivityTimeout = -1;
    private long mUserActivityTimeout = -1;
    private boolean mUpdateRotation = false;
    private boolean mUpdateRotation = false;
    // Following variables are for debugging screen wakelock only.
    // Following variables are for debugging screen wakelock only.
@@ -826,7 +826,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
        }
        }


        mHoldScreen = null;
        mHoldScreen = null;
        mScreenBrightness = -1;
        mScreenBrightnessOverride = PowerManager.BRIGHTNESS_INVALID_FLOAT;
        mUserActivityTimeout = -1;
        mUserActivityTimeout = -1;
        mObscureApplicationContentOnSecondaryDisplays = false;
        mObscureApplicationContentOnSecondaryDisplays = false;
        mSustainedPerformanceModeCurrent = false;
        mSustainedPerformanceModeCurrent = false;
@@ -936,12 +936,14 @@ class RootWindowContainer extends WindowContainer<DisplayContent>


        mWmService.setHoldScreenLocked(mHoldScreen);
        mWmService.setHoldScreenLocked(mHoldScreen);
        if (!mWmService.mDisplayFrozen) {
        if (!mWmService.mDisplayFrozen) {
            final int brightness = mScreenBrightness < 0 || mScreenBrightness > 1.0f
            final float brightnessOverride = mScreenBrightnessOverride < PowerManager.BRIGHTNESS_MIN
                    ? -1 : toBrightnessOverride(mScreenBrightness);
                    || mScreenBrightnessOverride > PowerManager.BRIGHTNESS_MAX

                    ? PowerManager.BRIGHTNESS_INVALID_FLOAT : mScreenBrightnessOverride;
            int brightnessFloatAsIntBits = Float.floatToIntBits(brightnessOverride);
            // Post these on a handler such that we don't call into power manager service while
            // Post these on a handler such that we don't call into power manager service while
            // holding the window manager lock to avoid lock contention with power manager lock.
            // holding the window manager lock to avoid lock contention with power manager lock.
            mHandler.obtainMessage(SET_SCREEN_BRIGHTNESS_OVERRIDE, brightness, 0).sendToTarget();
            mHandler.obtainMessage(SET_SCREEN_BRIGHTNESS_OVERRIDE, brightnessFloatAsIntBits,
                    0).sendToTarget();
            mHandler.obtainMessage(SET_USER_ACTIVITY_TIMEOUT, mUserActivityTimeout).sendToTarget();
            mHandler.obtainMessage(SET_USER_ACTIVITY_TIMEOUT, mUserActivityTimeout).sendToTarget();
        }
        }


@@ -1125,8 +1127,9 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
                                + "has FLAG_KEEP_SCREEN_ON!!! called by%s",
                                + "has FLAG_KEEP_SCREEN_ON!!! called by%s",
                        w, Debug.getCallers(10));
                        w, Debug.getCallers(10));
            }
            }
            if (!syswin && w.mAttrs.screenBrightness >= 0 && mScreenBrightness < 0) {
            if (!syswin && w.mAttrs.screenBrightness >= 0
                mScreenBrightness = w.mAttrs.screenBrightness;
                    && Float.isNaN(mScreenBrightnessOverride)) {
                mScreenBrightnessOverride = w.mAttrs.screenBrightness;
            }
            }


            final int type = attrs.type;
            final int type = attrs.type;
@@ -1190,10 +1193,6 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
        return doRequest;
        return doRequest;
    }
    }


    private static int toBrightnessOverride(float value) {
        return (int)(value * PowerManager.BRIGHTNESS_ON);
    }

    private final class MyHandler extends Handler {
    private final class MyHandler extends Handler {


        public MyHandler(Looper looper) {
        public MyHandler(Looper looper) {
@@ -1205,7 +1204,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
            switch (msg.what) {
            switch (msg.what) {
                case SET_SCREEN_BRIGHTNESS_OVERRIDE:
                case SET_SCREEN_BRIGHTNESS_OVERRIDE:
                    mWmService.mPowerManagerInternal.setScreenBrightnessOverrideFromWindowManager(
                    mWmService.mPowerManagerInternal.setScreenBrightnessOverrideFromWindowManager(
                            msg.arg1);
                            Float.intBitsToFloat(msg.arg1));
                    break;
                    break;
                case SET_USER_ACTIVITY_TIMEOUT:
                case SET_USER_ACTIVITY_TIMEOUT:
                    mWmService.mPowerManagerInternal.
                    mWmService.mPowerManagerInternal.