From 6dbcc2148cbb6acf9a6913f71e45b8bb2ed4c678 Mon Sep 17 00:00:00 2001 From: "oshima@chromium.org" Date: Mon, 13 May 2013 09:54:28 +0000 Subject: Use the correct output index to get state for outputs. BUG=239412 TEST=manual. see bug for repro step. Review URL: https://chromiumcodereview.appspot.com/14699004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@199695 0039d316-1c4b-4281-b951-d872f2087c98 --- ash/display/display_change_observer_x11.cc | 6 +++--- ash/display/display_change_observer_x11.h | 2 +- chromeos/display/output_configurator.cc | 14 +++++--------- chromeos/display/output_configurator.h | 17 +++++++---------- chromeos/display/output_configurator_unittest.cc | 2 +- chromeos/display/real_output_configurator_delegate.cc | 1 + 6 files changed, 18 insertions(+), 24 deletions(-) diff --git a/ash/display/display_change_observer_x11.cc b/ash/display/display_change_observer_x11.cc index 90047a1..cb405d2 100644 --- a/ash/display/display_change_observer_x11.cc +++ b/ash/display/display_change_observer_x11.cc @@ -132,11 +132,11 @@ DisplayChangeObserverX11::~DisplayChangeObserverX11() { } chromeos::OutputState DisplayChangeObserverX11::GetStateForOutputs( - const std::vector& outputs) const { + const chromeos::OutputSnapshotList& outputs) const { CHECK(outputs.size() == 2); DisplayIdPair pair = std::make_pair( - GetDisplayId(outputs[0].output, outputs[0].output_index), - GetDisplayId(outputs[1].output, outputs[1].output_index)); + GetDisplayId(outputs[0].output, outputs[0].index), + GetDisplayId(outputs[1].output, outputs[1].index)); DisplayLayout layout = Shell::GetInstance()->display_controller()-> GetRegisteredDisplayLayout(pair); return layout.mirrored ? diff --git a/ash/display/display_change_observer_x11.h b/ash/display/display_change_observer_x11.h index 137137b..3bcf461 100644 --- a/ash/display/display_change_observer_x11.h +++ b/ash/display/display_change_observer_x11.h @@ -29,7 +29,7 @@ class DisplayChangeObserverX11 // chromeos::OutputConfigurator::StateController overrides: virtual chromeos::OutputState GetStateForOutputs( - const std::vector& outputs) const OVERRIDE; + const chromeos::OutputSnapshotList& outputs) const OVERRIDE; // Overriden from chromeos::OutputConfigurator::Observer: virtual void OnDisplayModeChanged() OVERRIDE; diff --git a/chromeos/display/output_configurator.cc b/chromeos/display/output_configurator.cc index 903f49b..cca82e7 100644 --- a/chromeos/display/output_configurator.cc +++ b/chromeos/display/output_configurator.cc @@ -92,7 +92,8 @@ OutputConfigurator::OutputSnapshot::OutputSnapshot() height(0), is_internal(false), is_aspect_preserving_scaling(false), - touch_device_id(0) {} + touch_device_id(0), + index(0) {} OutputConfigurator::CoordinateTransformation::CoordinateTransformation() : x_scale(1.0), @@ -353,7 +354,8 @@ bool OutputConfigurator::EnterState( const std::vector& outputs) { std::vector output_power; int num_on_outputs = GetOutputPower(outputs, power_state, &output_power); - + VLOG(1) << "EnterState: output=" << output_state + << ", power=" << power_state; switch (output_state) { case STATE_HEADLESS: if (outputs.size() != 0) { @@ -510,13 +512,7 @@ OutputState OutputConfigurator::GetOutputState( } else { // With either both outputs on or both outputs off, use one of the // dual modes. - std::vector output_infos; - for (size_t i = 0; i < outputs.size(); ++i) { - output_infos.push_back(OutputInfo()); - output_infos[i].output = outputs[i].output; - output_infos[i].output_index = i; - } - return state_controller_->GetStateForOutputs(output_infos); + return state_controller_->GetStateForOutputs(outputs); } } default: diff --git a/chromeos/display/output_configurator.h b/chromeos/display/output_configurator.h index faef729..43060ac 100644 --- a/chromeos/display/output_configurator.h +++ b/chromeos/display/output_configurator.h @@ -35,15 +35,6 @@ enum OutputState { STATE_DUAL_EXTENDED, }; -// Information that is necessary to construct display id -// in |OutputConfigurator::Delegate|. -// TODO(oshima): Move xrandr related functions to here -// from ui/base/x and replace this with display id list. -struct OutputInfo { - RROutput output; - int output_index; -}; - // This class interacts directly with the underlying Xrandr API to manipulate // CTRCs and Outputs. class CHROMEOS_EXPORT OutputConfigurator : public MessageLoop::Dispatcher { @@ -70,6 +61,10 @@ class CHROMEOS_EXPORT OutputConfigurator : public MessageLoop::Dispatcher { // XInput device ID or 0 if this output isn't a touchscreen. int touch_device_id; + + // TODO(oshima): Move xrandr related functions to here + // from ui/base/x and replace this with display id. + int index; }; struct CoordinateTransformation { @@ -114,7 +109,7 @@ class CHROMEOS_EXPORT OutputConfigurator : public MessageLoop::Dispatcher { // Called when displays are detected. virtual OutputState GetStateForOutputs( - const std::vector& outputs) const = 0; + const std::vector& outputs) const = 0; }; // Interface for classes that perform actions on behalf of OutputController. @@ -354,6 +349,8 @@ class CHROMEOS_EXPORT OutputConfigurator : public MessageLoop::Dispatcher { DISALLOW_COPY_AND_ASSIGN(OutputConfigurator); }; +typedef std::vector OutputSnapshotList; + } // namespace chromeos #endif // CHROMEOS_DISPLAY_OUTPUT_CONFIGURATOR_H_ diff --git a/chromeos/display/output_configurator_unittest.cc b/chromeos/display/output_configurator_unittest.cc index 0b2ee48..3d4fbfc 100644 --- a/chromeos/display/output_configurator_unittest.cc +++ b/chromeos/display/output_configurator_unittest.cc @@ -209,7 +209,7 @@ class TestStateController : public OutputConfigurator::StateController { // OutputConfigurator::StateController overrides: virtual OutputState GetStateForOutputs( - const std::vector& outputs) const OVERRIDE { return state_; } + const OutputSnapshotList& outputs) const OVERRIDE { return state_; } private: OutputState state_; diff --git a/chromeos/display/real_output_configurator_delegate.cc b/chromeos/display/real_output_configurator_delegate.cc index 4a6167c..531a46d 100644 --- a/chromeos/display/real_output_configurator_delegate.cc +++ b/chromeos/display/real_output_configurator_delegate.cc @@ -147,6 +147,7 @@ RealOutputConfiguratorDelegate::GetOutputs() { to_populate.is_aspect_preserving_scaling = IsOutputAspectPreservingScaling(this_id); to_populate.touch_device_id = None; + to_populate.index = i; VLOG(1) << "Found display #" << outputs.size() << " with output " << to_populate.output -- cgit v1.1