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

Commit eb8566ff authored by Fiona Campbell's avatar Fiona Campbell Committed by Android (Google) Code Review
Browse files

Merge "Add automatic brightness events to dumpsys"

parents 45699923 ff24fc1d
Loading
Loading
Loading
Loading
+51 −0
Original line number Diff line number Diff line
@@ -63,6 +63,7 @@ import com.android.internal.display.BrightnessSynchronizer;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.util.FrameworkStatsLog;
import com.android.internal.util.RingBuffer;
import com.android.server.LocalServices;
import com.android.server.am.BatteryStatsService;
import com.android.server.display.RampAnimator.DualRampAnimator;
@@ -155,6 +156,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
    private static final int REPORTED_TO_POLICY_SCREEN_ON = 2;
    private static final int REPORTED_TO_POLICY_SCREEN_TURNING_OFF = 3;

    private static final int RINGBUFFER_MAX = 100;

    private final String TAG;

    private final Object mLock = new Object();
@@ -212,6 +215,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call

    private final float mScreenBrightnessDefault;

    // Previously logged screen brightness. Used for autobrightness event dumpsys.
    private float mPreviousScreenBrightness = Float.NaN;

    // The minimum allowed brightness while in VR.
    private final float mScreenBrightnessForVrRangeMinimum;

@@ -387,6 +393,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call

    private final Runnable mOnBrightnessChangeRunnable;

    // Used for keeping record in dumpsys for when and to which brightness auto adaptions were made.
    private RingBuffer<AutobrightnessEvent> mAutobrightnessEventRingBuffer;

    // A record of state for skipping brightness ramps.
    private int mSkipRampState = RAMP_STATE_SKIP_NONE;

@@ -988,6 +997,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
                    mHbmController, mBrightnessThrottler, mIdleModeBrightnessMapper,
                    mDisplayDeviceConfig.getAmbientHorizonShort(),
                    mDisplayDeviceConfig.getAmbientHorizonLong());

            mAutobrightnessEventRingBuffer =
                    new RingBuffer<>(AutobrightnessEvent.class, RINGBUFFER_MAX);
        } else {
            mUseSoftwareAutoBrightnessConfig = false;
        }
@@ -1558,6 +1570,15 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
            Slog.v(TAG, "Brightness [" + brightnessState + "] manual adjustment.");
        }

        // Add any automatic changes to autobrightness ringbuffer for dumpsys.
        if (mBrightnessReason.reason == BrightnessReason.REASON_AUTOMATIC
                && !BrightnessSynchronizer.floatEquals(
                        mPreviousScreenBrightness, brightnessState)) {
            mPreviousScreenBrightness = brightnessState;
            mAutobrightnessEventRingBuffer.append(new AutobrightnessEvent(
                    System.currentTimeMillis(), brightnessState));
        }

        // Update display white-balance.
        if (mDisplayWhiteBalanceController != null) {
            if (state == Display.STATE_ON && mDisplayWhiteBalanceSettings.isEnabled()) {
@@ -2491,6 +2512,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call

        if (mAutomaticBrightnessController != null) {
            mAutomaticBrightnessController.dump(pw);
            dumpAutobrightnessEvents(pw);
        }

        if (mHbmController != null) {
@@ -2547,6 +2569,20 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        }
    }

    private void dumpAutobrightnessEvents(PrintWriter pw) {
        int size = mAutobrightnessEventRingBuffer.size();
        if (size < 1) {
            pw.println("No Automatic Brightness Adjustments");
            return;
        }

        pw.println("Automatic Brightness Adjustments Last " + size + " Events: ");
        AutobrightnessEvent[] eventArray = mAutobrightnessEventRingBuffer.toArray();
        for (int i = 0; i < mAutobrightnessEventRingBuffer.size(); i++) {
            pw.println("  " + eventArray[i].toString());
        }
    }

    private static float clampAbsoluteBrightness(float value) {
        return MathUtils.constrain(value, PowerManager.BRIGHTNESS_MIN,
                PowerManager.BRIGHTNESS_MAX);
@@ -2615,6 +2651,21 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        }
    }

    private static class AutobrightnessEvent {
        final long mTime;
        final float mBrightness;

        AutobrightnessEvent(long time, float brightness) {
            mTime = time;
            mBrightness = brightness;
        }

        @Override
        public String toString() {
            return TimeUtils.formatForLogging(mTime) + " - Brightness: " + mBrightness;
        }
    }

    private final class DisplayControllerHandler extends Handler {
        public DisplayControllerHandler(Looper looper) {
            super(looper, null, true /*async*/);