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

Commit faf479b2 authored by petsjonkin's avatar petsjonkin
Browse files

Using DisplayManagerFlags to decide if NormalBrightnessController is enabled

Bug: b/277877297
Test: -
Change-Id: I9e716fa23c379d9edc3b53b1d6285890355292a1
parent 1f81948b
Loading
Loading
Loading
Loading
+6 −8
Original line number Diff line number Diff line
@@ -19,10 +19,9 @@ package com.android.server.display;
import android.hardware.display.BrightnessInfo;
import android.os.Handler;
import android.os.IBinder;
import android.provider.DeviceConfigInterface;

import com.android.server.display.brightness.clamper.HdrClamper;
import com.android.server.display.feature.DeviceConfigParameterProvider;
import com.android.server.display.feature.DisplayManagerFlags;

import java.io.PrintWriter;
import java.util.function.BooleanSupplier;
@@ -42,19 +41,19 @@ class BrightnessRangeController {


    BrightnessRangeController(HighBrightnessModeController hbmController,
            Runnable modeChangeCallback, DisplayDeviceConfig displayDeviceConfig, Handler handler) {
            Runnable modeChangeCallback, DisplayDeviceConfig displayDeviceConfig, Handler handler,
            DisplayManagerFlags flags) {
        this(hbmController, modeChangeCallback, displayDeviceConfig,
                new HdrClamper(modeChangeCallback::run, new Handler(handler.getLooper())),
                new DeviceConfigParameterProvider(DeviceConfigInterface.REAL));
                new HdrClamper(modeChangeCallback::run, new Handler(handler.getLooper())), flags);
    }

    BrightnessRangeController(HighBrightnessModeController hbmController,
            Runnable modeChangeCallback, DisplayDeviceConfig displayDeviceConfig,
            HdrClamper hdrClamper, DeviceConfigParameterProvider configParameterProvider) {
            HdrClamper hdrClamper, DisplayManagerFlags flags) {
        mHbmController = hbmController;
        mModeChangeCallback = modeChangeCallback;
        mUseNbmController = configParameterProvider.isNormalBrightnessControllerFeatureEnabled();
        mUseHdrClamper = false;
        mUseNbmController = flags.isNbmControllerEnabled();
        mNormalBrightnessModeController.resetNbmData(displayDeviceConfig.getLuxThrottlingData());
        mHdrClamper = hdrClamper;
    }
@@ -64,7 +63,6 @@ class BrightnessRangeController {
        pw.println("  mUseNormalBrightnessController=" + mUseNbmController);
        mHbmController.dump(pw);
        mNormalBrightnessModeController.dump(pw);

    }

    void onAmbientLuxChange(float ambientLux) {
+2 −2
Original line number Diff line number Diff line
@@ -3267,12 +3267,12 @@ public final class DisplayManagerService extends SystemService {
            displayPowerController = new DisplayPowerController2(
                    mContext, /* injector= */ null, mDisplayPowerCallbacks, mPowerHandler,
                    mSensorManager, mDisplayBlanker, display, mBrightnessTracker, brightnessSetting,
                    () -> handleBrightnessChange(display), hbmMetadata, mBootCompleted);
                    () -> handleBrightnessChange(display), hbmMetadata, mBootCompleted, mFlags);
        } else {
            displayPowerController = new DisplayPowerController(
                    mContext, /* injector= */ null, mDisplayPowerCallbacks, mPowerHandler,
                    mSensorManager, mDisplayBlanker, display, mBrightnessTracker, brightnessSetting,
                    () -> handleBrightnessChange(display), hbmMetadata, mBootCompleted);
                    () -> handleBrightnessChange(display), hbmMetadata, mBootCompleted, mFlags);
        }
        mDisplayPowerControllers.append(display.getDisplayIdLocked(), displayPowerController);
        return displayPowerController;
+3 −2
Original line number Diff line number Diff line
@@ -75,6 +75,7 @@ import com.android.server.display.brightness.BrightnessEvent;
import com.android.server.display.brightness.BrightnessReason;
import com.android.server.display.color.ColorDisplayService.ColorDisplayServiceInternal;
import com.android.server.display.color.ColorDisplayService.ReduceBrightColorsListener;
import com.android.server.display.feature.DisplayManagerFlags;
import com.android.server.display.layout.Layout;
import com.android.server.display.utils.SensorUtils;
import com.android.server.display.whitebalance.DisplayWhiteBalanceController;
@@ -592,7 +593,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
            SensorManager sensorManager, DisplayBlanker blanker, LogicalDisplay logicalDisplay,
            BrightnessTracker brightnessTracker, BrightnessSetting brightnessSetting,
            Runnable onBrightnessChangeRunnable, HighBrightnessModeMetadata hbmMetadata,
            boolean bootCompleted) {
            boolean bootCompleted, DisplayManagerFlags flags) {

        mInjector = injector != null ? injector : new Injector();
        mClock = mInjector.getClock();
@@ -677,7 +678,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        HighBrightnessModeController hbmController = createHbmControllerLocked(modeChangeCallback);

        mBrightnessRangeController = new BrightnessRangeController(hbmController,
                modeChangeCallback, mDisplayDeviceConfig, mHandler);
                modeChangeCallback, mDisplayDeviceConfig, mHandler, flags);

        mBrightnessThrottler = createBrightnessThrottlerLocked();

