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

Commit 358e3221 authored by Oleg Petšjonkin's avatar Oleg Petšjonkin Committed by Android (Google) Code Review
Browse files

Merge "Moving dim handling to DisplayDimModifier" into main

parents 0edf204a 93cd4f3c
Loading
Loading
Loading
Loading
+2 −33
Original line number Diff line number Diff line
@@ -254,13 +254,6 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
    // The doze screen brightness.
    private final float mScreenBrightnessDozeConfig;

    // The dim screen brightness.
    private final float mScreenBrightnessDimConfig;

    // The minimum dim amount to use if the screen brightness is already below
    // mScreenBrightnessDimConfig.
    private final float mScreenBrightnessMinimumDimAmount;

    // True if auto-brightness should be used.
    private boolean mUseSoftwareAutoBrightnessConfig;

@@ -529,11 +522,6 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
        // DOZE AND DIM SETTINGS
        mScreenBrightnessDozeConfig = BrightnessUtils.clampAbsoluteBrightness(
                pm.getBrightnessConstraint(PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_DOZE));
        mScreenBrightnessDimConfig = BrightnessUtils.clampAbsoluteBrightness(
                pm.getBrightnessConstraint(PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_DIM));
        mScreenBrightnessMinimumDimAmount = resources.getFloat(
                R.dimen.config_screenBrightnessMinimumDimAmountFloat);

        loadBrightnessRampRates();
        mSkipScreenOnBrightnessRamp = resources.getBoolean(
                R.bool.config_skipScreenOnBrightnessRamp);
@@ -565,7 +553,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
                mUniqueDisplayId,
                mThermalBrightnessThrottlingDataId,
                mDisplayDeviceConfig
        ));
        ), mContext);
        // Seed the cached brightness
        saveBrightnessInfo(getScreenBrightnessSetting());
        mAutomaticBrightnessStrategy =
@@ -1426,6 +1414,7 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
        // Note throttling effectively changes the allowed brightness range, so, similarly to HBM,
        // we broadcast this change through setting.
        final float unthrottledBrightnessState = brightnessState;

        if (mBrightnessThrottler.isThrottled()) {
            mTempBrightnessEvent.setThermalMax(mBrightnessThrottler.getBrightnessCap());
            brightnessState = Math.min(brightnessState, mBrightnessThrottler.getBrightnessCap());
@@ -1449,25 +1438,6 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
            mDisplayBrightnessController.updateScreenBrightnessSetting(brightnessState);
        }

        // Apply dimming by at least some minimum amount when user activity
        // timeout is about to expire.
        if (mPowerRequest.policy == DisplayPowerRequest.POLICY_DIM) {
            if (brightnessState > PowerManager.BRIGHTNESS_MIN) {
                brightnessState = Math.max(
                        Math.min(brightnessState - mScreenBrightnessMinimumDimAmount,
                                mScreenBrightnessDimConfig),
                        PowerManager.BRIGHTNESS_MIN);
                mBrightnessReasonTemp.addModifier(BrightnessReason.MODIFIER_DIMMED);
            }
            if (!mAppliedDimming) {
                slowChange = false;
            }
            mAppliedDimming = true;
        } else if (mAppliedDimming) {
            slowChange = false;
            mAppliedDimming = false;
        }

        DisplayBrightnessState clampedState = mBrightnessClamperController.clamp(mPowerRequest,
                brightnessState, slowChange);

@@ -2366,7 +2336,6 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
        pw.println();
        pw.println("Display Power Controller Configuration:");
        pw.println("  mScreenBrightnessDozeConfig=" + mScreenBrightnessDozeConfig);
        pw.println("  mScreenBrightnessDimConfig=" + mScreenBrightnessDimConfig);
        pw.println("  mUseSoftwareAutoBrightnessConfig=" + mUseSoftwareAutoBrightnessConfig);
        pw.println("  mSkipScreenOnBrightnessRamp=" + mSkipScreenOnBrightnessRamp);
        pw.println("  mColorFadeFadesConfig=" + mColorFadeFadesConfig);
