| Index: ui/display/chromeos/update_display_configuration_task.cc
|
| diff --git a/ui/display/chromeos/update_display_configuration_task.cc b/ui/display/chromeos/update_display_configuration_task.cc
|
| index 5fa7ac7f9fb303d72afa24fc5ab02ff590c4203d..d734a8a6f69b6e86b3dd86cdaf7a2a8f2c4bbf70 100644
|
| --- a/ui/display/chromeos/update_display_configuration_task.cc
|
| +++ b/ui/display/chromeos/update_display_configuration_task.cc
|
| @@ -20,6 +20,7 @@ UpdateDisplayConfigurationTask::UpdateDisplayConfigurationTask(
|
| int power_flags,
|
| uint32_t background_color_argb,
|
| bool force_configure,
|
| + bool configure_cached_displays,
|
| const ResponseCallback& callback)
|
| : delegate_(delegate),
|
| layout_manager_(layout_manager),
|
| @@ -28,6 +29,7 @@ UpdateDisplayConfigurationTask::UpdateDisplayConfigurationTask(
|
| power_flags_(power_flags),
|
| background_color_argb_(background_color_argb),
|
| force_configure_(force_configure),
|
| + configure_cached_displays_(configure_cached_displays),
|
| callback_(callback),
|
| force_dpms_(false),
|
| weak_ptr_factory_(this) {
|
| @@ -38,12 +40,42 @@ UpdateDisplayConfigurationTask::~UpdateDisplayConfigurationTask() {
|
| delegate_->UngrabServer();
|
| }
|
|
|
| +void DoNothing(ConfigureDisplaysTask::Status status) {
|
| +}
|
| +
|
| void UpdateDisplayConfigurationTask::Run() {
|
| + // In the default case where the displays haven't changed, try to configure
|
| + // without probing the display devices to speed things up.
|
| + if (configure_cached_displays_)
|
| + delegate_->GetCachedDisplays(
|
| + base::Bind(&UpdateDisplayConfigurationTask::OnCachedDisplaysRetrieved,
|
| + weak_ptr_factory_.GetWeakPtr()));
|
| +
|
| delegate_->GetDisplays(
|
| base::Bind(&UpdateDisplayConfigurationTask::OnDisplaysUpdated,
|
| weak_ptr_factory_.GetWeakPtr()));
|
| }
|
|
|
| +void UpdateDisplayConfigurationTask::OnCachedDisplaysRetrieved(
|
| + const std::vector<DisplaySnapshot*>& displays) {
|
| + cached_displays_ = displays;
|
| +
|
| + if (cached_displays_.size() > 1 && background_color_argb_)
|
| + delegate_->SetBackgroundColor(background_color_argb_);
|
| +
|
| + // If the user hasn't requested a display state, update it using the requested
|
| + // power state.
|
| + if (new_display_state_ == MULTIPLE_DISPLAY_STATE_INVALID)
|
| + new_display_state_ = ChooseDisplayState();
|
| +
|
| + // If there has been any change in the requested power state and the displays
|
| + // aren't being turned off force a change in DPMS state.
|
| + force_dpms_ = ShouldForceDpms() && ShouldConfigure();
|
| +
|
| + if (ShouldConfigure())
|
| + EnterState(base::Bind(&DoNothing));
|
| +}
|
| +
|
| void UpdateDisplayConfigurationTask::OnDisplaysUpdated(
|
| const std::vector<DisplaySnapshot*>& displays) {
|
| cached_displays_ = displays;
|
|
|