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

Commit a24d0560 authored by Michael Wright's avatar Michael Wright Committed by android-build-merger
Browse files

Merge "Generally improve brightness dumpsys." into pi-dev

am: 84bf0708

Change-Id: I637f6c18ed8644127696d183b8036ed944535f88
parents d00c851e 84bf0708
Loading
Loading
Loading
Loading
+0 −3
Original line number Original line Diff line number Diff line
@@ -1285,9 +1285,6 @@
         adapt to the environment.  This mode may be better suited for watches. -->
         adapt to the environment.  This mode may be better suited for watches. -->
    <bool name="config_autoBrightnessResetAmbientLuxAfterWarmUp">true</bool>
    <bool name="config_autoBrightnessResetAmbientLuxAfterWarmUp">true</bool>


    <!-- Period of time in which to consider light samples in milliseconds. -->
    <integer name="config_autoBrightnessAmbientLightHorizon">10000</integer>

    <!-- Screen brightness used to dim the screen when the user activity
    <!-- Screen brightness used to dim the screen when the user activity
         timeout expires.  May be less than the minimum allowed brightness setting
         timeout expires.  May be less than the minimum allowed brightness setting
         that can be set by the user. -->
         that can be set by the user. -->
+0 −1
Original line number Original line Diff line number Diff line
@@ -1905,7 +1905,6 @@
  <java-symbol type="fraction" name="config_screenAutoBrightnessDozeScaleFactor" />
  <java-symbol type="fraction" name="config_screenAutoBrightnessDozeScaleFactor" />
  <java-symbol type="bool" name="config_allowPriorityVibrationsInLowPowerMode" />
  <java-symbol type="bool" name="config_allowPriorityVibrationsInLowPowerMode" />
  <java-symbol type="fraction" name="config_autoBrightnessAdjustmentMaxGamma" />
  <java-symbol type="fraction" name="config_autoBrightnessAdjustmentMaxGamma" />
  <java-symbol type="integer" name="config_autoBrightnessAmbientLightHorizon"/>
  <java-symbol type="integer" name="config_autoBrightnessBrighteningLightDebounce"/>
  <java-symbol type="integer" name="config_autoBrightnessBrighteningLightDebounce"/>
  <java-symbol type="integer" name="config_autoBrightnessDarkeningLightDebounce"/>
  <java-symbol type="integer" name="config_autoBrightnessDarkeningLightDebounce"/>
  <java-symbol type="integer" name="config_autoBrightnessInitialLightSensorRate"/>
  <java-symbol type="integer" name="config_autoBrightnessInitialLightSensorRate"/>
+28 −10
Original line number Original line Diff line number Diff line
@@ -20,12 +20,14 @@ import com.android.server.EventLogTags;
import com.android.server.LocalServices;
import com.android.server.LocalServices;


