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

Commit 419b9bc1 authored by petsjonkin's avatar petsjonkin
Browse files

Apply Hdr transition rate only when cap is changed

Bug: b/333865835
Test: manual testing, atest HdrClamperTest
Change-Id: Idb9d24f4555b757be81cca4ce80fb14a1b321da5
parent 057b5afc
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;
@@ -148,9 +147,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
@@ -59,6 +59,11 @@ public class HdrClamper {

    private boolean mAutoBrightnessEnabled = false;

    /**
     * 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());
@@ -72,6 +77,7 @@ public class HdrClamper {
        mDebouncer = () -> {
            mTransitionRate = mDesiredTransitionRate;
            mMaxBrightness = mDesiredMaxBrightness;
            mUseSlowTransition = true;
            mClamperChangeListener.onChanged();
        };
        mHdrListener = injector.getHdrListener((visible) -> {
@@ -80,14 +86,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;
    }

    /**
@@ -173,7 +189,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
@@ -1312,7 +1312,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
@@ -221,6 +221,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