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

Commit d3efcafe authored by Santos Cordon's avatar Santos Cordon Committed by Automerger Merge Worker
Browse files

Merge "Add automatic brightness events to dumpsys" into tm-dev am: ecaa57bb am: 9748cafb

parents 7ef3fc48 9748cafb
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;
@@ -156,6 +157,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();
@@ -213,6 +216,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;

@@ -388,6 +394,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;

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

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

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

        if (mHbmController != null) {
@@ -2538,6 +2560,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);
@@ -2610,6 +2646,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*/);