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

Side by Side Diff: ui/display/manager/chromeos/display_configurator.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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/display/chromeos/display_configurator.h" 5 #include "ui/display/manager/chromeos/display_configurator.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/macros.h" 13 #include "base/macros.h"
14 #include "base/sys_info.h" 14 #include "base/sys_info.h"
15 #include "base/time/time.h" 15 #include "base/time/time.h"
16 #include "ui/display/chromeos/apply_content_protection_task.h"
17 #include "ui/display/chromeos/display_layout_manager.h"
18 #include "ui/display/chromeos/display_snapshot_virtual.h"
19 #include "ui/display/chromeos/display_util.h"
20 #include "ui/display/chromeos/update_display_configuration_task.h"
21 #include "ui/display/display.h" 16 #include "ui/display/display.h"
22 #include "ui/display/display_switches.h" 17 #include "ui/display/display_switches.h"
18 #include "ui/display/manager/chromeos/apply_content_protection_task.h"
19 #include "ui/display/manager/chromeos/display_layout_manager.h"
20 #include "ui/display/manager/chromeos/display_snapshot_virtual.h"
21 #include "ui/display/manager/chromeos/display_util.h"
22 #include "ui/display/manager/chromeos/update_display_configuration_task.h"
23 #include "ui/display/types/display_mode.h" 23 #include "ui/display/types/display_mode.h"
24 #include "ui/display/types/display_snapshot.h" 24 #include "ui/display/types/display_snapshot.h"
25 #include "ui/display/types/native_display_delegate.h" 25 #include "ui/display/types/native_display_delegate.h"
26 #include "ui/display/util/display_util.h" 26 #include "ui/display/util/display_util.h"
27 27
28 namespace ui { 28 namespace ui {
29 29
30 namespace { 30 namespace {
31 31
32 typedef std::vector<const DisplayMode*> DisplayModeList; 32 typedef std::vector<const DisplayMode*> DisplayModeList;
33 33
34 // The EDID specification marks the top bit of the manufacturer id as reserved. 34 // The EDID specification marks the top bit of the manufacturer id as reserved.
35 const int16_t kReservedManufacturerID = static_cast<int16_t>(1 << 15); 35 const int16_t kReservedManufacturerID = static_cast<int16_t>(1 << 15);
36 36
37 struct DisplayState { 37 struct DisplayState {
38 DisplaySnapshot* display = nullptr; // Not owned. 38 DisplaySnapshot* display = nullptr; // Not owned.
39 39
40 // User-selected mode for the display. 40 // User-selected mode for the display.
41 const DisplayMode* selected_mode = nullptr; 41 const DisplayMode* selected_mode = nullptr;
42 42
43 // Mode used when displaying the same desktop on multiple displays. 43 // Mode used when displaying the same desktop on multiple displays.
44 const DisplayMode* mirror_mode = nullptr; 44 const DisplayMode* mirror_mode = nullptr;
45 }; 45 };
46 46
47 void DoNothing(bool status) { 47 void DoNothing(bool status) {}
48 }
49 48
50 } // namespace 49 } // namespace
51 50
52 const int DisplayConfigurator::kSetDisplayPowerNoFlags = 0; 51 const int DisplayConfigurator::kSetDisplayPowerNoFlags = 0;
53 const int DisplayConfigurator::kSetDisplayPowerForceProbe = 1 << 0; 52 const int DisplayConfigurator::kSetDisplayPowerForceProbe = 1 << 0;
54 const int 53 const int DisplayConfigurator::kSetDisplayPowerOnlyIfSingleInternalDisplay =
55 DisplayConfigurator::kSetDisplayPowerOnlyIfSingleInternalDisplay = 1 << 1; 54 1 << 1;
56 55
57 bool DisplayConfigurator::TestApi::TriggerConfigureTimeout() { 56 bool DisplayConfigurator::TestApi::TriggerConfigureTimeout() {
58 if (configurator_->configure_timer_.IsRunning()) { 57 if (configurator_->configure_timer_.IsRunning()) {
59 configurator_->configure_timer_.user_task().Run(); 58 configurator_->configure_timer_.user_task().Run();
60 configurator_->configure_timer_.Stop(); 59 configurator_->configure_timer_.Stop();
61 return true; 60 return true;
62 } else { 61 } else {
63 return false; 62 return false;
64 } 63 }
65 } 64 }
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 bool try_panel_fitting, 118 bool try_panel_fitting,
120 bool preserve_aspect) const; 119 bool preserve_aspect) const;
121 120
122 DisplayConfigurator* configurator_; // Not owned. 121 DisplayConfigurator* configurator_; // Not owned.
123 122
124 DISALLOW_COPY_AND_ASSIGN(DisplayLayoutManagerImpl); 123 DISALLOW_COPY_AND_ASSIGN(DisplayLayoutManagerImpl);
125 }; 124 };
126 125
127 DisplayConfigurator::DisplayLayoutManagerImpl::DisplayLayoutManagerImpl( 126 DisplayConfigurator::DisplayLayoutManagerImpl::DisplayLayoutManagerImpl(
128 DisplayConfigurator* configurator) 127 DisplayConfigurator* configurator)
129 : configurator_(configurator) { 128 : configurator_(configurator) {}
130 }
131 129
132 DisplayConfigurator::DisplayLayoutManagerImpl::~DisplayLayoutManagerImpl() { 130 DisplayConfigurator::DisplayLayoutManagerImpl::~DisplayLayoutManagerImpl() {}
133 }
134 131
135 DisplayConfigurator::SoftwareMirroringController* 132 DisplayConfigurator::SoftwareMirroringController*
136 DisplayConfigurator::DisplayLayoutManagerImpl::GetSoftwareMirroringController() 133 DisplayConfigurator::DisplayLayoutManagerImpl::GetSoftwareMirroringController()
137 const { 134 const {
138 return configurator_->mirroring_controller_; 135 return configurator_->mirroring_controller_;
139 } 136 }
140 137
141 DisplayConfigurator::StateController* 138 DisplayConfigurator::StateController*
142 DisplayConfigurator::DisplayLayoutManagerImpl::GetStateController() const { 139 DisplayConfigurator::DisplayLayoutManagerImpl::GetStateController() const {
143 return configurator_->state_controller_; 140 return configurator_->state_controller_;
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 bool can_fit = internal_native_info->size().width() >= 403 bool can_fit = internal_native_info->size().width() >=
407 external_mode->size().width() && 404 external_mode->size().width() &&
408 internal_native_info->size().height() >= 405 internal_native_info->size().height() >=
409 external_mode->size().height() && 406 external_mode->size().height() &&
410 !external_mode->is_interlaced(); 407 !external_mode->is_interlaced();
411 if (can_fit) { 408 if (can_fit) {
412 configurator_->native_display_delegate_->AddMode( 409 configurator_->native_display_delegate_->AddMode(
413 *internal_display->display, external_mode.get()); 410 *internal_display->display, external_mode.get());
414 internal_display->display->add_mode(external_mode.get()); 411 internal_display->display->add_mode(external_mode.get());
415 internal_display->mirror_mode = 412 internal_display->mirror_mode =
416 internal_display->display->modes().back().get(); 413 internal_display->display->modes().back().get();
417 external_display->mirror_mode = external_mode.get(); 414 external_display->mirror_mode = external_mode.get();
418 return true; // Mirror mode created. 415 return true; // Mirror mode created.
419 } 416 }
420 } 417 }
421 } 418 }
422 419
423 return false; 420 return false;
424 } 421 }
425 422
426 //////////////////////////////////////////////////////////////////////////////// 423 ////////////////////////////////////////////////////////////////////////////////
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 requested_power_state_(chromeos::DISPLAY_POWER_ALL_ON), 473 requested_power_state_(chromeos::DISPLAY_POWER_ALL_ON),
477 pending_power_state_(chromeos::DISPLAY_POWER_ALL_ON), 474 pending_power_state_(chromeos::DISPLAY_POWER_ALL_ON),
478 has_pending_power_state_(false), 475 has_pending_power_state_(false),
479 pending_power_flags_(kSetDisplayPowerNoFlags), 476 pending_power_flags_(kSetDisplayPowerNoFlags),
480 force_configure_(false), 477 force_configure_(false),
481 next_display_protection_client_id_(1), 478 next_display_protection_client_id_(1),
482 display_externally_controlled_(false), 479 display_externally_controlled_(false),
483 display_control_changing_(false), 480 display_control_changing_(false),
484 displays_suspended_(false), 481 displays_suspended_(false),
485 layout_manager_(new DisplayLayoutManagerImpl(this)), 482 layout_manager_(new DisplayLayoutManagerImpl(this)),
486 weak_ptr_factory_(this) { 483 weak_ptr_factory_(this) {}
487 }
488 484
489 DisplayConfigurator::~DisplayConfigurator() { 485 DisplayConfigurator::~DisplayConfigurator() {
490 if (native_display_delegate_) 486 if (native_display_delegate_)
491 native_display_delegate_->RemoveObserver(this); 487 native_display_delegate_->RemoveObserver(this);
492 488
493 CallAndClearInProgressCallbacks(false); 489 CallAndClearInProgressCallbacks(false);
494 CallAndClearQueuedCallbacks(false); 490 CallAndClearQueuedCallbacks(false);
495 491
496 while (!query_protection_callbacks_.empty()) { 492 while (!query_protection_callbacks_.empty()) {
497 query_protection_callbacks_.front().Run(QueryProtectionResponse()); 493 query_protection_callbacks_.front().Run(QueryProtectionResponse());
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
589 585
590 // Turn off the displays before releasing control since we're no longer using 586 // Turn off the displays before releasing control since we're no longer using
591 // them for output. 587 // them for output.
592 SetDisplayPowerInternal( 588 SetDisplayPowerInternal(
593 chromeos::DISPLAY_POWER_ALL_OFF, kSetDisplayPowerNoFlags, 589 chromeos::DISPLAY_POWER_ALL_OFF, kSetDisplayPowerNoFlags,
594 base::Bind(&DisplayConfigurator::SendRelinquishDisplayControl, 590 base::Bind(&DisplayConfigurator::SendRelinquishDisplayControl,
595 weak_ptr_factory_.GetWeakPtr(), callback)); 591 weak_ptr_factory_.GetWeakPtr(), callback));
596 } 592 }
597 593
598 void DisplayConfigurator::SendRelinquishDisplayControl( 594 void DisplayConfigurator::SendRelinquishDisplayControl(
599 const DisplayControlCallback& callback, bool success) { 595 const DisplayControlCallback& callback,
596 bool success) {
600 if (success) { 597 if (success) {
601 // Set the flag early such that an incoming configuration event won't start 598 // Set the flag early such that an incoming configuration event won't start
602 // while we're releasing control of the displays. 599 // while we're releasing control of the displays.
603 display_externally_controlled_ = true; 600 display_externally_controlled_ = true;
604 native_display_delegate_->RelinquishDisplayControl( 601 native_display_delegate_->RelinquishDisplayControl(
605 base::Bind(&DisplayConfigurator::OnDisplayControlRelinquished, 602 base::Bind(&DisplayConfigurator::OnDisplayControlRelinquished,
606 weak_ptr_factory_.GetWeakPtr(), callback)); 603 weak_ptr_factory_.GetWeakPtr(), callback));
607 } else { 604 } else {
608 display_control_changing_ = false; 605 display_control_changing_ = false;
609 callback.Run(false); 606 callback.Run(false);
(...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after
1025 1022
1026 if (!ShouldRunConfigurationTask()) { 1023 if (!ShouldRunConfigurationTask()) {
1027 LOG(ERROR) << "Called RunPendingConfiguration without any changes" 1024 LOG(ERROR) << "Called RunPendingConfiguration without any changes"
1028 " requested"; 1025 " requested";
1029 CallAndClearQueuedCallbacks(true); 1026 CallAndClearQueuedCallbacks(true);
1030 return; 1027 return;
1031 } 1028 }
1032 1029
1033 configuration_task_.reset(new UpdateDisplayConfigurationTask( 1030 configuration_task_.reset(new UpdateDisplayConfigurationTask(
1034 native_display_delegate_.get(), layout_manager_.get(), 1031 native_display_delegate_.get(), layout_manager_.get(),
1035 requested_display_state_, pending_power_state_, pending_power_flags_, 1032 requested_display_state_, pending_power_state_, pending_power_flags_, 0,
1036 0, force_configure_, base::Bind(&DisplayConfigurator::OnConfigured, 1033 force_configure_, base::Bind(&DisplayConfigurator::OnConfigured,
1037 weak_ptr_factory_.GetWeakPtr()))); 1034 weak_ptr_factory_.GetWeakPtr())));
1038 configuration_task_->set_virtual_display_snapshots( 1035 configuration_task_->set_virtual_display_snapshots(
1039 virtual_display_snapshots_.get()); 1036 virtual_display_snapshots_.get());
1040 1037
1041 // Reset the flags before running the task; otherwise it may end up scheduling 1038 // Reset the flags before running the task; otherwise it may end up scheduling
1042 // another configuration. 1039 // another configuration.
1043 force_configure_ = false; 1040 force_configure_ = false;
1044 pending_power_flags_ = kSetDisplayPowerNoFlags; 1041 pending_power_flags_ = kSetDisplayPowerNoFlags;
1045 has_pending_power_state_ = false; 1042 has_pending_power_state_ = false;
1046 requested_display_state_ = MULTIPLE_DISPLAY_STATE_INVALID; 1043 requested_display_state_ = MULTIPLE_DISPLAY_STATE_INVALID;
1047 1044
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
1190 last_virtual_display_id_ = max_display_id & 0xff; 1187 last_virtual_display_id_ = max_display_id & 0xff;
1191 1188
1192 return true; 1189 return true;
1193 } 1190 }
1194 1191
1195 bool DisplayConfigurator::IsDisplayOn() const { 1192 bool DisplayConfigurator::IsDisplayOn() const {
1196 return current_power_state_ != chromeos::DISPLAY_POWER_ALL_OFF; 1193 return current_power_state_ != chromeos::DISPLAY_POWER_ALL_OFF;
1197 } 1194 }
1198 1195
1199 } // namespace ui 1196 } // namespace ui
OLDNEW
« no previous file with comments | « ui/display/manager/chromeos/display_configurator.h ('k') | ui/display/manager/chromeos/display_configurator_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698