Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(129)

Unified Diff: chromeos/display/output_configurator.cc

Issue 12391004: chromeos: Add DisplayPowerServiceProvider. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chromeos/display/output_configurator.cc
diff --git a/chromeos/display/output_configurator.cc b/chromeos/display/output_configurator.cc
index de22e2c0750d14c719efcb957a0086beaa82d8e2..a7ae5bb9fcb71b185a767f186ac2d281d46f11e6 100644
--- a/chromeos/display/output_configurator.cc
+++ b/chromeos/display/output_configurator.cc
@@ -650,14 +650,12 @@ bool OutputConfigurator::CycleDisplayMode() {
return did_change;
}
-bool OutputConfigurator::ScreenPowerSet(bool power_on, bool all_displays) {
- TRACE_EVENT0("chromeos", "OutputConfigurator::ScreenPowerSet");
- VLOG(1) << "OutputConfigurator::SetScreensOn " << power_on
- << " all displays " << all_displays;
+bool OutputConfigurator::SetDisplayPowerState(DisplayPowerState state) {
+ TRACE_EVENT0("chromeos", "OutputConfigurator::SetPowerState");
+ VLOG(1) << "OutputConfigurator::SetPowerState state " << state;
if (!is_running_on_chrome_os_)
return false;
- bool success = false;
Display* display = base::MessagePumpAuraX11::GetDefaultXDisplay();
CHECK(display != NULL);
XGrabServer(display);
@@ -668,7 +666,7 @@ bool OutputConfigurator::ScreenPowerSet(bool power_on, bool all_displays) {
std::vector<OutputSnapshot> outputs = GetDualOutputs(display, screen);
connected_output_count_ = outputs.size();
- if (all_displays && power_on) {
+ if (state == DISPLAY_POWER_ALL_ON) {
// Resume all displays using the current state.
if (EnterState(display, screen, window, output_state_, outputs)) {
// Force the DPMS on since the driver doesn't always detect that it should
@@ -687,32 +685,34 @@ bool OutputConfigurator::ScreenPowerSet(bool power_on, bool all_displays) {
// Set the CRTCs based on whether we want to turn the power on or off and
// select the outputs to operate on by name or all_displays.
for (int i = 0; i < connected_output_count_; ++i) {
- if (all_displays || outputs[i].is_internal || power_on) {
- config.x = 0;
- config.y = outputs[i].y;
- config.output = outputs[i].output;
- config.mode = None;
- if (power_on) {
+ config.x = 0;
Daniel Erat 2013/02/28 01:48:53 I'm not sure how to test that this still works as
+ config.y = outputs[i].y;
+ config.output = outputs[i].output;
+
+ // Workaround for crbug.com/148365: leave internal display in native
+ // mode so user can move cursor (and hence windows) onto internal
+ // display even when it's off.
+ if (connected_output_count_ > 1 && outputs[i].is_internal) {
+ config.mode = outputs[i].native_mode;
+ } else {
+ if (state == DISPLAY_POWER_ALL_ON ||
+ (state == DISPLAY_POWER_INTERNAL_OFF_EXTERNAL_ON &&
+ !outputs[i].is_internal)) {
config.mode = (output_state_ == STATE_DUAL_MIRROR) ?
outputs[i].mirror_mode : outputs[i].native_mode;
- } else if (connected_output_count_ > 1 && !all_displays &&
- outputs[i].is_internal) {
- // Workaround for crbug.com/148365: leave internal display in native
- // mode so user can move cursor (and hence windows) onto internal
- // display even when dimmed
- config.mode = outputs[i].native_mode;
+ } else {
+ config.mode = None;
}
- config.crtc = GetNextCrtcAfter(display, screen, config.output,
- config.crtc);
-
- ConfigureCrtc(display, screen, &config);
- success = true;
}
+
+ config.crtc = GetNextCrtcAfter(display, screen, config.output, config.crtc);
+ ConfigureCrtc(display, screen, &config);
}
// Force the DPMS on since the driver doesn't always detect that it should
// turn on. This is needed when coming back from idle suspend.
- if (power_on) {
+ if (state == DISPLAY_POWER_ALL_ON ||
+ state == DISPLAY_POWER_INTERNAL_OFF_EXTERNAL_ON) {
CHECK(DPMSEnable(display));
CHECK(DPMSForceLevel(display, DPMSModeOn));
}
@@ -720,7 +720,7 @@ bool OutputConfigurator::ScreenPowerSet(bool power_on, bool all_displays) {
XRRFreeScreenResources(screen);
XUngrabServer(display);
- return success;
+ return true;
}
bool OutputConfigurator::SetDisplayMode(OutputState new_state) {
@@ -843,7 +843,7 @@ void OutputConfigurator::SuspendDisplays() {
// Turn displays on before suspend. At this point, the backlight is off,
// so we turn on the internal display so that we can resume directly into
// "on" state. This greatly reduces resume times.
- ScreenPowerSet(true, true);
+ SetDisplayPowerState(DISPLAY_POWER_ALL_ON);
// We need to make sure that the monitor configuration we just did actually
// completes before we return, because otherwise the X message could be
// racing with the HandleSuspendReadiness message.

Powered by Google App Engine
This is Rietveld 408576698