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

Unified Diff: ash/display/display_manager.cc

Issue 2196923002: Make ash::DisplayMode more like ui::DisplayMode (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: review comments Created 4 years, 4 months 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: ash/display/display_manager.cc
diff --git a/ash/display/display_manager.cc b/ash/display/display_manager.cc
index bed4ca47346aa40e280d4582272fafcbb3a1c4c4..54c79555bb32cb1aae76d8fa85685452a6633856 100644
--- a/ash/display/display_manager.cc
+++ b/ash/display/display_manager.cc
@@ -14,6 +14,7 @@
#include <vector>
#include "ash/common/ash_switches.h"
+#include "ash/common/display/display_info.h"
#include "ash/display/display_layout_store.h"
#include "ash/display/display_util.h"
#include "ash/display/extended_mouse_warp_controller.h"
@@ -84,21 +85,21 @@ display::Display& GetInvalidDisplay() {
return *invalid_display;
}
-std::vector<DisplayMode>::const_iterator FindDisplayMode(
+DisplayInfo::DisplayModeList::const_iterator FindDisplayMode(
const DisplayInfo& info,
- const DisplayMode& target_mode) {
- const std::vector<DisplayMode>& modes = info.display_modes();
+ const scoped_refptr<DisplayMode>& target_mode) {
+ const DisplayInfo::DisplayModeList& modes = info.display_modes();
return std::find_if(modes.begin(), modes.end(),
- [target_mode](const DisplayMode& mode) {
- return target_mode.IsEquivalent(mode);
+ [target_mode](const scoped_refptr<DisplayMode>& mode) {
+ return target_mode->IsEquivalent(mode);
});
}
void SetInternalDisplayModeList(DisplayInfo* info) {
- DisplayMode native_mode;
- native_mode.size = info->bounds_in_native().size();
- native_mode.device_scale_factor = info->device_scale_factor();
- native_mode.ui_scale = 1.0f;
+ scoped_refptr<DisplayMode> native_mode =
+ new DisplayMode(info->bounds_in_native().size(), 0.0 /* refresh_rate */,
+ false /* interlaced */, false /* native_mode */,
+ 1.0 /* ui_scale */, info->device_scale_factor());
info->SetDisplayModes(CreateInternalDisplayModeList(native_mode));
}
@@ -114,8 +115,8 @@ void MaybeInitInternalDisplay(DisplayInfo* info) {
gfx::Size GetMaxNativeSize(const DisplayInfo& info) {
gfx::Size size;
for (auto& mode : info.display_modes()) {
- if (mode.size.GetArea() > size.GetArea())
- size = mode.size;
+ if (mode->size().GetArea() > size.GetArea())
+ size = mode->size();
}
return size;
}
@@ -347,8 +348,9 @@ void DisplayManager::SetDisplayRotation(
}
}
-bool DisplayManager::SetDisplayMode(int64_t display_id,
- const DisplayMode& display_mode) {
+bool DisplayManager::SetDisplayMode(
+ int64_t display_id,
+ const scoped_refptr<DisplayMode>& display_mode) {
bool change_ui_scale = GetDisplayIdForUIScaling() == display_id;
DisplayInfoList display_info_list;
@@ -360,23 +362,24 @@ bool DisplayManager::SetDisplayMode(int64_t display_id,
auto iter = FindDisplayMode(info, display_mode);
if (iter == info.display_modes().end()) {
LOG(WARNING) << "Unsupported display mode was requested:"
- << "size=" << display_mode.size.ToString()
- << ", ui scale=" << display_mode.ui_scale
- << ", scale fator=" << display_mode.device_scale_factor;
+ << "size=" << display_mode->size().ToString()
+ << ", ui scale=" << display_mode->ui_scale()
+ << ", scale factor="
+ << display_mode->device_scale_factor();
return false;
}
if (change_ui_scale) {
- if (info.configured_ui_scale() == display_mode.ui_scale)
+ if (info.configured_ui_scale() == display_mode->ui_scale())
return true;
- info.set_configured_ui_scale(display_mode.ui_scale);
+ info.set_configured_ui_scale(display_mode->ui_scale());
display_property_changed = true;
} else {
display_modes_[display_id] = *iter;
- if (info.bounds_in_native().size() != display_mode.size)
+ if (info.bounds_in_native().size() != display_mode->size())
resolution_changed = true;
- if (info.device_scale_factor() != display_mode.device_scale_factor) {
- info.set_device_scale_factor(display_mode.device_scale_factor);
+ if (info.device_scale_factor() != display_mode->device_scale_factor()) {
+ info.set_device_scale_factor(display_mode->device_scale_factor());
display_property_changed = true;
}
}
@@ -428,16 +431,17 @@ void DisplayManager::RegisterDisplayProperty(
DCHECK(!display::Display::IsInternalDisplayId(display_id));
// Default refresh rate, until OnNativeDisplaysChanged() updates us with the
// actual display info, is 60 Hz.
- DisplayMode mode(resolution_in_pixels, 60.0f, false, false);
- mode.device_scale_factor = device_scale_factor;
+ scoped_refptr<DisplayMode> mode = new DisplayMode(
+ resolution_in_pixels, 60.0f, false, false, 1.0, device_scale_factor);
display_modes_[display_id] = mode;
}
}
-DisplayMode DisplayManager::GetActiveModeForDisplayId(
+scoped_refptr<DisplayMode> DisplayManager::GetActiveModeForDisplayId(
int64_t display_id) const {
- DisplayMode selected_mode;
- if (GetSelectedModeForDisplayId(display_id, &selected_mode))
+ scoped_refptr<DisplayMode> selected_mode(
+ GetSelectedModeForDisplayId(display_id));
+ if (selected_mode)
return selected_mode;
// If 'selected' mode is empty, it should return the default mode. This means
@@ -449,10 +453,10 @@ DisplayMode DisplayManager::GetActiveModeForDisplayId(
for (auto& mode : info.display_modes()) {
if (GetDisplayIdForUIScaling() == display_id) {
- if (info.configured_ui_scale() == mode.ui_scale)
- return mode;
- } else if (mode.native) {
- return mode;
+ if (info.configured_ui_scale() == mode->ui_scale())
+ return mode.get();
+ } else if (mode->native()) {
+ return mode.get();
}
}
return selected_mode;
@@ -469,13 +473,13 @@ void DisplayManager::RegisterDisplayRotationProperties(
delegate_->PostDisplayConfigurationChange();
}
-bool DisplayManager::GetSelectedModeForDisplayId(int64_t id,
- DisplayMode* mode_out) const {
- std::map<int64_t, DisplayMode>::const_iterator iter = display_modes_.find(id);
+scoped_refptr<DisplayMode> DisplayManager::GetSelectedModeForDisplayId(
+ int64_t id) const {
+ std::map<int64_t, scoped_refptr<DisplayMode>>::const_iterator iter =
+ display_modes_.find(id);
if (iter == display_modes_.end())
- return false;
- *mode_out = iter->second;
- return true;
+ return scoped_refptr<DisplayMode>();
+ return iter->second;
}
bool DisplayManager::IsDisplayUIScalingEnabled() const {
@@ -569,11 +573,11 @@ void DisplayManager::OnNativeDisplaysChanged(
new_display_info_list.push_back(*iter);
}
- DisplayMode new_mode;
- new_mode.size = iter->bounds_in_native().size();
- new_mode.device_scale_factor = iter->device_scale_factor();
- new_mode.ui_scale = iter->configured_ui_scale();
- const std::vector<DisplayMode>& display_modes = iter->display_modes();
+ scoped_refptr<DisplayMode> new_mode(new DisplayMode(
+ iter->bounds_in_native().size(), 0.0 /* refresh rate */,
+ false /* interlaced */, false /* native */, iter->configured_ui_scale(),
+ iter->device_scale_factor()));
+ const DisplayInfo::DisplayModeList& display_modes = iter->display_modes();
// This is empty the displays are initialized from InitFromCommandLine.
if (display_modes.empty())
continue;
@@ -1125,7 +1129,7 @@ void DisplayManager::CreateSoftwareMirroringDisplayInfo(
}
}
- std::vector<DisplayMode> display_mode_list;
+ DisplayInfo::DisplayModeList display_mode_list;
std::set<std::pair<float, float>> dsf_scale_list;
// 2nd Pass. Compute the unified display size.
@@ -1145,22 +1149,28 @@ void DisplayManager::CreateSoftwareMirroringDisplayInfo(
DisplayInfo info(kUnifiedDisplayId, "Unified Desktop", false);
- DisplayMode native_mode(unified_bounds.size(), 60.0f, false, true);
- std::vector<DisplayMode> modes =
+ scoped_refptr<DisplayMode> native_mode(
+ new DisplayMode(unified_bounds.size(), 60.0f, false, true, 1.0, 1.0));
+ DisplayInfo::DisplayModeList modes =
CreateUnifiedDisplayModeList(native_mode, dsf_scale_list);
// Find the default mode.
auto iter = std::find_if(
modes.begin(), modes.end(),
- [default_height,
- default_device_scale_factor](const DisplayMode& mode) {
- return mode.size.height() == default_height &&
- mode.device_scale_factor == default_device_scale_factor;
+ [default_height, default_device_scale_factor](
+ const scoped_refptr<DisplayMode>& mode) {
+ return mode->size().height() == default_height &&
+ mode->device_scale_factor() == default_device_scale_factor;
});
- iter->native = true;
+
+ scoped_refptr<DisplayMode> dm(*iter);
+ *iter = make_scoped_refptr(new DisplayMode(
+ dm->size(), dm->refresh_rate(), dm->is_interlaced(),
+ true /* native */, dm->ui_scale(), dm->device_scale_factor()));
+
info.SetDisplayModes(modes);
- info.set_device_scale_factor(iter->device_scale_factor);
- info.SetBounds(gfx::Rect(iter->size));
+ info.set_device_scale_factor(dm->device_scale_factor());
+ info.SetBounds(gfx::Rect(dm->size()));
// Forget the configured resolution if the original unified
// desktop resolution has changed.
@@ -1172,11 +1182,11 @@ void DisplayManager::CreateSoftwareMirroringDisplayInfo(
// 3rd Pass. Set the selected mode, then recompute the mirroring
// display size.
- DisplayMode mode;
- if (GetSelectedModeForDisplayId(kUnifiedDisplayId, &mode) &&
- FindDisplayMode(info, mode) != info.display_modes().end()) {
- info.set_device_scale_factor(mode.device_scale_factor);
- info.SetBounds(gfx::Rect(mode.size));
+ scoped_refptr<DisplayMode> mode =
+ GetSelectedModeForDisplayId(kUnifiedDisplayId);
+ if (mode && FindDisplayMode(info, mode) != info.display_modes().end()) {
+ info.set_device_scale_factor(mode->device_scale_factor());
+ info.SetBounds(gfx::Rect(mode->size()));
} else {
display_modes_.erase(kUnifiedDisplayId);
}
@@ -1209,8 +1219,8 @@ display::Display* DisplayManager::FindDisplayForId(int64_t id) {
[id](const display::Display& display) { return display.id() == id; });
if (iter != active_display_list_.end())
return &(*iter);
- // TODO(oshima): This happens when a windows in unified desktop have
- // been moved to normal window. Fix this.
+ // TODO(oshima): This happens when windows in unified desktop have
+ // been moved to a normal window. Fix this.
if (id != kUnifiedDisplayId)
DLOG(WARNING) << "Could not find display:" << id;
return nullptr;

Powered by Google App Engine
This is Rietveld 408576698