+6 −3
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static com.android.server.display.brightness.clamper.BrightnessClamper.Ty

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.Context;
import android.hardware.display.DisplayManagerInternal;
import android.os.Handler;
import android.os.HandlerExecutor;
@@ -61,13 +62,13 @@ public class BrightnessClamperController {
    private Type mClamperType = null;

    public BrightnessClamperController(Handler handler,
            ClamperChangeListener clamperChangeListener, DisplayDeviceData data) {
        this(new Injector(), handler, clamperChangeListener, data);
            ClamperChangeListener clamperChangeListener, DisplayDeviceData data, Context context) {
        this(new Injector(), handler, clamperChangeListener, data, context);
    }

    @VisibleForTesting
    BrightnessClamperController(Injector injector, Handler handler,
            ClamperChangeListener clamperChangeListener, DisplayDeviceData data) {
            ClamperChangeListener clamperChangeListener, DisplayDeviceData data, Context context) {
        mDeviceConfigParameterProvider = injector.getDeviceConfigParameterProvider();
        mHandler = handler;
        mClamperChangeListenerExternal = clamperChangeListener;
@@ -85,6 +86,7 @@ public class BrightnessClamperController {
            mClampers.add(
                    new BrightnessThermalClamper(handler, clamperChangeListenerInternal, data));
        }
        mModifiers.add(new DisplayDimModifier(context));
        mModifiers.add(new BrightnessLowPowerModeModifier());
        start();
    }
@@ -111,6 +113,7 @@ public class BrightnessClamperController {
        for (int i = 0; i < mModifiers.size(); i++) {
            mModifiers.get(i).apply(request, builder);
        }

        return builder.build();
    }

+19 −26
Original line number Diff line number Diff line
@@ -18,44 +18,37 @@ package com.android.server.display.brightness.clamper;

import android.hardware.display.DisplayManagerInternal;
import android.os.PowerManager;
import android.util.IndentingPrintWriter;

import com.android.server.display.DisplayBrightnessState;
import com.android.server.display.brightness.BrightnessReason;

import java.io.PrintWriter;

class BrightnessLowPowerModeModifier implements BrightnessModifier {
class BrightnessLowPowerModeModifier extends BrightnessModifier {

    @Override
    boolean shouldApply(DisplayManagerInternal.DisplayPowerRequest request) {
        return request.lowPowerMode;
    }

    private boolean mAppliedLowPower = false;

    @Override
    public void apply(DisplayManagerInternal.DisplayPowerRequest request,
            DisplayBrightnessState.Builder stateBuilder) {
        // If low power mode is enabled, scale brightness by screenLowPowerBrightnessFactor
        // as long as it is above the minimum threshold.
        if (request.lowPowerMode) {
            float value = stateBuilder.getBrightness();
            if (value > PowerManager.BRIGHTNESS_MIN) {
    float getBrightnessAdjusted(float currentBrightness,
            DisplayManagerInternal.DisplayPowerRequest request) {
        final float brightnessFactor =
                Math.min(request.screenLowPowerBrightnessFactor, 1);
                final float lowPowerBrightnessFloat = Math.max((value * brightnessFactor),
                        PowerManager.BRIGHTNESS_MIN);
                stateBuilder.setBrightness(lowPowerBrightnessFloat);
                stateBuilder.getBrightnessReason().addModifier(BrightnessReason.MODIFIER_LOW_POWER);
            }
            if (!mAppliedLowPower) {
                stateBuilder.setIsSlowChange(false);
            }
            mAppliedLowPower = true;
        } else if (mAppliedLowPower) {
            stateBuilder.setIsSlowChange(false);
            mAppliedLowPower = false;
        return Math.max((currentBrightness * brightnessFactor), PowerManager.BRIGHTNESS_MIN);
    }

    @Override
    int getModifier() {
        return BrightnessReason.MODIFIER_LOW_POWER;
    }

    @Override
    public void dump(PrintWriter pw) {
        pw.println("BrightnessLowPowerModeModifier:");
        pw.println("  mAppliedLowPower=" + mAppliedLowPower);
        IndentingPrintWriter ipw = new IndentingPrintWriter(pw, "    ");
        super.dump(ipw);
    }
}
+33 −3
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.server.display.brightness.clamper;

import android.hardware.display.DisplayManagerInternal;
import android.os.PowerManager;

import com.android.server.display.DisplayBrightnessState;

@@ -25,10 +26,39 @@ import java.io.PrintWriter;
/**
 * Modifies current brightness based on request
 */
interface BrightnessModifier {
abstract class BrightnessModifier {

    private boolean mApplied = false;

    abstract boolean shouldApply(DisplayManagerInternal.DisplayPowerRequest request);

    abstract float getBrightnessAdjusted(float currentBrightness,
            DisplayManagerInternal.DisplayPowerRequest request);

    abstract int getModifier();

    void apply(DisplayManagerInternal.DisplayPowerRequest request,
            DisplayBrightnessState.Builder builder);
            DisplayBrightnessState.Builder stateBuilder) {
        // If low power mode is enabled, scale brightness by screenLowPowerBrightnessFactor
        // as long as it is above the minimum threshold.
        if (shouldApply(request)) {
            float value = stateBuilder.getBrightness();
            if (value > PowerManager.BRIGHTNESS_MIN) {
                stateBuilder.setBrightness(getBrightnessAdjusted(value, request));
                stateBuilder.getBrightnessReason().addModifier(getModifier());
            }
            if (!mApplied) {
                stateBuilder.setIsSlowChange(false);
            }
            mApplied = true;
        } else if (mApplied) {
            stateBuilder.setIsSlowChange(false);
            mApplied = false;
        }
    }

    void dump(PrintWriter pw);
    void dump(PrintWriter pw) {
        pw.println("BrightnessModifier:");
        pw.println("  mApplied=" + mApplied);
    }
}
+79 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2023 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.server.display.brightness.clamper;

import android.content.Context;
import android.content.res.Resources;
import android.hardware.display.DisplayManagerInternal;
import android.os.PowerManager;
import android.util.IndentingPrintWriter;

import com.android.internal.R;
import com.android.server.display.brightness.BrightnessReason;
import com.android.server.display.brightness.BrightnessUtils;

import java.io.PrintWriter;
import java.util.Objects;

class DisplayDimModifier extends BrightnessModifier {

    // The dim screen brightness.
    private final float mScreenBrightnessDimConfig;

    // The minimum dim amount to use if the screen brightness is already below
    // mScreenBrightnessDimConfig.
    private final float mScreenBrightnessMinimumDimAmount;

    DisplayDimModifier(Context context) {
        PowerManager pm = Objects.requireNonNull(context.getSystemService(PowerManager.class));
        Resources resources = context.getResources();

        mScreenBrightnessDimConfig = BrightnessUtils.clampAbsoluteBrightness(
                pm.getBrightnessConstraint(PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_DIM));
        mScreenBrightnessMinimumDimAmount = resources.getFloat(
                R.dimen.config_screenBrightnessMinimumDimAmountFloat);
    }


    @Override
    boolean shouldApply(DisplayManagerInternal.DisplayPowerRequest request) {
        return request.policy == DisplayManagerInternal.DisplayPowerRequest.POLICY_DIM;
    }

    @Override
    float getBrightnessAdjusted(float currentBrightness,
            DisplayManagerInternal.DisplayPowerRequest request) {
        return Math.max(
                Math.min(currentBrightness - mScreenBrightnessMinimumDimAmount,
                        mScreenBrightnessDimConfig),
                PowerManager.BRIGHTNESS_MIN);
    }

    @Override
    int getModifier() {
        return BrightnessReason.MODIFIER_DIMMED;
    }

    @Override
    public void dump(PrintWriter pw) {
        pw.println("DisplayDimModifier:");
        pw.println("  mScreenBrightnessDimConfig=" + mScreenBrightnessDimConfig);
        pw.println("  mScreenBrightnessMinimumDimAmount=" + mScreenBrightnessMinimumDimAmount);
        IndentingPrintWriter ipw = new IndentingPrintWriter(pw, "    ");
        super.dump(ipw);
    }
}
Loading