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

Commit c80fa547 authored by petsjonkin's avatar petsjonkin Committed by Oleg Petšjonkin
Browse files

Apply Hdr transition rate only when cap is changed

Bug: b/333865835
Test: manual testing, atest HdrClamperTest
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:419b9bc164c5c66f249e809b8812e7bfc51c473e)
Merged-In: Idb9d24f4555b757be81cca4ce80fb14a1b321da5
Change-Id: Idb9d24f4555b757be81cca4ce80fb14a1b321da5
parent 53a31c05
Loading
Loading
Loading
Loading
+1 −4
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@ package com.android.server.display;
import android.hardware.display.BrightnessInfo;
import android.os.Handler;
import android.os.IBinder;
import android.os.PowerManager;

import com.android.internal.annotations.VisibleForTesting;
import com.android.server.display.brightness.clamper.HdrClamper;
@@ -147,9 +146,7 @@ class BrightnessRangeController {

    float getHdrBrightnessValue() {
        float hdrBrightness = mHbmController.getHdrBrightnessValue();
        float brightnessMax = mUseHdrClamper ? mHdrClamper.getMaxBrightness()
                : PowerManager.BRIGHTNESS_MAX;
        return Math.min(hdrBrightness, brightnessMax);
        return mUseHdrClamper ? mHdrClamper.clamp(hdrBrightness) : hdrBrightness;
    }

    float getTransitionPoint() {
+20 −3
Original line number Diff line number Diff line
@@ -56,6 +56,11 @@ public class HdrClamper {
    private float mTransitionRate = -1f;
    private float mDesiredTransitionRate = -1f;

    /**
     * Indicates that maxBrightness is changed, and we should use slow transition
     */
    private boolean mUseSlowTransition = false;

    public HdrClamper(BrightnessClamperController.ClamperChangeListener clamperChangeListener,
            Handler handler) {
        this(clamperChangeListener, handler, new Injector());
@@ -69,6 +74,7 @@ public class HdrClamper {
        mDebouncer = () -> {
            mTransitionRate = mDesiredTransitionRate;
            mMaxBrightness = mDesiredMaxBrightness;
            mUseSlowTransition = true;
            mClamperChangeListener.onChanged();
        };
        mHdrListener = injector.getHdrListener((visible) -> {
@@ -77,14 +83,24 @@ public class HdrClamper {
        }, handler);
    }

    // Called in same looper: mHandler.getLooper()
    /**
     * Applies clamping
     * Called in same looper: mHandler.getLooper()
     */
    public float clamp(float brightness) {
        return Math.min(brightness, mMaxBrightness);
    }

    @VisibleForTesting
    public float getMaxBrightness() {
        return mMaxBrightness;
    }

    // Called in same looper: mHandler.getLooper()
    public float getTransitionRate() {
        return mTransitionRate;
        float expectedTransitionRate =  mUseSlowTransition ? mTransitionRate : -1;
        mUseSlowTransition = false;
        return  expectedTransitionRate;
    }

    /**
@@ -157,7 +173,8 @@ public class HdrClamper {
        mMaxBrightness = PowerManager.BRIGHTNESS_MAX;
        mDesiredMaxBrightness = PowerManager.BRIGHTNESS_MAX;
        mDesiredTransitionRate = -1f;
        mTransitionRate = 1f;
        mTransitionRate = -1f;
        mUseSlowTransition = false;
        mClamperChangeListener.onChanged();
    }

+1 −1
Original line number Diff line number Diff line
@@ -1298,7 +1298,7 @@ public final class DisplayPowerControllerTest {
        when(mHolder.hbmController.getHighBrightnessMode()).thenReturn(
                BrightnessInfo.HIGH_BRIGHTNESS_MODE_HDR);
        when(mHolder.hbmController.getHdrBrightnessValue()).thenReturn(PowerManager.BRIGHTNESS_MAX);
        when(mHolder.hdrClamper.getMaxBrightness()).thenReturn(clampedBrightness);
        when(mHolder.hdrClamper.clamp(PowerManager.BRIGHTNESS_MAX)).thenReturn(clampedBrightness);
        when(mHolder.hdrClamper.getTransitionRate()).thenReturn(transitionRate);

        mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
+12 −0
Original line number Diff line number Diff line
@@ -220,6 +220,18 @@ public class HdrClamperTest {
        assertEquals(0.04f, mHdrClamper.getTransitionRate(), FLOAT_TOLERANCE);
    }

    @Test
    public void testCalmper_transitionRateOverriddenByOtherRequest() {
        mHdrClamper.onAmbientLuxChange(499);

        mClock.fastForward(3000);
        mTestHandler.timeAdvance();
        assertEquals(0.6f, mHdrClamper.getMaxBrightness(), FLOAT_TOLERANCE);
        assertEquals(0.04, mHdrClamper.getTransitionRate(), FLOAT_TOLERANCE);
        // getTransitionRate should reset transitionRate
        assertEquals(-1f, mHdrClamper.getTransitionRate(), FLOAT_TOLERANCE);
    }

    // MsgInfo.sendTime is calculated first by adding SystemClock.uptimeMillis()
    // (in Handler.sendMessageDelayed) and then by subtracting SystemClock.uptimeMillis()
    // (in TestHandler.sendMessageAtTime, there might be several milliseconds difference between