import android.annotation.Nullable;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.hardware.Sensor;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.hardware.SensorManager;
import android.hardware.display.BrightnessConfiguration;
import android.hardware.display.BrightnessConfiguration;
import android.hardware.display.DisplayManagerInternal.DisplayPowerRequest;
import android.hardware.display.DisplayManagerInternal.DisplayPowerRequest;
import android.os.Build;
import android.os.Handler;
import android.os.Handler;
import android.os.Looper;
import android.os.Looper;
import android.os.Message;
import android.os.Message;
@@ -91,6 +93,8 @@ class AutomaticBrightnessController {
    // The minimum and maximum screen brightnesses.
    // The minimum and maximum screen brightnesses.
    private final int mScreenBrightnessRangeMinimum;
    private final int mScreenBrightnessRangeMinimum;
    private final int mScreenBrightnessRangeMaximum;
    private final int mScreenBrightnessRangeMaximum;

    // How much to scale doze brightness by (should be (0, 1.0]).
    private final float mDozeScaleFactor;
    private final float mDozeScaleFactor;


    // Initial light sensor event rate in milliseconds.
    // Initial light sensor event rate in milliseconds.
@@ -122,8 +126,8 @@ class AutomaticBrightnessController {
    // weighting values positive.
    // weighting values positive.
    private final int mWeightingIntercept;
    private final int mWeightingIntercept;


    // accessor object for determining thresholds to change brightness dynamically
    // Configuration object for determining thresholds to change brightness dynamically
    private final HysteresisLevels mDynamicHysteresis;
    private final HysteresisLevels mHysteresisLevels;


    // Amount of time to delay auto-brightness after screen on while waiting for
    // Amount of time to delay auto-brightness after screen on while waiting for
    // the light sensor to warm-up in milliseconds.
    // the light sensor to warm-up in milliseconds.
@@ -192,7 +196,7 @@ class AutomaticBrightnessController {
            int lightSensorWarmUpTime, int brightnessMin, int brightnessMax, float dozeScaleFactor,
            int lightSensorWarmUpTime, int brightnessMin, int brightnessMax, float dozeScaleFactor,
            int lightSensorRate, int initialLightSensorRate, long brighteningLightDebounceConfig,
            int lightSensorRate, int initialLightSensorRate, long brighteningLightDebounceConfig,
            long darkeningLightDebounceConfig, boolean resetAmbientLuxAfterWarmUpConfig,
            long darkeningLightDebounceConfig, boolean resetAmbientLuxAfterWarmUpConfig,
            int ambientLightHorizon, HysteresisLevels dynamicHysteresis) {
            HysteresisLevels hysteresisLevels) {
        mCallbacks = callbacks;
        mCallbacks = callbacks;
        mSensorManager = sensorManager;
        mSensorManager = sensorManager;
        mBrightnessMapper = mapper;
        mBrightnessMapper = mapper;
@@ -206,9 +210,9 @@ class AutomaticBrightnessController {
        mBrighteningLightDebounceConfig = brighteningLightDebounceConfig;
        mBrighteningLightDebounceConfig = brighteningLightDebounceConfig;
        mDarkeningLightDebounceConfig = darkeningLightDebounceConfig;
        mDarkeningLightDebounceConfig = darkeningLightDebounceConfig;
        mResetAmbientLuxAfterWarmUpConfig = resetAmbientLuxAfterWarmUpConfig;
        mResetAmbientLuxAfterWarmUpConfig = resetAmbientLuxAfterWarmUpConfig;
        mAmbientLightHorizon = ambientLightHorizon;
        mAmbientLightHorizon = AMBIENT_LIGHT_LONG_HORIZON_MILLIS;
        mWeightingIntercept = ambientLightHorizon;
        mWeightingIntercept = AMBIENT_LIGHT_LONG_HORIZON_MILLIS;
        mDynamicHysteresis = dynamicHysteresis;
        mHysteresisLevels = hysteresisLevels;
        mShortTermModelValid = true;
        mShortTermModelValid = true;
        mShortTermModelAnchor = -1;
        mShortTermModelAnchor = -1;


@@ -342,19 +346,24 @@ class AutomaticBrightnessController {
        pw.println("Automatic Brightness Controller Configuration:");
        pw.println("Automatic Brightness Controller Configuration:");
        pw.println("  mScreenBrightnessRangeMinimum=" + mScreenBrightnessRangeMinimum);
        pw.println("  mScreenBrightnessRangeMinimum=" + mScreenBrightnessRangeMinimum);
        pw.println("  mScreenBrightnessRangeMaximum=" + mScreenBrightnessRangeMaximum);
        pw.println("  mScreenBrightnessRangeMaximum=" + mScreenBrightnessRangeMaximum);
        pw.println("  mDozeScaleFactor=" + mDozeScaleFactor);
        pw.println("  mInitialLightSensorRate=" + mInitialLightSensorRate);
        pw.println("  mNormalLightSensorRate=" + mNormalLightSensorRate);
        pw.println("  mLightSensorWarmUpTimeConfig=" + mLightSensorWarmUpTimeConfig);
        pw.println("  mLightSensorWarmUpTimeConfig=" + mLightSensorWarmUpTimeConfig);
        pw.println("  mBrighteningLightDebounceConfig=" + mBrighteningLightDebounceConfig);
        pw.println("  mBrighteningLightDebounceConfig=" + mBrighteningLightDebounceConfig);
        pw.println("  mDarkeningLightDebounceConfig=" + mDarkeningLightDebounceConfig);
        pw.println("  mDarkeningLightDebounceConfig=" + mDarkeningLightDebounceConfig);
        pw.println("  mResetAmbientLuxAfterWarmUpConfig=" + mResetAmbientLuxAfterWarmUpConfig);
        pw.println("  mResetAmbientLuxAfterWarmUpConfig=" + mResetAmbientLuxAfterWarmUpConfig);
        pw.println("  mAmbientLightHorizon=" + mAmbientLightHorizon);
        pw.println("  mWeightingIntercept=" + mWeightingIntercept);


        pw.println();
        pw.println();
        pw.println("Automatic Brightness Controller State:");
        pw.println("Automatic Brightness Controller State:");
        pw.println("  mLightSensor=" + mLightSensor);
        pw.println("  mLightSensor=" + mLightSensor);
        pw.println("  mLightSensorEnabled=" + mLightSensorEnabled);
        pw.println("  mLightSensorEnabled=" + mLightSensorEnabled);
        pw.println("  mLightSensorEnableTime=" + TimeUtils.formatUptime(mLightSensorEnableTime));
        pw.println("  mLightSensorEnableTime=" + TimeUtils.formatUptime(mLightSensorEnableTime));
        pw.println("  mCurrentLightSensorRate=" + mCurrentLightSensorRate);
        pw.println("  mAmbientLux=" + mAmbientLux);
        pw.println("  mAmbientLux=" + mAmbientLux);
        pw.println("  mAmbientLuxValid=" + mAmbientLuxValid);
        pw.println("  mAmbientLuxValid=" + mAmbientLuxValid);
        pw.println("  mAmbientLightHorizon=" + mAmbientLightHorizon);
        pw.println("  mBrighteningLuxThreshold=" + mBrighteningLuxThreshold);
        pw.println("  mBrighteningLuxThreshold=" + mBrighteningLuxThreshold);
        pw.println("  mDarkeningLuxThreshold=" + mDarkeningLuxThreshold);
        pw.println("  mDarkeningLuxThreshold=" + mDarkeningLuxThreshold);
        pw.println("  mLastObservedLux=" + mLastObservedLux);
        pw.println("  mLastObservedLux=" + mLastObservedLux);
@@ -362,11 +371,20 @@ class AutomaticBrightnessController {
        pw.println("  mRecentLightSamples=" + mRecentLightSamples);
        pw.println("  mRecentLightSamples=" + mRecentLightSamples);
        pw.println("  mAmbientLightRingBuffer=" + mAmbientLightRingBuffer);
        pw.println("  mAmbientLightRingBuffer=" + mAmbientLightRingBuffer);
        pw.println("  mScreenAutoBrightness=" + mScreenAutoBrightness);
        pw.println("  mScreenAutoBrightness=" + mScreenAutoBrightness);
        pw.println("  mDisplayPolicy=" + mDisplayPolicy);
        pw.println("  mDisplayPolicy=" + DisplayPowerRequest.policyToString(mDisplayPolicy));
        pw.println("  mShortTermModelAnchor=" + mShortTermModelAnchor);
        pw.println("  mShortTermModelAnchor=" + mShortTermModelAnchor);
        pw.println("  mShortTermModelValid=" + mShortTermModelValid);
        pw.println("  mBrightnessAdjustmentSamplePending=" + mBrightnessAdjustmentSamplePending);
        pw.println("  mBrightnessAdjustmentSampleOldLux=" + mBrightnessAdjustmentSampleOldLux);
        pw.println("  mBrightnessAdjustmentSampleOldBrightness="
                + mBrightnessAdjustmentSampleOldBrightness);
        pw.println("  mShortTermModelValid=" + mShortTermModelValid);


        pw.println();
        pw.println();
        mBrightnessMapper.dump(pw);
        mBrightnessMapper.dump(pw);

        pw.println();
        mHysteresisLevels.dump(pw);
    }
    }


    private boolean setLightSensorEnabled(boolean enable) {
    private boolean setLightSensorEnabled(boolean enable) {
@@ -441,8 +459,8 @@ class AutomaticBrightnessController {
            lux = 0;
            lux = 0;
        }
        }
        mAmbientLux = lux;
        mAmbientLux = lux;
        mBrighteningLuxThreshold = mDynamicHysteresis.getBrighteningThreshold(lux);
        mBrighteningLuxThreshold = mHysteresisLevels.getBrighteningThreshold(lux);
        mDarkeningLuxThreshold = mDynamicHysteresis.getDarkeningThreshold(lux);
        mDarkeningLuxThreshold = mHysteresisLevels.getDarkeningThreshold(lux);


        // If the short term model was invalidated and the change is drastic enough, reset it.
        // If the short term model was invalidated and the change is drastic enough, reset it.
        if (!mShortTermModelValid && mShortTermModelAnchor != -1) {
        if (!mShortTermModelValid && mShortTermModelAnchor != -1) {
+21 −9
Original line number Original line Diff line number Diff line
@@ -68,10 +68,11 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.PrintWriter;
import java.nio.charset.StandardCharsets;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.ArrayDeque;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.ArrayList;

import java.util.Collections;
import java.util.Collections;
import java.util.Date;
import java.util.Deque;
import java.util.Deque;
import java.util.HashMap;
import java.util.HashMap;
import java.util.Map;
import java.util.Map;
@@ -115,6 +116,8 @@ public class BrightnessTracker {
    private static final int MSG_STOP_SENSOR_LISTENER = 2;
    private static final int MSG_STOP_SENSOR_LISTENER = 2;
    private static final int MSG_START_SENSOR_LISTENER = 3;
    private static final int MSG_START_SENSOR_LISTENER = 3;


    private static final SimpleDateFormat FORMAT = new SimpleDateFormat("MM-dd HH:mm:ss.SSS");

    // Lock held while accessing mEvents, is held while writing events to flash.
    // Lock held while accessing mEvents, is held while writing events to flash.
    private final Object mEventsLock = new Object();
    private final Object mEventsLock = new Object();
    @GuardedBy("mEventsLock")
    @GuardedBy("mEventsLock")
@@ -127,10 +130,10 @@ public class BrightnessTracker {


    private AmbientBrightnessStatsTracker mAmbientBrightnessStatsTracker;
    private AmbientBrightnessStatsTracker mAmbientBrightnessStatsTracker;


    private UserManager mUserManager;
    private final UserManager mUserManager;
    private final Context mContext;
    private final Context mContext;
    private final ContentResolver mContentResolver;
    private final ContentResolver mContentResolver;
    private Handler mBgHandler;
    private final Handler mBgHandler;


    // mBroadcastReceiver,  mSensorListener, mSettingsObserver and mSensorRegistered
    // mBroadcastReceiver,  mSensorListener, mSettingsObserver and mSensorRegistered
    // should only be used on the mBgHandler thread.
    // should only be used on the mBgHandler thread.
@@ -164,6 +167,8 @@ public class BrightnessTracker {
        } else {
        } else {
            mInjector = new Injector();
            mInjector = new Injector();
        }
        }
        mBgHandler = new TrackerHandler(mInjector.getBackgroundHandler().getLooper());
        mUserManager = mContext.getSystemService(UserManager.class);
    }
    }


    /**
    /**
@@ -175,8 +180,6 @@ public class BrightnessTracker {
        if (DEBUG) {
        if (DEBUG) {
            Slog.d(TAG, "Start");
            Slog.d(TAG, "Start");
        }
        }
        mBgHandler = new TrackerHandler(mInjector.getBackgroundHandler().getLooper());
        mUserManager = mContext.getSystemService(UserManager.class);
        mCurrentUserId = ActivityManager.getCurrentUser();
        mCurrentUserId = ActivityManager.getCurrentUser();
        mBgHandler.obtainMessage(MSG_BACKGROUND_START, (Float) initialBrightness).sendToTarget();
        mBgHandler.obtainMessage(MSG_BACKGROUND_START, (Float) initialBrightness).sendToTarget();
    }
    }
@@ -649,10 +652,12 @@ public class BrightnessTracker {
        }
        }
    }
    }


    public void dump(PrintWriter pw) {
    public void dump(final PrintWriter pw) {
        pw.println("BrightnessTracker state:");
        pw.println("BrightnessTracker state:");
        synchronized (mDataCollectionLock) {
        synchronized (mDataCollectionLock) {
            pw.println("  mStarted=" + mStarted);
            pw.println("  mStarted=" + mStarted);
            pw.println("  mLastBatteryLevel=" + mLastBatteryLevel);
            pw.println("  mLastBrightness=" + mLastBrightness);
            pw.println("  mLastSensorReadings.size=" + mLastSensorReadings.size());
            pw.println("  mLastSensorReadings.size=" + mLastSensorReadings.size());
            if (!mLastSensorReadings.isEmpty()) {
            if (!mLastSensorReadings.isEmpty()) {
                pw.println("  mLastSensorReadings time span "
                pw.println("  mLastSensorReadings time span "
@@ -665,7 +670,8 @@ public class BrightnessTracker {
            pw.println("  mEvents.size=" + mEvents.size());
            pw.println("  mEvents.size=" + mEvents.size());
            BrightnessChangeEvent[] events = mEvents.toArray();
            BrightnessChangeEvent[] events = mEvents.toArray();
            for (int i = 0; i < events.length; ++i) {
            for (int i = 0; i < events.length; ++i) {
                pw.print("    " + events[i].timeStamp + ", " + events[i].userId);
                pw.print("    " + FORMAT.format(new Date(events[i].timeStamp)));
                pw.print(", userId=" + events[i].userId);
                pw.print(", " + events[i].lastBrightness + "->" + events[i].brightness);
                pw.print(", " + events[i].lastBrightness + "->" + events[i].brightness);
                pw.print(", isUserSetBrightness=" + events[i].isUserSetBrightness);
                pw.print(", isUserSetBrightness=" + events[i].isUserSetBrightness);
                pw.print(", powerBrightnessFactor=" + events[i].powerBrightnessFactor);
                pw.print(", powerBrightnessFactor=" + events[i].powerBrightnessFactor);
@@ -680,17 +686,23 @@ public class BrightnessTracker {
                pw.println("}");
                pw.println("}");
            }
            }
        }
        }
        pw.println("  mWriteBrightnessTrackerStateScheduled="
                + mWriteBrightnessTrackerStateScheduled);
        mBgHandler.runWithScissors(() -> dumpLocal(pw), 1000);
        if (mAmbientBrightnessStatsTracker != null) {
        if (mAmbientBrightnessStatsTracker != null) {
            pw.println();
            pw.println();
            mAmbientBrightnessStatsTracker.dump(pw);
            mAmbientBrightnessStatsTracker.dump(pw);
        }
        }
    }
    }


    private void dumpLocal(PrintWriter pw) {
        pw.println("  mSensorRegistered=" + mSensorRegistered);
    }

    public ParceledListSlice<AmbientBrightnessDayStats> getAmbientBrightnessStats(int userId) {
    public ParceledListSlice<AmbientBrightnessDayStats> getAmbientBrightnessStats(int userId) {
        if (mAmbientBrightnessStatsTracker != null) {
        if (mAmbientBrightnessStatsTracker != null) {
            ArrayList<AmbientBrightnessDayStats> stats =
            ArrayList<AmbientBrightnessDayStats> stats =
                    mAmbientBrightnessStatsTracker.getUserStats(
                    mAmbientBrightnessStatsTracker.getUserStats(userId);
                            userId);
            if (stats != null) {
            if (stats != null) {
                return new ParceledListSlice<>(stats);
                return new ParceledListSlice<>(stats);
            }
            }
+54 −8
Original line number Original line Diff line number Diff line
@@ -295,6 +295,10 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
    private boolean mAppliedAutoBrightness;
    private boolean mAppliedAutoBrightness;
    private boolean mAppliedDimming;
    private boolean mAppliedDimming;
    private boolean mAppliedLowPower;
    private boolean mAppliedLowPower;
    private boolean mAppliedScreenBrightnessOverride;
    private boolean mAppliedTemporaryBrightness;
    private boolean mAppliedTemporaryAutoBrightnessAdjustment;
    private boolean mAppliedBrightnessBoost;


    // Brightness animation ramp rates in brightness units per second
    // Brightness animation ramp rates in brightness units per second
    private final int mBrightnessRampRateFast;
    private final int mBrightnessRampRateFast;
@@ -424,7 +428,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
                    com.android.internal.R.array.config_dynamicHysteresisDarkLevels);
                    com.android.internal.R.array.config_dynamicHysteresisDarkLevels);
            int[] luxHysteresisLevels = resources.getIntArray(
            int[] luxHysteresisLevels = resources.getIntArray(
                    com.android.internal.R.array.config_dynamicHysteresisLuxLevels);
                    com.android.internal.R.array.config_dynamicHysteresisLuxLevels);
            HysteresisLevels dynamicHysteresis = new HysteresisLevels(
            HysteresisLevels hysteresisLevels = new HysteresisLevels(
                    brightLevels, darkLevels, luxHysteresisLevels);
                    brightLevels, darkLevels, luxHysteresisLevels);


            long brighteningLightDebounce = resources.getInteger(
            long brighteningLightDebounce = resources.getInteger(
@@ -433,8 +437,6 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
                    com.android.internal.R.integer.config_autoBrightnessDarkeningLightDebounce);
                    com.android.internal.R.integer.config_autoBrightnessDarkeningLightDebounce);
            boolean autoBrightnessResetAmbientLuxAfterWarmUp = resources.getBoolean(
            boolean autoBrightnessResetAmbientLuxAfterWarmUp = resources.getBoolean(
                    com.android.internal.R.bool.config_autoBrightnessResetAmbientLuxAfterWarmUp);
                    com.android.internal.R.bool.config_autoBrightnessResetAmbientLuxAfterWarmUp);
            int ambientLightHorizon = resources.getInteger(
                    com.android.internal.R.integer.config_autoBrightnessAmbientLightHorizon);


            int lightSensorWarmUpTimeConfig = resources.getInteger(
            int lightSensorWarmUpTimeConfig = resources.getInteger(
                    com.android.internal.R.integer.config_lightSensorWarmupTime);
                    com.android.internal.R.integer.config_lightSensorWarmupTime);
@@ -457,8 +459,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
                        lightSensorWarmUpTimeConfig, mScreenBrightnessRangeMinimum,
                        lightSensorWarmUpTimeConfig, mScreenBrightnessRangeMinimum,
                        mScreenBrightnessRangeMaximum, dozeScaleFactor, lightSensorRate,
                        mScreenBrightnessRangeMaximum, dozeScaleFactor, lightSensorRate,
                        initialLightSensorRate, brighteningLightDebounce, darkeningLightDebounce,
                        initialLightSensorRate, brighteningLightDebounce, darkeningLightDebounce,
                        autoBrightnessResetAmbientLuxAfterWarmUp, ambientLightHorizon,
                        autoBrightnessResetAmbientLuxAfterWarmUp, hysteresisLevels);
                        dynamicHysteresis);
            } else {
            } else {
                mUseSoftwareAutoBrightnessConfig = false;
                mUseSoftwareAutoBrightnessConfig = false;
            }
            }
@@ -776,6 +777,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call


        if (brightness < 0 && mPowerRequest.screenBrightnessOverride > 0) {
        if (brightness < 0 && mPowerRequest.screenBrightnessOverride > 0) {
            brightness = mPowerRequest.screenBrightnessOverride;
            brightness = mPowerRequest.screenBrightnessOverride;
            mAppliedScreenBrightnessOverride = true;
        } else {
            mAppliedScreenBrightnessOverride = false;
        }
        }


        final boolean autoBrightnessEnabledInDoze =
        final boolean autoBrightnessEnabledInDoze =
@@ -784,7 +788,6 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
                    && (state == Display.STATE_ON || autoBrightnessEnabledInDoze)
                    && (state == Display.STATE_ON || autoBrightnessEnabledInDoze)
                    && brightness < 0
                    && brightness < 0
                    && mAutomaticBrightnessController != null;
                    && mAutomaticBrightnessController != null;
        boolean brightnessIsTemporary = false;


        final boolean userSetBrightnessChanged = updateUserSetScreenBrightness();
        final boolean userSetBrightnessChanged = updateUserSetScreenBrightness();
        if (userSetBrightnessChanged) {
        if (userSetBrightnessChanged) {
@@ -795,7 +798,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        // WindowManager or based on the display state.
        // WindowManager or based on the display state.
        if (mTemporaryScreenBrightness > 0) {
        if (mTemporaryScreenBrightness > 0) {
            brightness = mTemporaryScreenBrightness;
            brightness = mTemporaryScreenBrightness;
            brightnessIsTemporary = true;
            mAppliedTemporaryBrightness = true;
        } else {
            mAppliedTemporaryBrightness = false;
        }
        }


        final boolean autoBrightnessAdjustmentChanged = updateAutoBrightnessAdjustment();
        final boolean autoBrightnessAdjustmentChanged = updateAutoBrightnessAdjustment();
@@ -807,9 +812,10 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        final float autoBrightnessAdjustment;
        final float autoBrightnessAdjustment;
        if (!Float.isNaN(mTemporaryAutoBrightnessAdjustment)) {
        if (!Float.isNaN(mTemporaryAutoBrightnessAdjustment)) {
            autoBrightnessAdjustment = mTemporaryAutoBrightnessAdjustment;
            autoBrightnessAdjustment = mTemporaryAutoBrightnessAdjustment;
            brightnessIsTemporary = true;
            mAppliedTemporaryAutoBrightnessAdjustment = true;
        } else {
        } else {
            autoBrightnessAdjustment = mAutoBrightnessAdjustment;
            autoBrightnessAdjustment = mAutoBrightnessAdjustment;
            mAppliedTemporaryAutoBrightnessAdjustment = true;
        }
        }


        // Apply brightness boost.
        // Apply brightness boost.
@@ -819,6 +825,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        if (mPowerRequest.boostScreenBrightness
        if (mPowerRequest.boostScreenBrightness
                && brightness != PowerManager.BRIGHTNESS_OFF) {
                && brightness != PowerManager.BRIGHTNESS_OFF) {
            brightness = PowerManager.BRIGHTNESS_ON;
            brightness = PowerManager.BRIGHTNESS_ON;
            mAppliedBrightnessBoost = true;
        } else {
            mAppliedBrightnessBoost = false;
        }
        }


        // If the brightness is already set then it's been overridden by something other than the
        // If the brightness is already set then it's been overridden by something other than the
@@ -948,6 +957,8 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
            // level without it being a noticeable jump since any actual content isn't yet visible.
            // level without it being a noticeable jump since any actual content isn't yet visible.
            final boolean isDisplayContentVisible =
            final boolean isDisplayContentVisible =
                    mColorFadeEnabled && mPowerState.getColorFadeLevel() == 1.0f;
                    mColorFadeEnabled && mPowerState.getColorFadeLevel() == 1.0f;
            final boolean brightnessIsTemporary =
                    mAppliedTemporaryBrightness || mAppliedTemporaryAutoBrightnessAdjustment;
            if (initialRampSkip || hasBrightnessBuckets
            if (initialRampSkip || hasBrightnessBuckets
                    || wasOrWillBeInVr || !isDisplayContentVisible || brightnessIsTemporary) {
                    || wasOrWillBeInVr || !isDisplayContentVisible || brightnessIsTemporary) {
                animateScreenBrightness(brightness, 0);
                animateScreenBrightness(brightness, 0);
@@ -1586,10 +1597,20 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        pw.println("  mScreenBrightnessDimConfig=" + mScreenBrightnessDimConfig);
        pw.println("  mScreenBrightnessDimConfig=" + mScreenBrightnessDimConfig);
        pw.println("  mScreenBrightnessRangeMinimum=" + mScreenBrightnessRangeMinimum);
        pw.println("  mScreenBrightnessRangeMinimum=" + mScreenBrightnessRangeMinimum);
        pw.println("  mScreenBrightnessRangeMaximum=" + mScreenBrightnessRangeMaximum);
        pw.println("  mScreenBrightnessRangeMaximum=" + mScreenBrightnessRangeMaximum);
        pw.println("  mScreenBrightnessDefault=" + mScreenBrightnessDefault);
        pw.println("  mScreenBrightnessForVrRangeMinimum=" + mScreenBrightnessForVrRangeMinimum);
        pw.println("  mScreenBrightnessForVrRangeMaximum=" + mScreenBrightnessForVrRangeMaximum);
        pw.println("  mScreenBrightnessForVrDefault=" + mScreenBrightnessForVrDefault);
        pw.println("  mUseSoftwareAutoBrightnessConfig=" + mUseSoftwareAutoBrightnessConfig);
        pw.println("  mUseSoftwareAutoBrightnessConfig=" + mUseSoftwareAutoBrightnessConfig);
        pw.println("  mAllowAutoBrightnessWhileDozingConfig=" +
        pw.println("  mAllowAutoBrightnessWhileDozingConfig=" +
                mAllowAutoBrightnessWhileDozingConfig);
                mAllowAutoBrightnessWhileDozingConfig);
        pw.println("  mBrightnessRampRateFast=" + mBrightnessRampRateFast);
        pw.println("  mBrightnessRampRateSlow=" + mBrightnessRampRateSlow);
        pw.println("  mSkipScreenOnBrightnessRamp=" + mSkipScreenOnBrightnessRamp);
        pw.println("  mColorFadeFadesConfig=" + mColorFadeFadesConfig);
        pw.println("  mColorFadeFadesConfig=" + mColorFadeFadesConfig);
        pw.println("  mColorFadeEnabled=" + mColorFadeEnabled);
        pw.println("  mDisplayBlanksAfterDozeConfig=" + mDisplayBlanksAfterDozeConfig);
        pw.println("  mBrightnessBucketsInDozeConfig=" + mBrightnessBucketsInDozeConfig);


        mHandler.runWithScissors(new Runnable() {
        mHandler.runWithScissors(new Runnable() {
            @Override
            @Override
@@ -1603,6 +1624,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        pw.println();
        pw.println();
        pw.println("Display Power Controller Thread State:");
        pw.println("Display Power Controller Thread State:");
        pw.println("  mPowerRequest=" + mPowerRequest);
        pw.println("  mPowerRequest=" + mPowerRequest);
        pw.println("  mUnfinishedBusiness=" + mUnfinishedBusiness);
        pw.println("  mWaitingForNegativeProximity=" + mWaitingForNegativeProximity);
        pw.println("  mWaitingForNegativeProximity=" + mWaitingForNegativeProximity);
        pw.println("  mProximitySensor=" + mProximitySensor);
        pw.println("  mProximitySensor=" + mProximitySensor);
        pw.println("  mProximitySensorEnabled=" + mProximitySensorEnabled);
        pw.println("  mProximitySensorEnabled=" + mProximitySensorEnabled);
@@ -1615,12 +1637,23 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        pw.println("  mLastUserSetScreenBrightness=" + mLastUserSetScreenBrightness);
        pw.println("  mLastUserSetScreenBrightness=" + mLastUserSetScreenBrightness);
        pw.println("  mCurrentScreenBrightnessSetting=" + mCurrentScreenBrightnessSetting);
        pw.println("  mCurrentScreenBrightnessSetting=" + mCurrentScreenBrightnessSetting);
        pw.println("  mPendingScreenBrightnessSetting=" + mPendingScreenBrightnessSetting);
        pw.println("  mPendingScreenBrightnessSetting=" + mPendingScreenBrightnessSetting);
        pw.println("  mTemporaryScreenBrightness=" + mTemporaryScreenBrightness);
        pw.println("  mAutoBrightnessAdjustment=" + mAutoBrightnessAdjustment);
        pw.println("  mAutoBrightnessAdjustment=" + mAutoBrightnessAdjustment);
        pw.println("  mTemporaryAutoBrightnessAdjustment=" + mTemporaryAutoBrightnessAdjustment);
        pw.println("  mPendingAutoBrightnessAdjustment=" + mPendingAutoBrightnessAdjustment);
        pw.println("  mPendingAutoBrightnessAdjustment=" + mPendingAutoBrightnessAdjustment);
        pw.println("  mScreenBrightnessForVr=" + mScreenBrightnessForVr);
        pw.println("  mAppliedAutoBrightness=" + mAppliedAutoBrightness);
        pw.println("  mAppliedAutoBrightness=" + mAppliedAutoBrightness);
        pw.println("  mAppliedDimming=" + mAppliedDimming);
        pw.println("  mAppliedDimming=" + mAppliedDimming);
        pw.println("  mAppliedLowPower=" + mAppliedLowPower);
        pw.println("  mAppliedLowPower=" + mAppliedLowPower);
        pw.println("  mAppliedScreenBrightnessOverride=" + mAppliedScreenBrightnessOverride);
        pw.println("  mAppliedTemporaryBrightness=" + mAppliedTemporaryBrightness);
        pw.println("  mDozing=" + mDozing);
        pw.println("  mSkipRampState=" + skipRampStateToString(mSkipRampState));
        pw.println("  mInitialAutoBrightness=" + mInitialAutoBrightness);
        pw.println("  mScreenOnBlockStartRealTime=" + mScreenOnBlockStartRealTime);
        pw.println("  mScreenOffBlockStartRealTime=" + mScreenOffBlockStartRealTime);
        pw.println("  mPendingScreenOnUnblocker=" + mPendingScreenOnUnblocker);
        pw.println("  mPendingScreenOnUnblocker=" + mPendingScreenOnUnblocker);
        pw.println("  mPendingScreenOffUnblocker=" + mPendingScreenOffUnblocker);
        pw.println("  mPendingScreenOff=" + mPendingScreenOff);
        pw.println("  mPendingScreenOff=" + mPendingScreenOff);
        pw.println("  mReportedToPolicy=" +
        pw.println("  mReportedToPolicy=" +
                reportedToPolicyToString(mReportedScreenStateToPolicy));
                reportedToPolicyToString(mReportedScreenStateToPolicy));
@@ -1677,6 +1710,19 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
        }
        }
    }
    }


    private static String skipRampStateToString(int state) {
        switch (state) {
            case RAMP_STATE_SKIP_NONE:
                return "RAMP_STATE_SKIP_NONE";
            case RAMP_STATE_SKIP_INITIAL:
                return "RAMP_STATE_SKIP_INITIAL";
            case RAMP_STATE_SKIP_AUTOBRIGHT:
                return "RAMP_STATE_SKIP_AUTOBRIGHT";
            default:
                return Integer.toString(state);
        }
    }

    private static int clampAbsoluteBrightness(int value) {
    private static int clampAbsoluteBrightness(int value) {
        return MathUtils.constrain(value, PowerManager.BRIGHTNESS_OFF, PowerManager.BRIGHTNESS_ON);
        return MathUtils.constrain(value, PowerManager.BRIGHTNESS_OFF, PowerManager.BRIGHTNESS_ON);
    }
    }
Loading