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

Unified Diff: ui/display/chromeos/update_display_configuration_task.cc

Issue 2540313002: Split //ui/display and create //ui/display/manager. (Closed)
Patch Set: Cleanup export header. Created 4 years 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: 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
deleted file mode 100644
index db8dffb3aca1f666a985306129beb2ad17a2f052..0000000000000000000000000000000000000000
--- a/ui/display/chromeos/update_display_configuration_task.cc
+++ /dev/null
@@ -1,215 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ui/display/chromeos/update_display_configuration_task.h"
-
-#include "ui/display/chromeos/configure_displays_task.h"
-#include "ui/display/chromeos/display_layout_manager.h"
-#include "ui/display/chromeos/display_util.h"
-#include "ui/display/types/display_snapshot.h"
-#include "ui/display/types/native_display_delegate.h"
-
-namespace ui {
-
-UpdateDisplayConfigurationTask::UpdateDisplayConfigurationTask(
- NativeDisplayDelegate* delegate,
- DisplayLayoutManager* layout_manager,
- MultipleDisplayState new_display_state,
- chromeos::DisplayPowerState new_power_state,
- int power_flags,
- uint32_t background_color_argb,
- bool force_configure,
- const ResponseCallback& callback)
- : delegate_(delegate),
- layout_manager_(layout_manager),
- new_display_state_(new_display_state),
- new_power_state_(new_power_state),
- power_flags_(power_flags),
- background_color_argb_(background_color_argb),
- force_configure_(force_configure),
- callback_(callback),
- force_dpms_(false),
- weak_ptr_factory_(this) {
- delegate_->GrabServer();
-}
-
-UpdateDisplayConfigurationTask::~UpdateDisplayConfigurationTask() {
- delegate_->UngrabServer();
-}
-
-void UpdateDisplayConfigurationTask::Run() {
- delegate_->GetDisplays(
- base::Bind(&UpdateDisplayConfigurationTask::OnDisplaysUpdated,
- weak_ptr_factory_.GetWeakPtr()));
-}
-
-void UpdateDisplayConfigurationTask::OnDisplaysUpdated(
- const std::vector<DisplaySnapshot*>& displays) {
- cached_displays_ = displays;
-
- // Add virtual displays after retrieving the physical displays from the NDD.
- cached_displays_.insert(cached_displays_.end(),
- virtual_display_snapshots_.begin(),
- virtual_display_snapshots_.end());
-
- 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();
-
- VLOG(1) << "OnDisplaysUpdated: new_display_state="
- << MultipleDisplayStateToString(new_display_state_)
- << " new_power_state=" << DisplayPowerStateToString(new_power_state_)
- << " flags=" << power_flags_
- << " force_configure=" << force_configure_
- << " display_count=" << cached_displays_.size();
- // 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(&UpdateDisplayConfigurationTask::OnStateEntered,
- weak_ptr_factory_.GetWeakPtr()));
- } else {
- // If we don't have to configure then we're sticking with the old
- // configuration. Update it such that it reflects in the reported value.
- new_power_state_ = layout_manager_->GetPowerState();
- FinishConfiguration(true);
- }
-}
-
-void UpdateDisplayConfigurationTask::EnterState(
- const ConfigureDisplaysTask::ResponseCallback& callback) {
- VLOG(2) << "EnterState";
- std::vector<DisplayConfigureRequest> requests;
- if (!layout_manager_->GetDisplayLayout(cached_displays_, new_display_state_,
- new_power_state_, &requests,
- &framebuffer_size_)) {
- callback.Run(ConfigureDisplaysTask::ERROR);
- return;
- }
- if (!requests.empty()) {
- DCHECK(!framebuffer_size_.IsEmpty());
- delegate_->CreateFrameBuffer(framebuffer_size_);
- configure_task_.reset(
- new ConfigureDisplaysTask(delegate_, requests, callback));
- configure_task_->Run();
- } else {
- VLOG(2) << "No displays";
- callback.Run(ConfigureDisplaysTask::SUCCESS);
- }
-}
-
-void UpdateDisplayConfigurationTask::OnStateEntered(
- ConfigureDisplaysTask::Status status) {
- bool success = status != ConfigureDisplaysTask::ERROR;
- if (new_display_state_ == MULTIPLE_DISPLAY_STATE_DUAL_MIRROR &&
- status == ConfigureDisplaysTask::PARTIAL_SUCCESS)
- success = false;
-
- if (layout_manager_->GetSoftwareMirroringController()) {
- bool enable_software_mirroring = false;
- if (!success && new_display_state_ == MULTIPLE_DISPLAY_STATE_DUAL_MIRROR) {
- if (layout_manager_->GetDisplayState() !=
- MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED ||
- layout_manager_->GetPowerState() != new_power_state_ ||
- force_configure_) {
- new_display_state_ = MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED;
- EnterState(base::Bind(
- &UpdateDisplayConfigurationTask::OnEnableSoftwareMirroring,
- weak_ptr_factory_.GetWeakPtr()));
- return;
- }
-
- success = layout_manager_->GetDisplayState() ==
- MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED;
- enable_software_mirroring = success;
- if (success)
- new_display_state_ = MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED;
- }
-
- layout_manager_->GetSoftwareMirroringController()->SetSoftwareMirroring(
- enable_software_mirroring);
- }
-
- FinishConfiguration(success);
-}
-
-void UpdateDisplayConfigurationTask::OnEnableSoftwareMirroring(
- ConfigureDisplaysTask::Status status) {
- bool success = status != ConfigureDisplaysTask::ERROR;
- layout_manager_->GetSoftwareMirroringController()->SetSoftwareMirroring(
- success);
- FinishConfiguration(success);
-}
-
-void UpdateDisplayConfigurationTask::FinishConfiguration(bool success) {
- if (success && force_dpms_)
- delegate_->ForceDPMSOn();
-
- callback_.Run(success, cached_displays_, framebuffer_size_,
- new_display_state_, new_power_state_);
-}
-
-bool UpdateDisplayConfigurationTask::ShouldForceDpms() const {
- return new_power_state_ != chromeos::DISPLAY_POWER_ALL_OFF &&
- (layout_manager_->GetPowerState() != new_power_state_ ||
- (power_flags_ & DisplayConfigurator::kSetDisplayPowerForceProbe));
-}
-
-bool UpdateDisplayConfigurationTask::ShouldConfigure() const {
- if (force_configure_)
- return true;
-
- if (cached_displays_.size() == 1 &&
- cached_displays_[0]->type() == DISPLAY_CONNECTION_TYPE_INTERNAL)
- return true;
-
- if (!(power_flags_ &
- DisplayConfigurator::kSetDisplayPowerOnlyIfSingleInternalDisplay))
- return true;
-
- if (new_display_state_ != layout_manager_->GetDisplayState())
- return true;
-
- return false;
-}
-
-MultipleDisplayState UpdateDisplayConfigurationTask::ChooseDisplayState()
- const {
- int num_displays = cached_displays_.size();
- int num_on_displays =
- GetDisplayPower(cached_displays_, new_power_state_, nullptr);
-
- if (num_displays == 0)
- return MULTIPLE_DISPLAY_STATE_HEADLESS;
-
- if (num_displays == 1 || num_on_displays == 1) {
- // If only one display is currently turned on, return the "single" state
- // so that its native mode will be used.
- return MULTIPLE_DISPLAY_STATE_SINGLE;
- }
-
- if (num_displays == 2 || num_on_displays == 2) {
- // Try to use the saved configuration; otherwise, default to extended.
- DisplayConfigurator::StateController* state_controller =
- layout_manager_->GetStateController();
-
- if (!state_controller)
- return MULTIPLE_DISPLAY_STATE_DUAL_EXTENDED;
- return state_controller->GetStateForDisplayIds(cached_displays_);
- }
-
- if (num_displays >= 3) {
- // 3+ displays are always extended
- return MULTIPLE_DISPLAY_STATE_MULTI_EXTENDED;
- }
-
- return MULTIPLE_DISPLAY_STATE_INVALID;
-}
-
-} // namespace ui

Powered by Google App Engine
This is Rietveld 408576698