OLD | NEW |
---|---|
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/chromeos/display_configurator.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/sys_info.h" | 10 #include "base/sys_info.h" |
11 #include "base/time/time.h" | 11 #include "base/time/time.h" |
12 #include "ui/display/chromeos/display_snapshot_virtual.h" | |
12 #include "ui/display/chromeos/display_util.h" | 13 #include "ui/display/chromeos/display_util.h" |
13 #include "ui/display/chromeos/update_display_configuration_task.h" | 14 #include "ui/display/chromeos/update_display_configuration_task.h" |
14 #include "ui/display/display_switches.h" | 15 #include "ui/display/display_switches.h" |
15 #include "ui/display/types/display_mode.h" | 16 #include "ui/display/types/display_mode.h" |
16 #include "ui/display/types/display_snapshot.h" | 17 #include "ui/display/types/display_snapshot.h" |
17 #include "ui/display/types/native_display_delegate.h" | 18 #include "ui/display/types/native_display_delegate.h" |
19 #include "ui/gfx/display.h" | |
18 | 20 |
19 namespace ui { | 21 namespace ui { |
20 | 22 |
21 namespace { | 23 namespace { |
22 | 24 |
23 typedef std::vector<const DisplayMode*> DisplayModeList; | 25 typedef std::vector<const DisplayMode*> DisplayModeList; |
24 | 26 |
25 // The delay to perform configuration after RRNotify. See the comment for | 27 // The delay to perform configuration after RRNotify. See the comment for |
26 // |configure_timer_|. | 28 // |configure_timer_|. |
27 const int kConfigureDelayMs = 500; | 29 const int kConfigureDelayMs = 500; |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
135 std::vector<DisplayConfigurator::DisplayState> | 137 std::vector<DisplayConfigurator::DisplayState> |
136 DisplayConfigurator::DisplayLayoutManagerImpl::ParseDisplays( | 138 DisplayConfigurator::DisplayLayoutManagerImpl::ParseDisplays( |
137 const std::vector<DisplaySnapshot*>& snapshots) const { | 139 const std::vector<DisplaySnapshot*>& snapshots) const { |
138 std::vector<DisplayState> cached_displays; | 140 std::vector<DisplayState> cached_displays; |
139 for (auto snapshot : snapshots) { | 141 for (auto snapshot : snapshots) { |
140 DisplayState display_state; | 142 DisplayState display_state; |
141 display_state.display = snapshot; | 143 display_state.display = snapshot; |
142 cached_displays.push_back(display_state); | 144 cached_displays.push_back(display_state); |
143 } | 145 } |
144 | 146 |
147 // Add virtual display if activated. | |
148 if (configurator_->IsVirtualDisplayEnabled()) { | |
149 DisplayState display_state; | |
150 display_state.display = new DisplaySnapshotVirtual( | |
Daniel Erat
2015/02/23 23:14:53
are you leaking this? DisplayState documents that
dnicoara
2015/02/24 16:27:06
Yes, this needs to be kept track of. It is leaking
robert.bradford
2015/03/03 19:58:00
Refactored this so that DisplayConfigurator has a
| |
151 snapshots.size(), configurator_->virtual_display_mode_.get()); | |
152 cached_displays.push_back(display_state); | |
153 } | |
154 | |
145 // Set |selected_mode| fields. | 155 // Set |selected_mode| fields. |
146 for (size_t i = 0; i < cached_displays.size(); ++i) { | 156 for (size_t i = 0; i < cached_displays.size(); ++i) { |
147 DisplayState* display_state = &cached_displays[i]; | 157 DisplayState* display_state = &cached_displays[i]; |
148 gfx::Size size; | 158 gfx::Size size; |
149 if (GetStateController() && | 159 if (GetStateController() && |
150 GetStateController()->GetResolutionForDisplayId( | 160 GetStateController()->GetResolutionForDisplayId( |
151 display_state->display->display_id(), &size)) { | 161 display_state->display->display_id(), &size)) { |
152 display_state->selected_mode = | 162 display_state->selected_mode = |
153 FindDisplayModeMatchingSize(*display_state->display, size); | 163 FindDisplayModeMatchingSize(*display_state->display, size); |
154 } | 164 } |
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
587 HDCPState new_state = | 597 HDCPState new_state = |
588 new_desired ? HDCP_STATE_DESIRED : HDCP_STATE_UNDESIRED; | 598 new_desired ? HDCP_STATE_DESIRED : HDCP_STATE_UNDESIRED; |
589 if (!native_display_delegate_->SetHDCPState(*it->display, new_state)) | 599 if (!native_display_delegate_->SetHDCPState(*it->display, new_state)) |
590 return false; | 600 return false; |
591 } | 601 } |
592 break; | 602 break; |
593 } | 603 } |
594 case DISPLAY_CONNECTION_TYPE_INTERNAL: | 604 case DISPLAY_CONNECTION_TYPE_INTERNAL: |
595 case DISPLAY_CONNECTION_TYPE_VGA: | 605 case DISPLAY_CONNECTION_TYPE_VGA: |
596 case DISPLAY_CONNECTION_TYPE_NETWORK: | 606 case DISPLAY_CONNECTION_TYPE_NETWORK: |
607 case DISPLAY_CONNECTION_TYPE_VIRTUAL: | |
597 // No protections for these types. Do nothing. | 608 // No protections for these types. Do nothing. |
598 break; | 609 break; |
599 case DISPLAY_CONNECTION_TYPE_NONE: | 610 case DISPLAY_CONNECTION_TYPE_NONE: |
600 NOTREACHED(); | 611 NOTREACHED(); |
601 break; | 612 break; |
602 } | 613 } |
603 } | 614 } |
604 | 615 |
605 return true; | 616 return true; |
606 } | 617 } |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
663 return false; | 674 return false; |
664 if (state == HDCP_STATE_ENABLED) | 675 if (state == HDCP_STATE_ENABLED) |
665 enabled |= CONTENT_PROTECTION_METHOD_HDCP; | 676 enabled |= CONTENT_PROTECTION_METHOD_HDCP; |
666 else | 677 else |
667 unfulfilled |= CONTENT_PROTECTION_METHOD_HDCP; | 678 unfulfilled |= CONTENT_PROTECTION_METHOD_HDCP; |
668 break; | 679 break; |
669 } | 680 } |
670 case DISPLAY_CONNECTION_TYPE_INTERNAL: | 681 case DISPLAY_CONNECTION_TYPE_INTERNAL: |
671 case DISPLAY_CONNECTION_TYPE_VGA: | 682 case DISPLAY_CONNECTION_TYPE_VGA: |
672 case DISPLAY_CONNECTION_TYPE_NETWORK: | 683 case DISPLAY_CONNECTION_TYPE_NETWORK: |
684 case DISPLAY_CONNECTION_TYPE_VIRTUAL: | |
673 // No protections for these types. Do nothing. | 685 // No protections for these types. Do nothing. |
674 break; | 686 break; |
675 case DISPLAY_CONNECTION_TYPE_NONE: | 687 case DISPLAY_CONNECTION_TYPE_NONE: |
676 NOTREACHED(); | 688 NOTREACHED(); |
677 break; | 689 break; |
678 } | 690 } |
679 } | 691 } |
680 | 692 |
681 // Don't reveal protections requested by other clients. | 693 // Don't reveal protections requested by other clients. |
682 ProtectionRequests::iterator it = client_protection_requests_.find(client_id); | 694 ProtectionRequests::iterator it = client_protection_requests_.find(client_id); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
729 | 741 |
730 return true; | 742 return true; |
731 } | 743 } |
732 | 744 |
733 std::vector<ui::ColorCalibrationProfile> | 745 std::vector<ui::ColorCalibrationProfile> |
734 DisplayConfigurator::GetAvailableColorCalibrationProfiles(int64_t display_id) { | 746 DisplayConfigurator::GetAvailableColorCalibrationProfiles(int64_t display_id) { |
735 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( | 747 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( |
736 switches::kDisableDisplayColorCalibration)) { | 748 switches::kDisableDisplayColorCalibration)) { |
737 for (size_t i = 0; i < cached_displays_.size(); ++i) { | 749 for (size_t i = 0; i < cached_displays_.size(); ++i) { |
738 if (cached_displays_[i].display && | 750 if (cached_displays_[i].display && |
739 cached_displays_[i].display->display_id() == display_id) { | 751 cached_displays_[i].display->display_id() == display_id && |
752 IsNativeDisplay(cached_displays_[i].display->type())) { | |
740 return native_display_delegate_->GetAvailableColorCalibrationProfiles( | 753 return native_display_delegate_->GetAvailableColorCalibrationProfiles( |
741 *cached_displays_[i].display); | 754 *cached_displays_[i].display); |
742 } | 755 } |
743 } | 756 } |
744 } | 757 } |
745 | 758 |
746 return std::vector<ui::ColorCalibrationProfile>(); | 759 return std::vector<ui::ColorCalibrationProfile>(); |
747 } | 760 } |
748 | 761 |
749 bool DisplayConfigurator::SetColorCalibrationProfile( | 762 bool DisplayConfigurator::SetColorCalibrationProfile( |
750 int64_t display_id, | 763 int64_t display_id, |
751 ui::ColorCalibrationProfile new_profile) { | 764 ui::ColorCalibrationProfile new_profile) { |
752 for (size_t i = 0; i < cached_displays_.size(); ++i) { | 765 for (size_t i = 0; i < cached_displays_.size(); ++i) { |
753 if (cached_displays_[i].display && | 766 if (cached_displays_[i].display && |
754 cached_displays_[i].display->display_id() == display_id) { | 767 cached_displays_[i].display->display_id() == display_id && |
768 IsNativeDisplay(cached_displays_[i].display->type())) { | |
755 return native_display_delegate_->SetColorCalibrationProfile( | 769 return native_display_delegate_->SetColorCalibrationProfile( |
756 *cached_displays_[i].display, new_profile); | 770 *cached_displays_[i].display, new_profile); |
757 } | 771 } |
758 } | 772 } |
759 | 773 |
760 return false; | 774 return false; |
761 } | 775 } |
762 | 776 |
763 void DisplayConfigurator::PrepareForExit() { | 777 void DisplayConfigurator::PrepareForExit() { |
764 configure_display_ = false; | 778 configure_display_ = false; |
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1001 MultipleDisplayState attempted_state) { | 1015 MultipleDisplayState attempted_state) { |
1002 if (success) { | 1016 if (success) { |
1003 FOR_EACH_OBSERVER( | 1017 FOR_EACH_OBSERVER( |
1004 Observer, observers_, OnDisplayModeChanged(cached_displays_)); | 1018 Observer, observers_, OnDisplayModeChanged(cached_displays_)); |
1005 } else { | 1019 } else { |
1006 FOR_EACH_OBSERVER( | 1020 FOR_EACH_OBSERVER( |
1007 Observer, observers_, OnDisplayModeChangeFailed(attempted_state)); | 1021 Observer, observers_, OnDisplayModeChangeFailed(attempted_state)); |
1008 } | 1022 } |
1009 } | 1023 } |
1010 | 1024 |
1025 void DisplayConfigurator::EnableVirtualDisplay( | |
1026 scoped_ptr<DisplayMode> display_mode) { | |
oshima
2015/02/24 19:43:21
DCHECK(!IsVirtualDisplayEnabled()) << "...".
robert.bradford
2015/03/03 19:58:00
Done.
| |
1027 if (!IsVirtualDisplayEnabled()) { | |
1028 virtual_display_mode_ = display_mode.Pass(); | |
1029 ConfigureDisplays(); | |
oshima
2015/02/24 19:43:21
Is it harmful to reconfigure?
robert.bradford
2015/03/03 19:58:00
Done.
| |
1030 } else { | |
1031 NOTREACHED() | |
1032 << "Attempt to enable virtual display when it is already configured"; | |
1033 } | |
1034 } | |
1035 | |
1036 void DisplayConfigurator::DisableVirtualDisplay() { | |
1037 if (IsVirtualDisplayEnabled()) { | |
oshima
2015/02/24 19:43:21
ditto
robert.bradford
2015/03/03 19:58:00
Done.
| |
1038 virtual_display_mode_.reset(); | |
1039 ConfigureDisplays(); | |
1040 } else { | |
1041 NOTREACHED() << "Attempt to disable virtual display when it is not enabled"; | |
1042 } | |
1043 } | |
1044 | |
1045 int64 DisplayConfigurator::GetVirtualDisplayId() { | |
dnicoara
2015/02/24 16:27:06
You could remove this function. The caller can use
| |
1046 for (size_t i = 0; i < cached_displays_.size(); ++i) { | |
Daniel Erat
2015/02/23 23:14:53
nit: for (const auto& display : cached_displays_)
| |
1047 if (cached_displays_[i].display->type() == DISPLAY_CONNECTION_TYPE_VIRTUAL) | |
1048 return cached_displays_[i].display->display_id(); | |
1049 } | |
1050 return gfx::Display::kInvalidDisplayID; | |
1051 } | |
1011 } // namespace ui | 1052 } // namespace ui |
OLD | NEW |