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

Commit ff24fc1d authored by Fiona Campbell's avatar Fiona Campbell
Browse files

Add automatic brightness events to dumpsys

Bug: 220137659
Test: adb shell dumpsys display
Change-Id: I140441d3f698e509642555342f25c7776b20eff6
parent c50b959b
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;
@@ -154,6 +155,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();
@@ -211,6 +214,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;

@@ -386,6 +392,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;

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

            mAutobrightnessEventRingBuffer =
                    new RingBuffer<>(AutobrightnessEvent.class, RINGBUFFER_MAX);
        } else {
            mUseSoftwareAutoBrightnessConfig = false;
        }
@@ -1554,6 +1566,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()) {
@@ -2488,6 +2509,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call

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

        if (mHbmController != null) {
@@ -2544,6 +2566,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);
@@ -2612,6 +2648,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*/);