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

Commit be2cc83d authored by petsjonkin's avatar petsjonkin
Browse files

Temproary disabling NBMController and HdrClamper when adaptive brightness is off

Currently NBMController and HdrClamper recevice ambient lux state from AutoBrightnessController.
ABC unsubscribes from lightSensor when adaptive brightness is off. This leads to capping based on stale lux value.

NBMController and HdrClamper will be re-enabled when adaptive brightenss is off after ABC/LightSensor decoupling

Bug: b/322445088
Test: atest HdrClamperTest atest NormalBrightnessControllerTest
Change-Id: I666c6a17956df73d751cd453e858305925a2d21c
parent 3825ffc7
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -117,6 +117,7 @@ class BrightnessRangeController {
                () -> mNormalBrightnessModeController.setAutoBrightnessState(state),
                () ->  mHbmController.setAutoBrightnessEnabled(state)
        );
        mHdrClamper.setAutoBrightnessState(state);
    }

    void onBrightnessChanged(float brightness, float unthrottledBrightness,
+4 −2
Original line number Diff line number Diff line
@@ -79,10 +79,12 @@ class NormalBrightnessModeController {
            maxBrightnessPoints = mMaxBrightnessLimits.get(BrightnessLimitMapType.ADAPTIVE);
        }

        if (maxBrightnessPoints == null) {
        // AutoBrightnessController sends ambientLux values *only* when auto brightness enabled.
        // Temporary disabling this Controller if auto brightness is off, to avoid capping
        // brightness based on stale ambient lux. The issue is tracked here: b/322445088
        if (mAutoBrightnessEnabled && maxBrightnessPoints == null) {
            maxBrightnessPoints = mMaxBrightnessLimits.get(BrightnessLimitMapType.DEFAULT);
        }

        if (maxBrightnessPoints != null) {
            for (Map.Entry<Float, Float> brightnessPoint : maxBrightnessPoints.entrySet()) {
                float ambientBoundary = brightnessPoint.getKey();
+20 −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.AutomaticBrightnessController;
import com.android.server.display.config.HdrBrightnessData;

import java.io.PrintWriter;
@@ -56,6 +57,8 @@ public class HdrClamper {
    private float mTransitionRate = -1f;
    private float mDesiredTransitionRate = -1f;

    private boolean mAutoBrightnessEnabled = false;

    public HdrClamper(BrightnessClamperController.ClamperChangeListener clamperChangeListener,
            Handler handler) {
        this(clamperChangeListener, handler, new Injector());
@@ -122,6 +125,18 @@ public class HdrClamper {
        recalculateBrightnessCap(data, mAmbientLux, mHdrVisible);
    }

    /**
     * Sets state of auto brightness to temporary disabling this Clamper if auto brightness is off.
     * The issue is tracked here: b/322445088
     */
    public void setAutoBrightnessState(int state) {
        boolean isEnabled = state == AutomaticBrightnessController.AUTO_BRIGHTNESS_ENABLED;
        if (isEnabled != mAutoBrightnessEnabled) {
            mAutoBrightnessEnabled = isEnabled;
            recalculateBrightnessCap(mHdrBrightnessData, mAmbientLux, mHdrVisible);
        }
    }

    /** Clean up all resources */
    @SuppressLint("AndroidFrameworkRequiresPermission")
    public void stop() {
@@ -145,6 +160,7 @@ public class HdrClamper {
                : mHdrBrightnessData.toString()));
        pw.println("  mHdrListener registered=" + (mRegisteredDisplayToken != null));
        pw.println("  mAmbientLux=" + mAmbientLux);
        pw.println("  mAutoBrightnessEnabled=" + mAutoBrightnessEnabled);
    }

    private void reset() {
@@ -163,7 +179,10 @@ public class HdrClamper {

    private void recalculateBrightnessCap(HdrBrightnessData data, float ambientLux,
            boolean hdrVisible) {
        if (data == null || !hdrVisible) {
        // AutoBrightnessController sends ambientLux values *only* when auto brightness enabled.
        // Temporary disabling this Clamper if auto brightness is off, to avoid capping
        // brightness based on stale ambient lux. The issue is tracked here: b/322445088
        if (data == null || !hdrVisible || !mAutoBrightnessEnabled) {
            reset();
            return;
        }
+15 −10
Original line number Diff line number Diff line
@@ -43,6 +43,11 @@ public class NormalBrightnessModeControllerTest {

    private final NormalBrightnessModeController mController = new NormalBrightnessModeController();

    // AutoBrightnessController sends ambientLux values *only* when auto brightness enabled.
    // NormalBrightnessModeController is temporary disabled  if auto brightness is off,
    // to avoid capping brightness based on stale ambient lux. Temporary disabling tests with
    // auto brightness off and default config pres
    // The issue is tracked here: b/322445088
    @Keep
    private static Object[][] brightnessData() {
        return new Object[][]{
@@ -59,10 +64,10 @@ public class NormalBrightnessModeControllerTest {
                        ImmutableMap.of(99f, 0.1f, 101f, 0.2f)
                ), 0.2f},
                // Auto brightness - off, config only for default
                {100, AutomaticBrightnessController.AUTO_BRIGHTNESS_DISABLED, ImmutableMap.of(
                        BrightnessLimitMapType.DEFAULT,
                        ImmutableMap.of(99f, 0.1f, 101f, 0.2f)
                ), 0.2f},
                // {100, AutomaticBrightnessController.AUTO_BRIGHTNESS_DISABLED, ImmutableMap.of(
                //        BrightnessLimitMapType.DEFAULT,
                //        ImmutableMap.of(99f, 0.1f, 101f, 0.2f)
                // ), 0.2f},
                // Auto brightness - off, config only for adaptive
                {100, AutomaticBrightnessController.AUTO_BRIGHTNESS_DISABLED, ImmutableMap.of(
                        BrightnessLimitMapType.ADAPTIVE,
@@ -81,12 +86,12 @@ public class NormalBrightnessModeControllerTest {
                        ImmutableMap.of(99f, 0.3f, 101f, 0.4f)
                ), 0.4f},
                // Auto brightness - off, config for both
                {100, AutomaticBrightnessController.AUTO_BRIGHTNESS_DISABLED, ImmutableMap.of(
                        BrightnessLimitMapType.DEFAULT,
                        ImmutableMap.of(99f, 0.1f, 101f, 0.2f),
                        BrightnessLimitMapType.ADAPTIVE,
                        ImmutableMap.of(99f, 0.3f, 101f, 0.4f)
                ), 0.2f},
                // {100, AutomaticBrightnessController.AUTO_BRIGHTNESS_DISABLED, ImmutableMap.of(
                //        BrightnessLimitMapType.DEFAULT,
                //        ImmutableMap.of(99f, 0.1f, 101f, 0.2f),
                //        BrightnessLimitMapType.ADAPTIVE,
                //        ImmutableMap.of(99f, 0.3f, 101f, 0.4f)
                // ), 0.2f},
                // Auto brightness - on, config for both, ambient high
                {1000, AutomaticBrightnessController.AUTO_BRIGHTNESS_ENABLED, ImmutableMap.of(
                        BrightnessLimitMapType.DEFAULT,
+6 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import android.os.PowerManager;

import androidx.test.filters.SmallTest;

import com.android.server.display.AutomaticBrightnessController;
import com.android.server.display.config.HdrBrightnessData;
import com.android.server.testutils.OffsettableClock;
import com.android.server.testutils.TestHandler;
@@ -230,6 +231,11 @@ public class HdrClamperTest {
    }

    private void configureClamper() {
        // AutoBrightnessController sends ambientLux values *only* when auto brightness enabled.
        // HdrClamper is temporary disabled  if auto brightness is off.
        // Temporary setting AutoBrightnessState to enabled for this test
        // The issue is tracked here: b/322445088
        mHdrClamper.setAutoBrightnessState(AutomaticBrightnessController.AUTO_BRIGHTNESS_ENABLED);
        mHdrClamper.resetHdrConfig(TEST_HDR_DATA, WIDTH, HEIGHT, MIN_HDR_PERCENT, mMockBinder);
        mHdrChangeListener.onHdrVisible(true);
    }