diff options
author | oshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-06 20:34:00 +0000 |
---|---|---|
committer | oshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-06 20:34:00 +0000 |
commit | ec01be8db2368d0ac5f6aaed52fbc41cfa6be6db (patch) | |
tree | a9248271e36d5087f9b1d6339abe35a24703a56e /chromeos | |
parent | 26785644d15989ed2b124cf094c993cdd2bcb697 (diff) | |
download | chromium_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.cc | 21 |
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); |