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

Commit 223834cd authored by Silvia Vinyes's avatar Silvia Vinyes Committed by Android (Google) Code Review
Browse files

Merge "Log slider events from DPC."

parents 200d61e3 f618a913
Loading
Loading
Loading
Loading
+22 −8
Original line number Diff line number Diff line
@@ -148,6 +148,12 @@ class AutomaticBrightnessController {
    // The currently accepted nominal ambient light level.
    private float mAmbientLux;

    // The last calculated ambient light level (long time window).
    private float mSlowAmbientLux;

    // The last calculated ambient light level (short time window).
    private float mFastAmbientLux;

    // The last ambient lux value prior to passing the darkening or brightening threshold.
    private float mPreThresholdLux;

@@ -440,6 +446,14 @@ class AutomaticBrightnessController {
        return mAmbientLux;
    }

    float getSlowAmbientLux() {
        return mSlowAmbientLux;
    }

    float getFastAmbientLux() {
        return mFastAmbientLux;
    }

    private boolean setDisplayPolicy(int policy) {
        if (mDisplayPolicy == policy) {
            return false;
@@ -812,20 +826,20 @@ class AutomaticBrightnessController {
        // proposed ambient light value since the slow value might be sufficiently far enough away
        // from the fast value to cause a recalculation while its actually just converging on
        // the fast value still.
        float slowAmbientLux = calculateAmbientLux(time, mAmbientLightHorizonLong);
        float fastAmbientLux = calculateAmbientLux(time, mAmbientLightHorizonShort);
        mSlowAmbientLux = calculateAmbientLux(time, mAmbientLightHorizonLong);
        mFastAmbientLux = calculateAmbientLux(time, mAmbientLightHorizonShort);

        if ((slowAmbientLux >= mAmbientBrighteningThreshold
                && fastAmbientLux >= mAmbientBrighteningThreshold
        if ((mSlowAmbientLux >= mAmbientBrighteningThreshold
                && mFastAmbientLux >= mAmbientBrighteningThreshold
                && nextBrightenTransition <= time)
                || (slowAmbientLux <= mAmbientDarkeningThreshold
                        && fastAmbientLux <= mAmbientDarkeningThreshold
                || (mSlowAmbientLux <= mAmbientDarkeningThreshold
                        && mFastAmbientLux <= mAmbientDarkeningThreshold
                        && nextDarkenTransition <= time)) {
            mPreThresholdLux = mAmbientLux;
            setAmbientLux(fastAmbientLux);
            setAmbientLux(mFastAmbientLux);
            if (mLoggingEnabled) {
                Slog.d(TAG, "updateAmbientLux: "
                        + ((fastAmbientLux > mAmbientLux) ? "Brightened" : "Darkened") + ": "
                        + ((mFastAmbientLux > mAmbientLux) ? "Brightened" : "Darkened") + ": "
                        + "mBrighteningLuxThreshold=" + mAmbientBrighteningThreshold + ", "
                        + "mAmbientLightRingBuffer=" + mAmbientLightRingBuffer + ", "
                        + "mAmbientLux=" + mAmbientLux);
+41 −1
Original line number Diff line number Diff line
@@ -1640,11 +1640,16 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        // brightness cap, RBC state, etc.
        mTempBrightnessEvent.setTime(System.currentTimeMillis());
        mTempBrightnessEvent.setBrightness(brightnessState);
        mTempBrightnessEvent.setPhysicalDisplayId(mUniqueDisplayId);
        mTempBrightnessEvent.setReason(mBrightnessReason);
        mTempBrightnessEvent.setHbmMax(mHbmController.getCurrentBrightnessMax());
        mTempBrightnessEvent.setHbmMode(mHbmController.getHighBrightnessMode());
        mTempBrightnessEvent.setFlags(mTempBrightnessEvent.getFlags()
                | (mIsRbcActive ? BrightnessEvent.FLAG_RBC : 0));
        mTempBrightnessEvent.setRbcStrength((mCdsi != null && mCdsi.isReduceBrightColorsActivated())
                ? mCdsi.getReduceBrightColorsStrength() : -1);
        mTempBrightnessEvent.setPowerFactor(
                mPowerRequest.lowPowerMode ? mPowerRequest.screenLowPowerBrightnessFactor : 1.0f);
        // Temporary is what we use during slider interactions. We avoid logging those so that
        // we don't spam logcat when the slider is being used.
        boolean tempToTempTransition =
@@ -1653,9 +1658,17 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
                        == BrightnessReason.REASON_TEMPORARY;
        if ((!mTempBrightnessEvent.equalsMainData(mLastBrightnessEvent) && !tempToTempTransition)
                || brightnessAdjustmentFlags != 0) {
            float lastBrightness = mLastBrightnessEvent.getBrightness();
            mTempBrightnessEvent.setInitialBrightness(lastBrightness);
            mTempBrightnessEvent.setFastAmbientLux(
                    mAutomaticBrightnessController == null
                        ? -1 : mAutomaticBrightnessController.getFastAmbientLux());
            mTempBrightnessEvent.setSlowAmbientLux(
                    mAutomaticBrightnessController == null
                        ? -1 : mAutomaticBrightnessController.getSlowAmbientLux());
            mTempBrightnessEvent.setAutomaticBrightnessEnabled(mPowerRequest.useAutoBrightness);
            mLastBrightnessEvent.copyFrom(mTempBrightnessEvent);
            BrightnessEvent newEvent = new BrightnessEvent(mTempBrightnessEvent);

            // Adjustment flags (and user-set flag) only get added after the equality checks since
            // they are transient.
            newEvent.setAdjustmentFlags(brightnessAdjustmentFlags);
@@ -1663,6 +1676,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
                    ? BrightnessEvent.FLAG_USER_SET : 0));
            Slog.i(mTag, newEvent.toString(/* includeTime= */ false));

            if (userSetBrightnessChanged) {
                logManualBrightnessEvent(newEvent);
            }
            if (mBrightnessEventRingBuffer != null) {
                mBrightnessEventRingBuffer.append(newEvent);
            }
@@ -2752,6 +2768,30 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        }
    }

    private void logManualBrightnessEvent(BrightnessEvent event) {
        float hbmMaxNits =
                event.getHbmMode() == BrightnessInfo.HIGH_BRIGHTNESS_MODE_OFF
                ? -1f : convertToNits(event.getHbmMax());

        // thermalCapNits set to -1 if not currently capping max brightness
        float thermalCapNits =
                event.getThermalMax() == PowerManager.BRIGHTNESS_MAX
                ? -1f : convertToNits(event.getThermalMax());

        FrameworkStatsLog.write(FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED,
                convertToNits(event.getInitialBrightness()),
                convertToNits(event.getBrightness()),
                event.getSlowAmbientLux(),
                event.getPhysicalDisplayId(),
                event.isShortTermModelActive(),
                event.getPowerFactor(),
                event.getRbcStrength(),
                hbmMaxNits,
                thermalCapNits,
                event.isAutomaticBrightnessEnabled(),
                FrameworkStatsLog.DISPLAY_BRIGHTNESS_CHANGED__REASON__REASON_MANUAL);
    }

    private final class DisplayControllerHandler extends Handler {
        DisplayControllerHandler(Looper looper) {
            super(looper, null, true /*async*/);
+132 −25
Original line number Diff line number Diff line
@@ -33,17 +33,24 @@ public final class BrightnessEvent {

    private BrightnessReason mReason = new BrightnessReason();
    private int mDisplayId;
    private String mPhysicalDisplayId;
    private long mTime;
    private float mLux;
    private float mFastAmbientLux;
    private float mSlowAmbientLux;
    private float mPreThresholdLux;
    private long mTime;
    private float mInitialBrightness;
    private float mBrightness;
    private float mRecommendedBrightness;
    private float mPreThresholdBrightness;
    private int mHbmMode;
    private float mHbmMax;
    private int mRbcStrength;
    private float mThermalMax;
    private int mHbmMode;
    private float mPowerFactor;
    private int mFlags;
    private int mAdjustmentFlags;
    private boolean mAutomaticBrightnessEnabled;

    public BrightnessEvent(BrightnessEvent that) {
        copyFrom(that);
@@ -60,37 +67,59 @@ public final class BrightnessEvent {
     * @param that BrightnessEvent which is to be copied
     */
    public void copyFrom(BrightnessEvent that) {
        mReason.set(that.getReason());
        mDisplayId = that.getDisplayId();
        mPhysicalDisplayId = that.getPhysicalDisplayId();
        mTime = that.getTime();
        // Lux values
        mLux = that.getLux();
        mFastAmbientLux = that.getFastAmbientLux();
        mSlowAmbientLux = that.getSlowAmbientLux();
        mPreThresholdLux = that.getPreThresholdLux();
        // Brightness values
        mInitialBrightness = that.getInitialBrightness();
        mBrightness = that.getBrightness();
        mRecommendedBrightness = that.getRecommendedBrightness();
        mPreThresholdBrightness = that.getPreThresholdBrightness();
        // Different brightness modulations
        mHbmMode = that.getHbmMode();
        mHbmMax = that.getHbmMax();
        mRbcStrength = that.getRbcStrength();
        mThermalMax = that.getThermalMax();
        mPowerFactor = that.getPowerFactor();
        mFlags = that.getFlags();
        mHbmMode = that.getHbmMode();
        mReason.set(that.getReason());
        mAdjustmentFlags = that.getAdjustmentFlags();
        // Auto-brightness setting
        mAutomaticBrightnessEnabled = that.isAutomaticBrightnessEnabled();
    }

    /**
     * A utility to reset the BrightnessEvent to default values
     */
    public void reset() {
        mReason.set(null);
        mTime = SystemClock.uptimeMillis();
        mBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
        mRecommendedBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
        mPhysicalDisplayId = "";
        // Lux values
        mLux = 0;
        mFastAmbientLux = 0;
        mSlowAmbientLux = 0;
        mPreThresholdLux = 0;
        // Brightness values
        mInitialBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
        mBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
        mRecommendedBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
        mPreThresholdBrightness = PowerManager.BRIGHTNESS_INVALID_FLOAT;
        // Different brightness modulations
        mHbmMode = BrightnessInfo.HIGH_BRIGHTNESS_MODE_OFF;
        mHbmMax = PowerManager.BRIGHTNESS_MAX;
        mRbcStrength = 0;
        mThermalMax = PowerManager.BRIGHTNESS_MAX;
        mPowerFactor = 1f;
        mFlags = 0;
        mHbmMode = BrightnessInfo.HIGH_BRIGHTNESS_MODE_OFF;
        mReason.set(null);
        mAdjustmentFlags = 0;
        // Auto-brightness setting
        mAutomaticBrightnessEnabled = true;
    }

    /**
@@ -104,23 +133,34 @@ public final class BrightnessEvent {
    public boolean equalsMainData(BrightnessEvent that) {
        // This equals comparison purposefully ignores time since it is regularly changing and
        // we don't want to log a brightness event just because the time changed.
        return mDisplayId == that.mDisplayId
        return mReason.equals(that.mReason)
                && mDisplayId == that.mDisplayId
                && mPhysicalDisplayId.equals(that.mPhysicalDisplayId)
                && Float.floatToRawIntBits(mLux) == Float.floatToRawIntBits(that.mLux)
                && Float.floatToRawIntBits(mFastAmbientLux)
                == Float.floatToRawIntBits(that.mFastAmbientLux)
                && Float.floatToRawIntBits(mSlowAmbientLux)
                == Float.floatToRawIntBits(that.mSlowAmbientLux)
                && Float.floatToRawIntBits(mPreThresholdLux)
                == Float.floatToRawIntBits(that.mPreThresholdLux)
                && Float.floatToRawIntBits(mInitialBrightness)
                == Float.floatToRawIntBits(that.mInitialBrightness)
                && Float.floatToRawIntBits(mBrightness)
                == Float.floatToRawIntBits(that.mBrightness)
                && Float.floatToRawIntBits(mRecommendedBrightness)
                == Float.floatToRawIntBits(that.mRecommendedBrightness)
                && Float.floatToRawIntBits(mPreThresholdBrightness)
                == Float.floatToRawIntBits(that.mPreThresholdBrightness)
                && Float.floatToRawIntBits(mLux) == Float.floatToRawIntBits(that.mLux)
                && Float.floatToRawIntBits(mPreThresholdLux)
                == Float.floatToRawIntBits(that.mPreThresholdLux)
                && Float.floatToRawIntBits(mHbmMax) == Float.floatToRawIntBits(that.mHbmMax)
                && mHbmMode == that.mHbmMode
                && Float.floatToRawIntBits(mHbmMax) == Float.floatToRawIntBits(that.mHbmMax)
                && mRbcStrength == that.mRbcStrength
                && Float.floatToRawIntBits(mThermalMax)
                == Float.floatToRawIntBits(that.mThermalMax)
                && Float.floatToRawIntBits(mPowerFactor)
                == Float.floatToRawIntBits(that.mPowerFactor)
                && mFlags == that.mFlags
                && mAdjustmentFlags == that.mAdjustmentFlags
                && mReason.equals(that.mReason);
                && mAutomaticBrightnessEnabled == that.mAutomaticBrightnessEnabled;
    }

    /**
@@ -133,16 +173,23 @@ public final class BrightnessEvent {
        return (includeTime ? TimeUtils.formatForLogging(mTime) + " - " : "")
                + "BrightnessEvent: "
                + "disp=" + mDisplayId
                + ", physDisp=" + mPhysicalDisplayId
                + ", brt=" + mBrightness + ((mFlags & FLAG_USER_SET) != 0 ? "(user_set)" : "")
                + ", initBrt=" + mInitialBrightness
                + ", rcmdBrt=" + mRecommendedBrightness
                + ", preBrt=" + mPreThresholdBrightness
                + ", lux=" + mLux
                + ", fastLux=" + mFastAmbientLux
                + ", slowLux=" + mSlowAmbientLux
                + ", preLux=" + mPreThresholdLux
                + ", hbmMax=" + mHbmMax
                + ", hbmMode=" + BrightnessInfo.hbmToString(mHbmMode)
                + ", rbcStrength=" + mRbcStrength
                + ", thrmMax=" + mThermalMax
                + ", powerFactor=" + mPowerFactor
                + ", flags=" + flagsToString()
                + ", reason=" + mReason.toString(mAdjustmentFlags);
                + ", reason=" + mReason.toString(mAdjustmentFlags)
                + ", autoBrightness=" + mAutomaticBrightnessEnabled;
    }

    @Override
@@ -150,12 +197,20 @@ public final class BrightnessEvent {
        return toString(/* includeTime */ true);
    }

    public BrightnessReason getReason() {
        return mReason;
    }

    public void setReason(BrightnessReason reason) {
        this.mReason = reason;
    }

    public BrightnessReason getReason() {
        return mReason;
    public long getTime() {
        return mTime;
    }

    public void setTime(long time) {
        this.mTime = time;
    }

    public int getDisplayId() {
@@ -166,6 +221,14 @@ public final class BrightnessEvent {
        this.mDisplayId = displayId;
    }

    public String getPhysicalDisplayId() {
        return mPhysicalDisplayId;
    }

    public void setPhysicalDisplayId(String mPhysicalDisplayId) {
        this.mPhysicalDisplayId = mPhysicalDisplayId;
    }

    public float getLux() {
        return mLux;
    }
@@ -174,6 +237,22 @@ public final class BrightnessEvent {
        this.mLux = lux;
    }

    public float getFastAmbientLux() {
        return mFastAmbientLux;
    }

    public void setFastAmbientLux(float mFastAmbientLux) {
        this.mFastAmbientLux = mFastAmbientLux;
    }

    public float getSlowAmbientLux() {
        return mSlowAmbientLux;
    }

    public void setSlowAmbientLux(float mSlowAmbientLux) {
        this.mSlowAmbientLux = mSlowAmbientLux;
    }

    public float getPreThresholdLux() {
        return mPreThresholdLux;
    }
@@ -182,12 +261,12 @@ public final class BrightnessEvent {
        this.mPreThresholdLux = preThresholdLux;
    }

    public long getTime() {
        return mTime;
    public float getInitialBrightness() {
        return mInitialBrightness;
    }

    public void setTime(long time) {
        this.mTime = time;
    public void setInitialBrightness(float mInitialBrightness) {
        this.mInitialBrightness = mInitialBrightness;
    }

    public float getBrightness() {
@@ -214,6 +293,14 @@ public final class BrightnessEvent {
        this.mPreThresholdBrightness = preThresholdBrightness;
    }

    public int getHbmMode() {
        return mHbmMode;
    }

    public void setHbmMode(int hbmMode) {
        this.mHbmMode = hbmMode;
    }

    public float getHbmMax() {
        return mHbmMax;
    }
@@ -222,6 +309,14 @@ public final class BrightnessEvent {
        this.mHbmMax = hbmMax;
    }

    public int getRbcStrength() {
        return mRbcStrength;
    }

    public void setRbcStrength(int mRbcStrength) {
        this.mRbcStrength = mRbcStrength;
    }

    public float getThermalMax() {
        return mThermalMax;
    }
@@ -230,12 +325,12 @@ public final class BrightnessEvent {
        this.mThermalMax = thermalMax;
    }

    public int getHbmMode() {
        return mHbmMode;
    public float getPowerFactor() {
        return mPowerFactor;
    }

    public void setHbmMode(int hbmMode) {
        this.mHbmMode = hbmMode;
    public void setPowerFactor(float mPowerFactor) {
        this.mPowerFactor = mPowerFactor;
    }

    public int getFlags() {
@@ -246,6 +341,10 @@ public final class BrightnessEvent {
        this.mFlags = flags;
    }

    public boolean isShortTermModelActive() {
        return (mFlags & FLAG_USER_SET) != 0;
    }

    public int getAdjustmentFlags() {
        return mAdjustmentFlags;
    }
@@ -254,6 +353,14 @@ public final class BrightnessEvent {
        this.mAdjustmentFlags = adjustmentFlags;
    }

    public boolean isAutomaticBrightnessEnabled() {
        return mAutomaticBrightnessEnabled;
    }

    public void setAutomaticBrightnessEnabled(boolean mAutomaticBrightnessEnabled) {
        this.mAutomaticBrightnessEnabled = mAutomaticBrightnessEnabled;
    }

    private String flagsToString() {
        return ((mFlags & FLAG_USER_SET) != 0 ? "user_set " : "")
                + ((mFlags & FLAG_RBC) != 0 ? "rbc " : "")
+4 −0
Original line number Diff line number Diff line
@@ -1515,6 +1515,10 @@ public final class ColorDisplayService extends SystemService {
            return mReduceBrightColorsTintController.isActivated();
        }

        public int getReduceBrightColorsStrength() {
            return mReduceBrightColorsTintController.getStrength();
        }

        /**
         * Gets the computed brightness, in nits, when the reduce bright colors feature is applied
         * at the current strength.
+13 −3
Original line number Diff line number Diff line
@@ -39,16 +39,23 @@ public final class BrightnessEventTest {
        mBrightnessEvent = new BrightnessEvent(1);
        mBrightnessEvent.setReason(
                getReason(BrightnessReason.REASON_DOZE, BrightnessReason.MODIFIER_LOW_POWER));
        mBrightnessEvent.setPhysicalDisplayId("test");
        mBrightnessEvent.setLux(100.0f);
        mBrightnessEvent.setFastAmbientLux(90.0f);
        mBrightnessEvent.setSlowAmbientLux(85.0f);
        mBrightnessEvent.setPreThresholdLux(150.0f);
        mBrightnessEvent.setTime(System.currentTimeMillis());
        mBrightnessEvent.setInitialBrightness(25.0f);
        mBrightnessEvent.setBrightness(0.6f);
        mBrightnessEvent.setRecommendedBrightness(0.6f);
        mBrightnessEvent.setHbmMax(0.62f);
        mBrightnessEvent.setRbcStrength(-1);
        mBrightnessEvent.setThermalMax(0.65f);
        mBrightnessEvent.setPowerFactor(0.2f);
        mBrightnessEvent.setHbmMode(BrightnessInfo.HIGH_BRIGHTNESS_MODE_OFF);
        mBrightnessEvent.setFlags(0);
        mBrightnessEvent.setAdjustmentFlags(0);
        mBrightnessEvent.setAutomaticBrightnessEnabled(true);
    }

    @Test
@@ -63,12 +70,15 @@ public final class BrightnessEventTest {
    public void testToStringWorksAsExpected() {
        String actualString = mBrightnessEvent.toString(false);
        String expectedString =
                "BrightnessEvent: disp=1, brt=0.6, rcmdBrt=0.6, preBrt=NaN, lux=100.0, preLux=150"
                        + ".0, hbmMax=0.62, hbmMode=off, thrmMax=0.65, flags=, reason=doze [ "
                        + "low_pwr ]";
                "BrightnessEvent: disp=1, physDisp=test, brt=0.6, initBrt=25.0, rcmdBrt=0.6,"
                + " preBrt=NaN, lux=100.0, fastLux=90.0, slowLux=85.0, preLux=150.0, hbmMax=0.62,"
                + " hbmMode=off, rbcStrength=-1, thrmMax=0.65, powerFactor=0.2, flags=, reason=doze"
                + " [ low_pwr ], autoBrightness=true";
        assertEquals(actualString, expectedString);
    }



    private BrightnessReason getReason(int reason, int modifier) {
        BrightnessReason brightnessReason = new BrightnessReason();
        brightnessReason.setReason(reason);