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

Commit ff66e3ed authored by John Reck's avatar John Reck Committed by Android (Google) Code Review
Browse files

Merge "Add animate HDR/SDR downwards support" into main

parents 0c15e385 4769906f
Loading
Loading
Loading
Loading
+30 −9
Original line number Diff line number Diff line
@@ -31,9 +31,11 @@ class HdrRenderState implements Consumer<Display> {

    private final ViewRootImpl mViewRoot;

    private boolean mIsHdrEnabled = false;
    private boolean mIsListenerRegistered = false;
    private boolean mUpdateHdrSdrRatioInfo = false;
    private float mDesiredHdrSdrRatio = 1f;
    private float mTargetDesiredHdrSdrRatio = 1f;
    private float mTargetHdrSdrRatio = 1f;
    private float mRenderHdrSdrRatio = 1f;
    private float mPreviousRenderRatio = 1f;
@@ -50,7 +52,7 @@ class HdrRenderState implements Consumer<Display> {
    }

    boolean isHdrEnabled() {
        return mDesiredHdrSdrRatio >= 1.01f;
        return mIsHdrEnabled;
    }

    void stopListening() {
@@ -75,9 +77,7 @@ class HdrRenderState implements Consumer<Display> {
        final float maxStep = timeDelta * TRANSITION_PER_MS;
        mLastUpdateMillis = frameTimeMillis;
        if (hasUpdate && FLAG_ANIMATE_ENABLED) {
            if (mTargetHdrSdrRatio == 1.0f) {
                mPreviousRenderRatio = mTargetHdrSdrRatio;
            } else {
            if (isHdrEnabled()) {
                float delta = mTargetHdrSdrRatio - mPreviousRenderRatio;
                if (delta > maxStep) {
                    mRenderHdrSdrRatio = mPreviousRenderRatio + maxStep;
@@ -85,6 +85,19 @@ class HdrRenderState implements Consumer<Display> {
                    mViewRoot.invalidate();
                }
                mPreviousRenderRatio = mRenderHdrSdrRatio;

                if (mTargetDesiredHdrSdrRatio < mDesiredHdrSdrRatio) {
                    mDesiredHdrSdrRatio = Math.max(mTargetDesiredHdrSdrRatio,
                            mDesiredHdrSdrRatio - maxStep);
                    if (mDesiredHdrSdrRatio != mTargetDesiredHdrSdrRatio) {
                        mUpdateHdrSdrRatioInfo = true;
                        mViewRoot.invalidate();
                    }
                }

            } else {
                mPreviousRenderRatio = mTargetHdrSdrRatio;
                mDesiredHdrSdrRatio = mTargetDesiredHdrSdrRatio;
            }
        }
        return hasUpdate;
@@ -99,15 +112,23 @@ class HdrRenderState implements Consumer<Display> {
    }

    void forceUpdateHdrSdrRatio() {
        mTargetHdrSdrRatio = Math.min(mDesiredHdrSdrRatio, mViewRoot.mDisplay.getHdrSdrRatio());
        if (isHdrEnabled()) {
            mTargetHdrSdrRatio = Math.min(mDesiredHdrSdrRatio,
                    mViewRoot.mDisplay.getHdrSdrRatio());
        } else {
            mTargetHdrSdrRatio = 1.0f;
        }
        mUpdateHdrSdrRatioInfo = true;
    }

    void setDesiredHdrSdrRatio(float desiredRatio) {
    void setDesiredHdrSdrRatio(boolean isHdrEnabled, float desiredRatio) {
        mIsHdrEnabled = isHdrEnabled;
        mLastUpdateMillis = SystemClock.uptimeMillis();
        // TODO: When decreasing the desired ratio we need to animate it downwards
        if (desiredRatio != mDesiredHdrSdrRatio) {
            mDesiredHdrSdrRatio = desiredRatio;
        if (desiredRatio != mTargetDesiredHdrSdrRatio) {
            mTargetDesiredHdrSdrRatio = desiredRatio;
            if (mTargetDesiredHdrSdrRatio > mDesiredHdrSdrRatio || !FLAG_ANIMATE_ENABLED) {
                mDesiredHdrSdrRatio = mTargetDesiredHdrSdrRatio;
            }
            forceUpdateHdrSdrRatio();
            mViewRoot.invalidate();

+5 −3
Original line number Diff line number Diff line
@@ -5824,9 +5824,11 @@ public final class ViewRootImpl implements ViewParent,
        if (mAttachInfo.mThreadedRenderer == null) {
            return;
        }
        if ((colorMode == ActivityInfo.COLOR_MODE_HDR || colorMode == ActivityInfo.COLOR_MODE_HDR10)
                && !mDisplay.isHdrSdrRatioAvailable()) {
        boolean isHdr = colorMode == ActivityInfo.COLOR_MODE_HDR
                || colorMode == ActivityInfo.COLOR_MODE_HDR10;
        if (isHdr && !mDisplay.isHdrSdrRatioAvailable()) {
            colorMode = ActivityInfo.COLOR_MODE_WIDE_COLOR_GAMUT;
            isHdr = false;
        }
        // TODO: Centralize this sanitization? Why do we let setting bad modes?
        // Alternatively, can we just let HWUI figure it out? Do we need to care here?
@@ -5839,7 +5841,7 @@ public final class ViewRootImpl implements ViewParent,
            desiredRatio = automaticRatio;
        }
        mHdrRenderState.setDesiredHdrSdrRatio(desiredRatio);
        mHdrRenderState.setDesiredHdrSdrRatio(isHdr, desiredRatio);
    }
    @Override