+6 −4
Original line number Diff line number Diff line
@@ -77,6 +77,7 @@ import com.android.server.display.brightness.clamper.BrightnessClamperController
import com.android.server.display.brightness.strategy.AutomaticBrightnessStrategy;
import com.android.server.display.color.ColorDisplayService.ColorDisplayServiceInternal;
import com.android.server.display.color.ColorDisplayService.ReduceBrightColorsListener;
import com.android.server.display.feature.DisplayManagerFlags;
import com.android.server.display.layout.Layout;
import com.android.server.display.state.DisplayStateController;
import com.android.server.display.utils.SensorUtils;
@@ -472,7 +473,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
            SensorManager sensorManager, DisplayBlanker blanker, LogicalDisplay logicalDisplay,
            BrightnessTracker brightnessTracker, BrightnessSetting brightnessSetting,
            Runnable onBrightnessChangeRunnable, HighBrightnessModeMetadata hbmMetadata,
            boolean bootCompleted) {
            boolean bootCompleted, DisplayManagerFlags flags) {

        mInjector = injector != null ? injector : new Injector();
        mClock = mInjector.getClock();
@@ -540,7 +541,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
        mBrightnessThrottler = createBrightnessThrottlerLocked();

        mBrightnessRangeController = mInjector.getBrightnessRangeController(hbmController,
                modeChangeCallback, mDisplayDeviceConfig, mHandler);
                modeChangeCallback, mDisplayDeviceConfig, mHandler, flags);

        mDisplayBrightnessController =
                new DisplayBrightnessController(context, null,
@@ -2977,9 +2978,10 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal

        BrightnessRangeController getBrightnessRangeController(
                HighBrightnessModeController hbmController, Runnable modeChangeCallback,
                DisplayDeviceConfig displayDeviceConfig, Handler handler) {
                DisplayDeviceConfig displayDeviceConfig, Handler handler,
                DisplayManagerFlags flags) {
            return new BrightnessRangeController(hbmController,
                    modeChangeCallback, displayDeviceConfig, handler);
                    modeChangeCallback, displayDeviceConfig, handler, flags);
        }

        DisplayWhiteBalanceController getDisplayWhiteBalanceController(Handler handler,
+55 −30
Original line number Diff line number Diff line
@@ -30,8 +30,53 @@ import java.util.function.Supplier;
public class DisplayManagerFlags {
    private static final boolean DEBUG = false;
    private static final String TAG = "DisplayManagerFlags";
    private boolean mIsConnectedDisplayManagementEnabled = false;
    private boolean mIsConnectedDisplayManagementEnabledSet = false;

    private final FlagState mConnectedDisplayManagementFlagState = new FlagState(
            Flags.FLAG_ENABLE_CONNECTED_DISPLAY_MANAGEMENT,
            Flags::enableConnectedDisplayManagement);

    private final FlagState mNbmControllerFlagState = new FlagState(
            Flags.FLAG_ENABLE_NBM_CONTROLLER,
            Flags::enableNbmController);

    /** Returns whether connected display management is enabled or not. */
    public boolean isConnectedDisplayManagementEnabled() {
        return mConnectedDisplayManagementFlagState.isEnabled();
    }

    /** Returns whether hdr clamper is enabled on not*/
    public boolean isNbmControllerEnabled() {
        return mNbmControllerFlagState.isEnabled();
    }

    private static class FlagState {

        private final String mName;

        private final Supplier<Boolean> mFlagFunction;
        private boolean mEnabledSet;
        private boolean mEnabled;

        private FlagState(String name, Supplier<Boolean> flagFunction) {
            mName = name;
            mFlagFunction = flagFunction;
        }

        // TODO(b/297159910): Simplify using READ-ONLY flags when available.
        private boolean isEnabled() {
            if (mEnabledSet) {
                if (DEBUG) {
                    Slog.d(TAG, mName + ": mEnabled. Recall = " + mEnabled);
                }
                return mEnabled;
            }
            mEnabled = flagOrSystemProperty(mFlagFunction, mName);
            if (DEBUG) {
                Slog.d(TAG, mName + ": mEnabled. Flag value = " + mEnabled);
            }
            mEnabledSet = true;
            return mEnabled;
        }

        private boolean flagOrSystemProperty(Supplier<Boolean> flagFunction, String flagName) {
            // TODO(b/299462337) Remove when the infrastructure is ready.
@@ -48,25 +93,5 @@ public class DisplayManagerFlags {
                return false;
            }
        }

    // TODO(b/297159910): Simplify using READ-ONLY flags when available.
    /** Returns whether connected display management is enabled or not. */
    public boolean isConnectedDisplayManagementEnabled() {
        if (mIsConnectedDisplayManagementEnabledSet) {
            if (DEBUG) {
                Slog.d(TAG, "isConnectedDisplayManagementEnabled. Recall = "
                                    + mIsConnectedDisplayManagementEnabled);
            }
            return mIsConnectedDisplayManagementEnabled;
        }
        mIsConnectedDisplayManagementEnabled =
                flagOrSystemProperty(Flags::enableConnectedDisplayManagement,
                        Flags.FLAG_ENABLE_CONNECTED_DISPLAY_MANAGEMENT);
        if (DEBUG) {
            Slog.d(TAG, "isConnectedDisplayManagementEnabled. Flag value = "
                                + mIsConnectedDisplayManagementEnabled);
        }
        mIsConnectedDisplayManagementEnabledSet = true;
        return mIsConnectedDisplayManagementEnabled;
    }
}
Loading