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

Commit 248f6f0f authored by petsjonkin's avatar petsjonkin Committed by Oleg Petšjonkin
Browse files

Feature flag for moving HDR related logic to separate modifier

Bug: b/349753193
Test: manual testing
Change-Id: I779ea47baa921f5ecbdd5cba2d0eb4e89d46a105
Flag: com.android.server.display.feature.flags.new_hdr_brightness_modifier
parent 294cf4a6
Loading
Loading
Loading
Loading
+19 −18
Original line number Diff line number Diff line
@@ -29,9 +29,10 @@ import java.util.Objects;
 */
public final class DisplayBrightnessState {
    public static final float CUSTOM_ANIMATION_RATE_NOT_SET = -1f;
    public static final float BRIGHTNESS_NOT_SET = -1f;

    private final float mBrightness;
    private final float mSdrBrightness;
    private final float mHdrBrightness;

    private final float mMaxBrightness;
    private final float mMinBrightness;
@@ -51,7 +52,7 @@ public final class DisplayBrightnessState {

    private DisplayBrightnessState(Builder builder) {
        mBrightness = builder.getBrightness();
        mSdrBrightness = builder.getSdrBrightness();
        mHdrBrightness = builder.getHdrBrightness();
        mBrightnessReason = builder.getBrightnessReason();
        mDisplayBrightnessStrategyName = builder.getDisplayBrightnessStrategyName();
        mShouldUseAutoBrightness = builder.getShouldUseAutoBrightness();
@@ -73,10 +74,10 @@ public final class DisplayBrightnessState {
    }

    /**
     * Gets the sdr brightness
     * Gets the hdr brightness
     */
    public float getSdrBrightness() {
        return mSdrBrightness;
    public float getHdrBrightness() {
        return mHdrBrightness;
    }

    /**
@@ -163,8 +164,8 @@ public final class DisplayBrightnessState {
        StringBuilder stringBuilder = new StringBuilder("DisplayBrightnessState:");
        stringBuilder.append("\n    brightness:");
        stringBuilder.append(getBrightness());
        stringBuilder.append("\n    sdrBrightness:");
        stringBuilder.append(getSdrBrightness());
        stringBuilder.append("\n    hdrBrightness:");
        stringBuilder.append(getHdrBrightness());
        stringBuilder.append("\n    brightnessReason:");
        stringBuilder.append(getBrightnessReason());
        stringBuilder.append("\n    shouldUseAutoBrightness:");
@@ -198,7 +199,7 @@ public final class DisplayBrightnessState {
        DisplayBrightnessState otherState = (DisplayBrightnessState) other;

        return mBrightness == otherState.getBrightness()
                && mSdrBrightness == otherState.getSdrBrightness()
                && mHdrBrightness == otherState.getHdrBrightness()
                && mBrightnessReason.equals(otherState.getBrightnessReason())
                && TextUtils.equals(mDisplayBrightnessStrategyName,
                        otherState.getDisplayBrightnessStrategyName())
@@ -216,7 +217,7 @@ public final class DisplayBrightnessState {

    @Override
    public int hashCode() {
        return Objects.hash(mBrightness, mSdrBrightness, mBrightnessReason,
        return Objects.hash(mBrightness, mHdrBrightness, mBrightnessReason,
                mShouldUseAutoBrightness, mIsSlowChange, mMaxBrightness, mMinBrightness,
                mCustomAnimationRate,
                mShouldUpdateScreenBrightnessSetting, mBrightnessEvent, mBrightnessAdjustmentFlag,
@@ -235,7 +236,7 @@ public final class DisplayBrightnessState {
     */
    public static class Builder {
        private float mBrightness;
        private float mSdrBrightness;
        private float mHdrBrightness = BRIGHTNESS_NOT_SET;
        private BrightnessReason mBrightnessReason = new BrightnessReason();
        private String mDisplayBrightnessStrategyName;
        private boolean mShouldUseAutoBrightness;
@@ -260,7 +261,7 @@ public final class DisplayBrightnessState {
        public static Builder from(DisplayBrightnessState state) {
            Builder builder = new Builder();
            builder.setBrightness(state.getBrightness());
            builder.setSdrBrightness(state.getSdrBrightness());
            builder.setHdrBrightness(state.getHdrBrightness());
            builder.setBrightnessReason(state.getBrightnessReason());
            builder.setDisplayBrightnessStrategyName(state.getDisplayBrightnessStrategyName());
            builder.setShouldUseAutoBrightness(state.getShouldUseAutoBrightness());
@@ -295,20 +296,20 @@ public final class DisplayBrightnessState {
        }

        /**
         * Gets the sdr brightness
         * Gets the hdr brightness
         */
        public float getSdrBrightness() {
            return mSdrBrightness;
        public float getHdrBrightness() {
            return mHdrBrightness;
        }

        /**
         * Sets the sdr brightness
         * Sets the hdr brightness
         *
         * @param sdrBrightness The sdr brightness to be associated with DisplayBrightnessState's
         * @param hdrBrightness The hdr brightness to be associated with DisplayBrightnessState's
         *                      builder
         */
        public Builder setSdrBrightness(float sdrBrightness) {
            this.mSdrBrightness = sdrBrightness;
        public Builder setHdrBrightness(float hdrBrightness) {
            this.mHdrBrightness = hdrBrightness;
            return this;
        }

+7 −3
Original line number Diff line number Diff line
@@ -1633,9 +1633,13 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
            // use instead. We still preserve the calculated brightness for Standard Dynamic Range
            // (SDR) layers, but the main brightness value will be the one for HDR.
            float sdrAnimateValue = animateValue;
            // TODO(b/216365040): The decision to prevent HBM for HDR in low power mode should be
            // done in HighBrightnessModeController.
            if (mBrightnessRangeController.getHighBrightnessMode()

            if (clampedState.getHdrBrightness() != DisplayBrightnessState.BRIGHTNESS_NOT_SET) {
                // TODO(b/343792639): The decision to prevent HBM for HDR in low power mode will be
                // done in HdrBrightnessModifier.
                // customAnimationRate and reason also handled by HdrBrightnessModifier
                animateValue = clampedState.getHdrBrightness();
            } else if (mBrightnessRangeController.getHighBrightnessMode()
                    == BrightnessInfo.HIGH_BRIGHTNESS_MODE_HDR
                    && (mBrightnessReasonTemp.getModifier() & BrightnessReason.MODIFIER_DIMMED) == 0
                    && (mBrightnessReasonTemp.getModifier() & BrightnessReason.MODIFIER_LOW_POWER)
+3 −5
Original line number Diff line number Diff line
@@ -52,9 +52,8 @@ public final class BrightnessUtils {
     * A utility to construct the DisplayBrightnessState
     */
    public static DisplayBrightnessState constructDisplayBrightnessState(
            int brightnessChangeReason, float brightness, float sdrBrightness,
            String displayBrightnessStrategyName) {
        return constructDisplayBrightnessState(brightnessChangeReason, brightness, sdrBrightness,
            int brightnessChangeReason, float brightness, String displayBrightnessStrategyName) {
        return constructDisplayBrightnessState(brightnessChangeReason, brightness,
                displayBrightnessStrategyName, /* slowChange= */ false);
    }

@@ -62,13 +61,12 @@ public final class BrightnessUtils {
     * A utility to construct the DisplayBrightnessState
     */
    public static DisplayBrightnessState constructDisplayBrightnessState(
            int brightnessChangeReason, float brightness, float sdrBrightness,
            int brightnessChangeReason, float brightness,
            String displayBrightnessStrategyName, boolean slowChange) {
        BrightnessReason brightnessReason = new BrightnessReason();
        brightnessReason.setReason(brightnessChangeReason);
        return new DisplayBrightnessState.Builder()
                .setBrightness(brightness)
                .setSdrBrightness(sdrBrightness)
                .setBrightnessReason(brightnessReason)
                .setDisplayBrightnessStrategyName(displayBrightnessStrategyName)
                .setIsSlowChange(slowChange)
+3 −0
Original line number Diff line number Diff line
@@ -304,6 +304,9 @@ public class BrightnessClamperController {
                modifiers.add(new BrightnessLowLuxModifier(handler, listener, context,
                        displayDeviceConfig));
            }
            if (flags.useNewHdrBrightnessModifier()) {
                modifiers.add(new HdrBrightnessModifier());
            }
            return modifiers;
        }

+51 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2024 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.hardware.display.DisplayManagerInternal;

import com.android.server.display.DisplayBrightnessState;

import java.io.PrintWriter;

public class HdrBrightnessModifier implements BrightnessStateModifier {
    @Override
    public void apply(DisplayManagerInternal.DisplayPowerRequest request,
            DisplayBrightnessState.Builder stateBuilder) {
        // noop
    }

    @Override
    public void dump(PrintWriter printWriter) {
        // noop
    }

    @Override
    public void stop() {
        // noop
    }

    @Override
    public boolean shouldListenToLightSensor() {
        return false;
    }

    @Override
    public void setAmbientLux(float lux) {
        // noop
    }
}
Loading