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

Commit 87e1cf86 authored by petsjonkin's avatar petsjonkin
Browse files

HdrClamper: calculate ainimation rate based on HLG space

Test: atest HdrClamperTest
Bug: b/283447291
Change-Id: I86b363daeae69b57d036b0c0e7155c94858d88a3
parent 87d619ce
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.os.PowerManager;
import android.view.SurfaceControlHdrLayerInfoListener;

import com.android.internal.annotations.VisibleForTesting;
import com.android.server.display.BrightnessUtils;
import com.android.server.display.config.HdrBrightnessData;

import java.io.PrintWriter;
@@ -178,8 +179,12 @@ public class HdrClamper {
                debounceTime = mHdrBrightnessData.mBrightnessDecreaseDebounceMillis;
                transitionDuration = mHdrBrightnessData.mBrightnessDecreaseDurationMillis;
            }

            float maxHlg = BrightnessUtils.convertLinearToGamma(mMaxBrightness);
            float desiredMaxHlg = BrightnessUtils.convertLinearToGamma(mDesiredMaxBrightness);

            mDesiredTransitionRate = Math.abs(
                    (mMaxBrightness - mDesiredMaxBrightness) * 1000f / transitionDuration);
                    (maxHlg - desiredMaxHlg) * 1000f / transitionDuration);

            mHandler.removeCallbacks(mDebouncer);
            mHandler.postDelayed(mDebouncer, debounceTime);
+6 −3
Original line number Diff line number Diff line
@@ -118,7 +118,8 @@ public class HdrClamperTest {
        mClock.fastForward(3000);
        mTestHandler.timeAdvance();
        assertEquals(0.6f, mHdrClamper.getMaxBrightness(), FLOAT_TOLERANCE);
        assertEquals(0.1f, mHdrClamper.getTransitionRate(), FLOAT_TOLERANCE); // (1-0.6) / 4
        // 0.6 to HLG = 0.905727, rate = (1-0.905727) / 4
        assertEquals(0.023568f, mHdrClamper.getTransitionRate(), FLOAT_TOLERANCE);
    }

    @Test
@@ -146,7 +147,8 @@ public class HdrClamperTest {
        mClock.fastForward(1000);
        mTestHandler.timeAdvance();
        assertEquals(PowerManager.BRIGHTNESS_MAX, mHdrClamper.getMaxBrightness(), FLOAT_TOLERANCE);
        assertEquals(0.2f, mHdrClamper.getTransitionRate(), FLOAT_TOLERANCE); // (1-0.6) / 2
        // 0.6 to HLG = 0.905727, rate = (1-0.905727) / 2
        assertEquals(0.047137f, mHdrClamper.getTransitionRate(), FLOAT_TOLERANCE);
    }

    @Test
@@ -173,7 +175,8 @@ public class HdrClamperTest {
        mClock.fastForward(3000);
        mTestHandler.timeAdvance();
        assertEquals(0.6f, mHdrClamper.getMaxBrightness(), FLOAT_TOLERANCE);
        assertEquals(0.1f, mHdrClamper.getTransitionRate(), FLOAT_TOLERANCE);
        // 0.6 to HLG = 0.905727, rate = (1-0.905727) / 4
        assertEquals(0.023568f, mHdrClamper.getTransitionRate(), FLOAT_TOLERANCE);
    }

    // MsgInfo.sendTime is calculated first by adding SystemClock.uptimeMillis()