summaryrefslogtreecommitdiffstats
path: root/chromeos
diff options
context:
space:
mode:
authoroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-06 20:34:00 +0000
committeroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-06 20:34:00 +0000
commitec01be8db2368d0ac5f6aaed52fbc41cfa6be6db (patch)
treea9248271e36d5087f9b1d6339abe35a24703a56e /chromeos
parent26785644d15989ed2b124cf094c993cdd2bcb697 (diff)
downloadchromium_src-ec01be8db2368d0ac5f6aaed52fbc41cfa6be6db.zip
chromium_src-ec01be8db2368d0ac5f6aaed52fbc41cfa6be6db.tar.gz
chromium_src-ec01be8db2368d0ac5f6aaed52fbc41cfa6be6db.tar.bz2
Set the correct initial output state
- This also fixes the issue where external display can be off after sign out. - Add UMA stats for configuration failures. BUG=159533, 159084 TEST=manual: see bugs for repro step. Review URL: https://chromiumcodereview.appspot.com/11365102 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@166258 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chromeos')
-rw-r--r--chromeos/display/output_configurator.cc21
1 files changed, 16 insertions, 5 deletions
diff --git a/chromeos/display/output_configurator.cc b/chromeos/display/output_configurator.cc
index 795ef01..dea239c 100644
--- a/chromeos/display/output_configurator.cc
+++ b/chromeos/display/output_configurator.cc
@@ -338,8 +338,10 @@ static bool EnterState(Display* display,
case 1: {
// Re-allocate the framebuffer to fit.
XRRModeInfo* mode_info = ModeInfoForID(screen, outputs[0].native_mode);
- if (mode_info == NULL)
+ if (mode_info == NULL) {
+ UMA_HISTOGRAM_COUNTS("Display.EnterState.single_failures", 1);
return false;
+ }
int width = mode_info->width;
int height = mode_info->height;
@@ -366,8 +368,10 @@ static bool EnterState(Display* display,
if (STATE_DUAL_MIRROR == new_state) {
XRRModeInfo* mode_info = ModeInfoForID(screen, outputs[0].mirror_mode);
- if (mode_info == NULL)
+ if (mode_info == NULL) {
+ UMA_HISTOGRAM_COUNTS("Display.EnterState.mirror_failures", 1);
return false;
+ }
int width = mode_info->width;
int height = mode_info->height;
@@ -394,8 +398,10 @@ static bool EnterState(Display* display,
ModeInfoForID(screen, outputs[0].native_mode);
XRRModeInfo* secondary_mode_info =
ModeInfoForID(screen, outputs[1].native_mode);
- if (primary_mode_info == NULL || secondary_mode_info == NULL)
+ if (primary_mode_info == NULL || secondary_mode_info == NULL) {
+ UMA_HISTOGRAM_COUNTS("Display.EnterState.dual_failures", 1);
return false;
+ }
int width =
std::max<int>(primary_mode_info->width, secondary_mode_info->width);
@@ -521,14 +527,19 @@ void OutputConfigurator::Init(bool is_panel_fitting_enabled) {
starting_state,
outputs,
connected_output_count_)) {
- output_state_ =
- InferCurrentState(display, screen, outputs, connected_output_count_);
+ output_state_ = starting_state;
}
bool is_projecting = IsProjecting(outputs, connected_output_count_);
// Find xrandr_event_base_ since we need it to interpret events, later.
int error_base_ignored = 0;
XRRQueryExtension(display, &xrandr_event_base_, &error_base_ignored);
+
+ // Force the DPMS on chrome startup as the driver doesn't always detect
+ // that all displays are on when signing out.
+ CHECK(DPMSEnable(display));
+ CHECK(DPMSForceLevel(display, DPMSModeOn));
+
// Relinquish X resources.
XRRFreeScreenResources(screen);
XUngrabServer(display);