Loading services/core/java/com/android/server/display/DisplayManagerService.java +4 −2 Original line number Diff line number Diff line Loading @@ -181,8 +181,8 @@ public final class DisplayManagerService extends SystemService { private static final String FORCE_WIFI_DISPLAY_ENABLE = "persist.debug.wfd.enable"; private static final String PROP_DEFAULT_DISPLAY_TOP_INSET = "persist.sys.displayinset.top"; private static final long WAIT_FOR_DEFAULT_DISPLAY_TIMEOUT = 10000; private static final float THRESHOLD_FOR_REFRESH_RATES_DIVIDERS = 0.1f; private static final int MSG_REGISTER_DEFAULT_DISPLAY_ADAPTERS = 1; private static final int MSG_REGISTER_ADDITIONAL_DISPLAY_ADAPTERS = 2; Loading Loading @@ -371,7 +371,7 @@ public final class DisplayManagerService extends SystemService { private final boolean mAllowNonNativeRefreshRateOverride; private static final float THRESHOLD_FOR_REFRESH_RATES_DIVIDERS = 0.1f; private final BrightnessSynchronizer mBrightnessSynchronizer; /** * Applications use {@link android.view.Display#getRefreshRate} and Loading Loading @@ -408,6 +408,7 @@ public final class DisplayManagerService extends SystemService { mLogicalDisplayMapper = new LogicalDisplayMapper(context, mDisplayDeviceRepo, new LogicalDisplayListener()); mDisplayModeDirector = new DisplayModeDirector(context, mHandler); mBrightnessSynchronizer = new BrightnessSynchronizer(mContext); Resources resources = mContext.getResources(); mDefaultDisplayDefaultColorMode = mContext.getResources().getInteger( com.android.internal.R.integer.config_defaultDisplayDefaultColorMode); Loading Loading @@ -542,6 +543,7 @@ public final class DisplayManagerService extends SystemService { mHandler.sendEmptyMessage(MSG_REGISTER_ADDITIONAL_DISPLAY_ADAPTERS); mSettingsObserver = new SettingsObserver(); mBrightnessSynchronizer.startSynchronizing(); } @VisibleForTesting Loading services/core/java/com/android/server/display/DisplayPowerController.java +76 −41 Original line number Diff line number Diff line Loading @@ -154,6 +154,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call private final DisplayPowerCallbacks mCallbacks; // Battery stats. @Nullable private final IBatteryStats mBatteryStats; // The sensor manager. Loading @@ -172,6 +173,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call private final int mDisplayId; // Tracker for brightness changes. @Nullable private final BrightnessTracker mBrightnessTracker; // Tracker for brightness settings changes. Loading Loading @@ -406,30 +408,30 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call private ObjectAnimator mColorFadeOffAnimator; private RampAnimator<DisplayPowerState> mScreenBrightnessRampAnimator; // The brightness synchronizer to allow changes in the int brightness value to be reflected in // the float brightness value and vice versa. @Nullable private final BrightnessSynchronizer mBrightnessSynchronizer; /** * Creates the display power controller. */ public DisplayPowerController(Context context, DisplayPowerCallbacks callbacks, Handler handler, SensorManager sensorManager, DisplayBlanker blanker, LogicalDisplay logicalDisplay) { mLogicalDisplay = logicalDisplay; mDisplayId = mLogicalDisplay.getDisplayIdLocked(); mHandler = new DisplayControllerHandler(handler.getLooper()); if (mDisplayId == Display.DEFAULT_DISPLAY) { mBrightnessTracker = new BrightnessTracker(context, null); mBatteryStats = BatteryStatsService.getService(); } else { mBrightnessTracker = null; mBatteryStats = null; } mSettingsObserver = new SettingsObserver(mHandler); mCallbacks = callbacks; mBatteryStats = BatteryStatsService.getService(); mSensorManager = sensorManager; mWindowManagerPolicy = LocalServices.getService(WindowManagerPolicy.class); mBlanker = blanker; mContext = context; mBrightnessSynchronizer = new BrightnessSynchronizer(context); mBrightnessSynchronizer.startSynchronizing(); mLogicalDisplay = logicalDisplay; mDisplayId = mLogicalDisplay.getDisplayIdLocked(); PowerManager pm = context.getSystemService(PowerManager.class); Loading Loading @@ -460,8 +462,12 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mScreenBrightnessForVrRangeMinimum = clampAbsoluteBrightness( pm.getBrightnessConstraint(PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM_VR)); // Check the setting, but also verify that it is the default display. Only the default // display has an automatic brightness controller running. // TODO: b/179021925 - Fix to work with multiple displays mUseSoftwareAutoBrightnessConfig = resources.getBoolean( com.android.internal.R.bool.config_automatic_brightness_available); com.android.internal.R.bool.config_automatic_brightness_available) && mDisplayId == Display.DEFAULT_DISPLAY; mAllowAutoBrightnessWhileDozingConfig = resources.getBoolean( com.android.internal.R.bool.config_allowAutoBrightnessWhileDozing); Loading Loading @@ -557,7 +563,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mBrightnessBucketsInDozeConfig = resources.getBoolean( com.android.internal.R.bool.config_displayBrightnessBucketsInDoze); if (!DEBUG_PRETEND_PROXIMITY_SENSOR_ABSENT) { if (mDisplayId == Display.DEFAULT_DISPLAY && !DEBUG_PRETEND_PROXIMITY_SENSOR_ABSENT) { // TODO: b/178385123 Once there are sensor associations, we can enable proximity for // non-default displays. mProximitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); if (mProximitySensor != null) { mProximityThreshold = Math.min(mProximitySensor.getMaximumRange(), Loading Loading @@ -643,18 +651,28 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call * @param userId userId to fetch data for * @param includePackage if false will null out the package name in events */ @Nullable public ParceledListSlice<BrightnessChangeEvent> getBrightnessEvents( @UserIdInt int userId, boolean includePackage) { if (mBrightnessTracker == null) { return null; } return mBrightnessTracker.getEvents(userId, includePackage); } public void onSwitchUser(@UserIdInt int newUserId) { handleSettingsChange(true /* userSwitch */); if (mBrightnessTracker != null) { mBrightnessTracker.onSwitchUser(newUserId); } } @Nullable public ParceledListSlice<AmbientBrightnessDayStats> getAmbientBrightnessStats( @UserIdInt int userId) { if (mBrightnessTracker == null) { return null; } return mBrightnessTracker.getAmbientBrightnessStats(userId); } Loading @@ -662,8 +680,10 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call * Persist the brightness slider events and ambient brightness stats to disk. */ public void persistBrightnessTrackerState() { if (mBrightnessTracker != null) { mBrightnessTracker.persistBrightnessTrackerState(); } } /** * Requests a new power state. Loading Loading @@ -766,20 +786,16 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mPowerState, DisplayPowerState.SCREEN_BRIGHTNESS_FLOAT); mScreenBrightnessRampAnimator.setListener(mRampAnimatorListener); // Initialize screen state for battery stats. try { mBatteryStats.noteScreenState(mPowerState.getScreenState()); mBatteryStats.noteScreenBrightness(BrightnessSynchronizer.brightnessFloatToInt( mPowerState.getScreenBrightness())); } catch (RemoteException ex) { // same process } noteScreenState(mPowerState.getScreenState()); noteScreenBrightness(mPowerState.getScreenBrightness()); // Initialize all of the brightness tracking state final float brightness = convertToNits(BrightnessSynchronizer.brightnessFloatToInt( mPowerState.getScreenBrightness())); if (brightness >= 0.0f) { mBrightnessTracker.start(brightness); } mContext.getContentResolver().registerContentObserver( Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_FLOAT), false /*notifyForDescendants*/, mSettingsObserver, UserHandle.USER_ALL); Loading Loading @@ -1366,11 +1382,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call SystemProperties.set("debug.tracing.screen_state", String.valueOf(state)); mPowerState.setScreenState(state); // Tell battery stats about the transition. try { mBatteryStats.noteScreenState(state); } catch (RemoteException ex) { // same process } noteScreenState(state); } } Loading Loading @@ -1442,13 +1454,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call Trace.traceCounter(Trace.TRACE_TAG_POWER, "TargetScreenBrightness", (int) target); // TODO(b/153319140) remove when we can get this from the above trace invocation SystemProperties.set("debug.tracing.screen_brightness", String.valueOf(target)); try { // TODO(brightnessfloat): change BatteryStats to use float mBatteryStats.noteScreenBrightness( BrightnessSynchronizer.brightnessFloatToInt(target)); } catch (RemoteException ex) { // same process } noteScreenBrightness(target); } } Loading Loading @@ -1767,15 +1773,21 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call } private void putScreenBrightnessSetting(float brightnessValue) { if (mDisplayId == Display.DEFAULT_DISPLAY) { mCurrentScreenBrightnessSetting = brightnessValue; Settings.System.putFloatForUser(mContext.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_FLOAT, brightnessValue, UserHandle.USER_CURRENT); Settings.System.SCREEN_BRIGHTNESS_FLOAT, brightnessValue, UserHandle.USER_CURRENT); } } private void putAutoBrightnessAdjustmentSetting(float adjustment) { if (mDisplayId == Display.DEFAULT_DISPLAY) { mAutoBrightnessAdjustment = adjustment; Settings.System.putFloatForUser(mContext.getContentResolver(), Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ, adjustment, UserHandle.USER_CURRENT); Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ, adjustment, UserHandle.USER_CURRENT); } } private boolean updateAutoBrightnessAdjustment() { Loading Loading @@ -2056,6 +2068,29 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call return MathUtils.constrain(value, -1.0f, 1.0f); } private void noteScreenState(int screenState) { if (mBatteryStats != null) { try { // TODO(multi-display): make this multi-display mBatteryStats.noteScreenState(screenState); } catch (RemoteException e) { // same process } } } private void noteScreenBrightness(float brightness) { if (mBatteryStats != null) { try { // TODO(brightnessfloat): change BatteryStats to use float mBatteryStats.noteScreenBrightness(BrightnessSynchronizer.brightnessFloatToInt( brightness)); } catch (RemoteException e) { // same process } } } private final class DisplayControllerHandler extends Handler { public DisplayControllerHandler(Looper looper) { super(looper, null, true /*async*/); Loading Loading
services/core/java/com/android/server/display/DisplayManagerService.java +4 −2 Original line number Diff line number Diff line Loading @@ -181,8 +181,8 @@ public final class DisplayManagerService extends SystemService { private static final String FORCE_WIFI_DISPLAY_ENABLE = "persist.debug.wfd.enable"; private static final String PROP_DEFAULT_DISPLAY_TOP_INSET = "persist.sys.displayinset.top"; private static final long WAIT_FOR_DEFAULT_DISPLAY_TIMEOUT = 10000; private static final float THRESHOLD_FOR_REFRESH_RATES_DIVIDERS = 0.1f; private static final int MSG_REGISTER_DEFAULT_DISPLAY_ADAPTERS = 1; private static final int MSG_REGISTER_ADDITIONAL_DISPLAY_ADAPTERS = 2; Loading Loading @@ -371,7 +371,7 @@ public final class DisplayManagerService extends SystemService { private final boolean mAllowNonNativeRefreshRateOverride; private static final float THRESHOLD_FOR_REFRESH_RATES_DIVIDERS = 0.1f; private final BrightnessSynchronizer mBrightnessSynchronizer; /** * Applications use {@link android.view.Display#getRefreshRate} and Loading Loading @@ -408,6 +408,7 @@ public final class DisplayManagerService extends SystemService { mLogicalDisplayMapper = new LogicalDisplayMapper(context, mDisplayDeviceRepo, new LogicalDisplayListener()); mDisplayModeDirector = new DisplayModeDirector(context, mHandler); mBrightnessSynchronizer = new BrightnessSynchronizer(mContext); Resources resources = mContext.getResources(); mDefaultDisplayDefaultColorMode = mContext.getResources().getInteger( com.android.internal.R.integer.config_defaultDisplayDefaultColorMode); Loading Loading @@ -542,6 +543,7 @@ public final class DisplayManagerService extends SystemService { mHandler.sendEmptyMessage(MSG_REGISTER_ADDITIONAL_DISPLAY_ADAPTERS); mSettingsObserver = new SettingsObserver(); mBrightnessSynchronizer.startSynchronizing(); } @VisibleForTesting Loading
services/core/java/com/android/server/display/DisplayPowerController.java +76 −41 Original line number Diff line number Diff line Loading @@ -154,6 +154,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call private final DisplayPowerCallbacks mCallbacks; // Battery stats. @Nullable private final IBatteryStats mBatteryStats; // The sensor manager. Loading @@ -172,6 +173,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call private final int mDisplayId; // Tracker for brightness changes. @Nullable private final BrightnessTracker mBrightnessTracker; // Tracker for brightness settings changes. Loading Loading @@ -406,30 +408,30 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call private ObjectAnimator mColorFadeOffAnimator; private RampAnimator<DisplayPowerState> mScreenBrightnessRampAnimator; // The brightness synchronizer to allow changes in the int brightness value to be reflected in // the float brightness value and vice versa. @Nullable private final BrightnessSynchronizer mBrightnessSynchronizer; /** * Creates the display power controller. */ public DisplayPowerController(Context context, DisplayPowerCallbacks callbacks, Handler handler, SensorManager sensorManager, DisplayBlanker blanker, LogicalDisplay logicalDisplay) { mLogicalDisplay = logicalDisplay; mDisplayId = mLogicalDisplay.getDisplayIdLocked(); mHandler = new DisplayControllerHandler(handler.getLooper()); if (mDisplayId == Display.DEFAULT_DISPLAY) { mBrightnessTracker = new BrightnessTracker(context, null); mBatteryStats = BatteryStatsService.getService(); } else { mBrightnessTracker = null; mBatteryStats = null; } mSettingsObserver = new SettingsObserver(mHandler); mCallbacks = callbacks; mBatteryStats = BatteryStatsService.getService(); mSensorManager = sensorManager; mWindowManagerPolicy = LocalServices.getService(WindowManagerPolicy.class); mBlanker = blanker; mContext = context; mBrightnessSynchronizer = new BrightnessSynchronizer(context); mBrightnessSynchronizer.startSynchronizing(); mLogicalDisplay = logicalDisplay; mDisplayId = mLogicalDisplay.getDisplayIdLocked(); PowerManager pm = context.getSystemService(PowerManager.class); Loading Loading @@ -460,8 +462,12 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mScreenBrightnessForVrRangeMinimum = clampAbsoluteBrightness( pm.getBrightnessConstraint(PowerManager.BRIGHTNESS_CONSTRAINT_TYPE_MINIMUM_VR)); // Check the setting, but also verify that it is the default display. Only the default // display has an automatic brightness controller running. // TODO: b/179021925 - Fix to work with multiple displays mUseSoftwareAutoBrightnessConfig = resources.getBoolean( com.android.internal.R.bool.config_automatic_brightness_available); com.android.internal.R.bool.config_automatic_brightness_available) && mDisplayId == Display.DEFAULT_DISPLAY; mAllowAutoBrightnessWhileDozingConfig = resources.getBoolean( com.android.internal.R.bool.config_allowAutoBrightnessWhileDozing); Loading Loading @@ -557,7 +563,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mBrightnessBucketsInDozeConfig = resources.getBoolean( com.android.internal.R.bool.config_displayBrightnessBucketsInDoze); if (!DEBUG_PRETEND_PROXIMITY_SENSOR_ABSENT) { if (mDisplayId == Display.DEFAULT_DISPLAY && !DEBUG_PRETEND_PROXIMITY_SENSOR_ABSENT) { // TODO: b/178385123 Once there are sensor associations, we can enable proximity for // non-default displays. mProximitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); if (mProximitySensor != null) { mProximityThreshold = Math.min(mProximitySensor.getMaximumRange(), Loading Loading @@ -643,18 +651,28 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call * @param userId userId to fetch data for * @param includePackage if false will null out the package name in events */ @Nullable public ParceledListSlice<BrightnessChangeEvent> getBrightnessEvents( @UserIdInt int userId, boolean includePackage) { if (mBrightnessTracker == null) { return null; } return mBrightnessTracker.getEvents(userId, includePackage); } public void onSwitchUser(@UserIdInt int newUserId) { handleSettingsChange(true /* userSwitch */); if (mBrightnessTracker != null) { mBrightnessTracker.onSwitchUser(newUserId); } } @Nullable public ParceledListSlice<AmbientBrightnessDayStats> getAmbientBrightnessStats( @UserIdInt int userId) { if (mBrightnessTracker == null) { return null; } return mBrightnessTracker.getAmbientBrightnessStats(userId); } Loading @@ -662,8 +680,10 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call * Persist the brightness slider events and ambient brightness stats to disk. */ public void persistBrightnessTrackerState() { if (mBrightnessTracker != null) { mBrightnessTracker.persistBrightnessTrackerState(); } } /** * Requests a new power state. Loading Loading @@ -766,20 +786,16 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mPowerState, DisplayPowerState.SCREEN_BRIGHTNESS_FLOAT); mScreenBrightnessRampAnimator.setListener(mRampAnimatorListener); // Initialize screen state for battery stats. try { mBatteryStats.noteScreenState(mPowerState.getScreenState()); mBatteryStats.noteScreenBrightness(BrightnessSynchronizer.brightnessFloatToInt( mPowerState.getScreenBrightness())); } catch (RemoteException ex) { // same process } noteScreenState(mPowerState.getScreenState()); noteScreenBrightness(mPowerState.getScreenBrightness()); // Initialize all of the brightness tracking state final float brightness = convertToNits(BrightnessSynchronizer.brightnessFloatToInt( mPowerState.getScreenBrightness())); if (brightness >= 0.0f) { mBrightnessTracker.start(brightness); } mContext.getContentResolver().registerContentObserver( Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_FLOAT), false /*notifyForDescendants*/, mSettingsObserver, UserHandle.USER_ALL); Loading Loading @@ -1366,11 +1382,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call SystemProperties.set("debug.tracing.screen_state", String.valueOf(state)); mPowerState.setScreenState(state); // Tell battery stats about the transition. try { mBatteryStats.noteScreenState(state); } catch (RemoteException ex) { // same process } noteScreenState(state); } } Loading Loading @@ -1442,13 +1454,7 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call Trace.traceCounter(Trace.TRACE_TAG_POWER, "TargetScreenBrightness", (int) target); // TODO(b/153319140) remove when we can get this from the above trace invocation SystemProperties.set("debug.tracing.screen_brightness", String.valueOf(target)); try { // TODO(brightnessfloat): change BatteryStats to use float mBatteryStats.noteScreenBrightness( BrightnessSynchronizer.brightnessFloatToInt(target)); } catch (RemoteException ex) { // same process } noteScreenBrightness(target); } } Loading Loading @@ -1767,15 +1773,21 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call } private void putScreenBrightnessSetting(float brightnessValue) { if (mDisplayId == Display.DEFAULT_DISPLAY) { mCurrentScreenBrightnessSetting = brightnessValue; Settings.System.putFloatForUser(mContext.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_FLOAT, brightnessValue, UserHandle.USER_CURRENT); Settings.System.SCREEN_BRIGHTNESS_FLOAT, brightnessValue, UserHandle.USER_CURRENT); } } private void putAutoBrightnessAdjustmentSetting(float adjustment) { if (mDisplayId == Display.DEFAULT_DISPLAY) { mAutoBrightnessAdjustment = adjustment; Settings.System.putFloatForUser(mContext.getContentResolver(), Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ, adjustment, UserHandle.USER_CURRENT); Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ, adjustment, UserHandle.USER_CURRENT); } } private boolean updateAutoBrightnessAdjustment() { Loading Loading @@ -2056,6 +2068,29 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call return MathUtils.constrain(value, -1.0f, 1.0f); } private void noteScreenState(int screenState) { if (mBatteryStats != null) { try { // TODO(multi-display): make this multi-display mBatteryStats.noteScreenState(screenState); } catch (RemoteException e) { // same process } } } private void noteScreenBrightness(float brightness) { if (mBatteryStats != null) { try { // TODO(brightnessfloat): change BatteryStats to use float mBatteryStats.noteScreenBrightness(BrightnessSynchronizer.brightnessFloatToInt( brightness)); } catch (RemoteException e) { // same process } } } private final class DisplayControllerHandler extends Handler { public DisplayControllerHandler(Looper looper) { super(looper, null, true /*async*/); Loading