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

Commit 8d9bf91b authored by petsjonkin's avatar petsjonkin
Browse files

HdrClamper should be disabled if hdr data is missing

Bug:b/303824018
Test: atest HdrClamperTest

Also please see presubmit runs for different patchsets:
patchset 1: HdrClamper force-enabled - observer virtual display related crashes in presubmit
patchset 2: HdrClamper force-enabled, fix applied - observer no crashes in presubmit
patchset 3: HdrClamper back to flag-controlled, fix applied.

Change-Id: I9270788c56cdbfce4e0eb6dbab8e7b9c42258d95
parent 48cf465e
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -105,17 +105,22 @@ public class HdrClamper {
    public void resetHdrConfig(HdrBrightnessData data, int width, int height,
            float minimumHdrPercentOfScreen, IBinder displayToken) {
        mHdrBrightnessData = data;
        mHdrListener.mHdrMinPixels = (float) (width * height) * minimumHdrPercentOfScreen;
        mHdrListener.mHdrMinPixels = minimumHdrPercentOfScreen <= 0 ? -1
                : (float) (width * height) * minimumHdrPercentOfScreen;
        if (displayToken != mRegisteredDisplayToken) { // token changed, resubscribe
            if (mRegisteredDisplayToken != null) { // previous token not null, unsubscribe
                mHdrListener.unregister(mRegisteredDisplayToken);
                mHdrVisible = false;
                mRegisteredDisplayToken = null;
            }
            if (displayToken != null) { // new token not null, subscribe
            // new token not null and hdr min % of the screen is set, subscribe.
            // e.g. for virtual display, HBM data will be missing and HdrListener
            // should not be registered
            if (displayToken != null && mHdrListener.mHdrMinPixels > 0) {
                mHdrListener.register(displayToken);
            }
                mRegisteredDisplayToken = displayToken;
            }
        }
        recalculateBrightnessCap(data, mAmbientLux, mHdrVisible);
    }

+34 −0
Original line number Diff line number Diff line
@@ -22,6 +22,9 @@ import static junit.framework.Assert.assertTrue;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

@@ -96,6 +99,37 @@ public class HdrClamperTest {
        configureClamper();
    }

    @Test
    public void testRegisterHdrListener() {
        verify(mMockHdrInfoListener).register(mMockBinder);
    }

    @Test
    public void testRegisterOtherHdrListenerWhenCalledWithOtherToken() {
        IBinder otherBinder = mock(IBinder.class);
        mHdrClamper.resetHdrConfig(TEST_HDR_DATA, WIDTH, HEIGHT, MIN_HDR_PERCENT, otherBinder);

        verify(mMockHdrInfoListener).unregister(mMockBinder);
        verify(mMockHdrInfoListener).register(otherBinder);
    }

    @Test
    public void testRegisterHdrListenerOnceWhenCalledWithSameToken() {
        mHdrClamper.resetHdrConfig(TEST_HDR_DATA, WIDTH, HEIGHT, MIN_HDR_PERCENT, mMockBinder);

        verify(mMockHdrInfoListener, never()).unregister(mMockBinder);
        verify(mMockHdrInfoListener, times(1)).register(mMockBinder);
    }

    @Test
    public void testRegisterNotCalledIfHbmConfigIsMissing() {
        IBinder otherBinder = mock(IBinder.class);
        mHdrClamper.resetHdrConfig(TEST_HDR_DATA, WIDTH, HEIGHT, -1, otherBinder);

        verify(mMockHdrInfoListener).unregister(mMockBinder);
        verify(mMockHdrInfoListener, never()).register(otherBinder);
    }

    @Test
    public void testClamper_AmbientLuxChangesAboveLimit() {
        mHdrClamper.onAmbientLuxChange(500);