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

Side by Side Diff: ash/display/display_info.cc

Issue 1251573006: Cleanup: Enable 125DSFForUIScaling on by default (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 5 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 unified diff | Download patch
« no previous file with comments | « ash/display/display_info.h ('k') | ash/display/display_info_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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 <stdio.h> 5 #include <stdio.h>
6 #include <string> 6 #include <string>
7 #include <vector> 7 #include <vector>
8 8
9 #include "ash/display/display_info.h" 9 #include "ash/display/display_info.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/strings/string_number_conversions.h" 11 #include "base/strings/string_number_conversions.h"
12 #include "base/strings/string_split.h" 12 #include "base/strings/string_split.h"
13 #include "base/strings/string_util.h" 13 #include "base/strings/string_util.h"
14 #include "base/strings/stringprintf.h" 14 #include "base/strings/stringprintf.h"
15 #include "ui/gfx/display.h" 15 #include "ui/gfx/display.h"
16 #include "ui/gfx/geometry/size_conversions.h" 16 #include "ui/gfx/geometry/size_conversions.h"
17 #include "ui/gfx/geometry/size_f.h" 17 #include "ui/gfx/geometry/size_f.h"
18 18
19 #if defined(OS_WIN) 19 #if defined(OS_WIN)
20 #include "ui/aura/window_tree_host.h" 20 #include "ui/aura/window_tree_host.h"
21 #include "ui/gfx/win/dpi.h" 21 #include "ui/gfx/win/dpi.h"
22 #endif 22 #endif
23 23
24 namespace ash { 24 namespace ash {
25 namespace { 25 namespace {
26 26
27 bool use_125_dsf_for_ui_scaling = false; 27 bool use_125_dsf_for_ui_scaling = true;
28 28
29 // Check the content of |spec| and fill |bounds| and |device_scale_factor|. 29 // Check the content of |spec| and fill |bounds| and |device_scale_factor|.
30 // Returns true when |bounds| is found. 30 // Returns true when |bounds| is found.
31 bool GetDisplayBounds( 31 bool GetDisplayBounds(
32 const std::string& spec, gfx::Rect* bounds, float* device_scale_factor) { 32 const std::string& spec, gfx::Rect* bounds, float* device_scale_factor) {
33 int width = 0; 33 int width = 0;
34 int height = 0; 34 int height = 0;
35 int x = 0; 35 int x = 0;
36 int y = 0; 36 int y = 0;
37 if (sscanf(spec.c_str(), "%dx%d*%f", 37 if (sscanf(spec.c_str(), "%dx%d*%f",
(...skipping 16 matching lines...) Expand all
54 gfx::Size size_a_dip = a.GetSizeInDIP(is_internal); 54 gfx::Size size_a_dip = a.GetSizeInDIP(is_internal);
55 gfx::Size size_b_dip = b.GetSizeInDIP(is_internal); 55 gfx::Size size_b_dip = b.GetSizeInDIP(is_internal);
56 if (size_a_dip.GetArea() == size_b_dip.GetArea()) 56 if (size_a_dip.GetArea() == size_b_dip.GetArea())
57 return (a.refresh_rate > b.refresh_rate); 57 return (a.refresh_rate > b.refresh_rate);
58 return (size_a_dip.GetArea() < size_b_dip.GetArea()); 58 return (size_a_dip.GetArea() < size_b_dip.GetArea());
59 } 59 }
60 60
61 bool is_internal; 61 bool is_internal;
62 }; 62 };
63 63
64 bool IsInternalDisplayId(int64 id) {
65 return id == gfx::Display::InternalDisplayId() &&
66 id != gfx::Display::kInvalidDisplayID;
67 }
68
64 } // namespace 69 } // namespace
65 70
66 DisplayMode::DisplayMode() 71 DisplayMode::DisplayMode()
67 : refresh_rate(0.0f), 72 : refresh_rate(0.0f),
68 interlaced(false), 73 interlaced(false),
69 native(false), 74 native(false),
70 ui_scale(1.0f), 75 ui_scale(1.0f),
71 device_scale_factor(1.0f) {} 76 device_scale_factor(1.0f) {}
72 77
73 DisplayMode::DisplayMode(const gfx::Size& size, 78 DisplayMode::DisplayMode(const gfx::Size& size,
74 float refresh_rate, 79 float refresh_rate,
75 bool interlaced, 80 bool interlaced,
76 bool native) 81 bool native)
77 : size(size), 82 : size(size),
78 refresh_rate(refresh_rate), 83 refresh_rate(refresh_rate),
79 interlaced(interlaced), 84 interlaced(interlaced),
80 native(native), 85 native(native),
81 ui_scale(1.0f), 86 ui_scale(1.0f),
82 device_scale_factor(1.0f) {} 87 device_scale_factor(1.0f) {}
83 88
84 gfx::Size DisplayMode::GetSizeInDIP(bool is_internal) const { 89 gfx::Size DisplayMode::GetSizeInDIP(bool is_internal) const {
85 gfx::SizeF size_dip(size); 90 gfx::SizeF size_dip(size);
86 size_dip.Scale(ui_scale); 91 size_dip.Scale(ui_scale);
87 // DSF=1.25 is special. The screen is drawn with DSF=1.25 in some mode but it 92 // DSF=1.25 is special on internal display. The screen is drawn with DSF=1.25
88 // doesn't affect the screen size computation. 93 // but it doesn't affect the screen size computation.
89 if (!(use_125_dsf_for_ui_scaling && is_internal) || 94 if (use_125_dsf_for_ui_scaling && is_internal && device_scale_factor == 1.25f)
90 device_scale_factor != 1.25f) { 95 return gfx::ToFlooredSize(size_dip);
91 size_dip.Scale(1.0f / device_scale_factor); 96 size_dip.Scale(1.0f / device_scale_factor);
92 }
93 return gfx::ToFlooredSize(size_dip); 97 return gfx::ToFlooredSize(size_dip);
94 } 98 }
95 99
96 bool DisplayMode::IsEquivalent(const DisplayMode& other) const { 100 bool DisplayMode::IsEquivalent(const DisplayMode& other) const {
97 const float kEpsilon = 0.0001f; 101 const float kEpsilon = 0.0001f;
98 return size == other.size && 102 return size == other.size &&
99 std::abs(ui_scale - other.ui_scale) < kEpsilon && 103 std::abs(ui_scale - other.ui_scale) < kEpsilon &&
100 std::abs(device_scale_factor - other.device_scale_factor) < kEpsilon; 104 std::abs(device_scale_factor - other.device_scale_factor) < kEpsilon;
101 } 105 }
102 106
103 // satic 107 // satic
104 DisplayInfo DisplayInfo::CreateFromSpec(const std::string& spec) { 108 DisplayInfo DisplayInfo::CreateFromSpec(const std::string& spec) {
105 return CreateFromSpecWithID(spec, gfx::Display::kInvalidDisplayID); 109 return CreateFromSpecWithID(spec, gfx::Display::kInvalidDisplayID);
106 } 110 }
107 111
108 // static 112 // static
109 void DisplayInfo::SetUse125DSFForUIScaling(bool enable) {
110 use_125_dsf_for_ui_scaling = enable;
111 }
112
113 // static
114 DisplayInfo DisplayInfo::CreateFromSpecWithID(const std::string& spec, 113 DisplayInfo DisplayInfo::CreateFromSpecWithID(const std::string& spec,
115 int64 id) { 114 int64 id) {
116 // Use larger than max int to catch overflow early. 115 // Use larger than max int to catch overflow early.
117 static int64 synthesized_display_id = 2200000000LL; 116 static int64 synthesized_display_id = 2200000000LL;
118 117
119 #if defined(OS_WIN) 118 #if defined(OS_WIN)
120 gfx::Rect bounds_in_native(aura::WindowTreeHost::GetNativeScreenSize()); 119 gfx::Rect bounds_in_native(aura::WindowTreeHost::GetNativeScreenSize());
121 #else 120 #else
122 // Default bounds for a display. 121 // Default bounds for a display.
123 const int kDefaultHostWindowX = 200; 122 const int kDefaultHostWindowX = 200;
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 int height = bounds_in_native.height() / device_scale_factor / 40; 223 int height = bounds_in_native.height() / device_scale_factor / 40;
225 display_info.SetOverscanInsets(gfx::Insets(height, width, height, width)); 224 display_info.SetOverscanInsets(gfx::Insets(height, width, height, width));
226 display_info.UpdateDisplaySize(); 225 display_info.UpdateDisplaySize();
227 } 226 }
228 227
229 DVLOG(1) << "DisplayInfoFromSpec info=" << display_info.ToString() 228 DVLOG(1) << "DisplayInfoFromSpec info=" << display_info.ToString()
230 << ", spec=" << spec; 229 << ", spec=" << spec;
231 return display_info; 230 return display_info;
232 } 231 }
233 232
233 // static
234 void DisplayInfo::SetUse125DSFForUIScalingForTest(bool enable) {
235 use_125_dsf_for_ui_scaling = enable;
236 }
237
234 DisplayInfo::DisplayInfo() 238 DisplayInfo::DisplayInfo()
235 : id_(gfx::Display::kInvalidDisplayID), 239 : id_(gfx::Display::kInvalidDisplayID),
236 has_overscan_(false), 240 has_overscan_(false),
237 touch_support_(gfx::Display::TOUCH_SUPPORT_UNKNOWN), 241 touch_support_(gfx::Display::TOUCH_SUPPORT_UNKNOWN),
238 touch_device_id_(0), 242 touch_device_id_(0),
239 device_scale_factor_(1.0f), 243 device_scale_factor_(1.0f),
240 overscan_insets_in_dip_(0, 0, 0, 0), 244 overscan_insets_in_dip_(0, 0, 0, 0),
241 configured_ui_scale_(1.0f), 245 configured_ui_scale_(1.0f),
242 native_(false), 246 native_(false),
243 is_aspect_preserving_scaling_(false), 247 is_aspect_preserving_scaling_(false),
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 } 318 }
315 } 319 }
316 320
317 void DisplayInfo::SetBounds(const gfx::Rect& new_bounds_in_native) { 321 void DisplayInfo::SetBounds(const gfx::Rect& new_bounds_in_native) {
318 bounds_in_native_ = new_bounds_in_native; 322 bounds_in_native_ = new_bounds_in_native;
319 size_in_pixel_ = new_bounds_in_native.size(); 323 size_in_pixel_ = new_bounds_in_native.size();
320 UpdateDisplaySize(); 324 UpdateDisplaySize();
321 } 325 }
322 326
323 float DisplayInfo::GetEffectiveDeviceScaleFactor() const { 327 float DisplayInfo::GetEffectiveDeviceScaleFactor() const {
324 if (Use125DSFRorUIScaling() && device_scale_factor_ == 1.25f) 328 if (Use125DSFForUIScaling() && device_scale_factor_ == 1.25f)
325 return (configured_ui_scale_ == 0.8f) ? 1.25f : 1.0f; 329 return (configured_ui_scale_ == 0.8f) ? 1.25f : 1.0f;
326 if (device_scale_factor_ == configured_ui_scale_) 330 if (device_scale_factor_ == configured_ui_scale_)
327 return 1.0f; 331 return 1.0f;
328 return device_scale_factor_; 332 return device_scale_factor_;
329 } 333 }
330 334
331 float DisplayInfo::GetEffectiveUIScale() const { 335 float DisplayInfo::GetEffectiveUIScale() const {
332 if (Use125DSFRorUIScaling() && device_scale_factor_ == 1.25f) 336 if (Use125DSFForUIScaling() && device_scale_factor_ == 1.25f)
333 return (configured_ui_scale_ == 0.8f) ? 1.0f : configured_ui_scale_; 337 return (configured_ui_scale_ == 0.8f) ? 1.0f : configured_ui_scale_;
334 if (device_scale_factor_ == configured_ui_scale_) 338 if (device_scale_factor_ == configured_ui_scale_)
335 return 1.0f; 339 return 1.0f;
336 return configured_ui_scale_; 340 return configured_ui_scale_;
337 } 341 }
338 342
339 void DisplayInfo::UpdateDisplaySize() { 343 void DisplayInfo::UpdateDisplaySize() {
340 size_in_pixel_ = bounds_in_native_.size(); 344 size_in_pixel_ = bounds_in_native_.size();
341 if (!overscan_insets_in_dip_.empty()) { 345 if (!overscan_insets_in_dip_.empty()) {
342 gfx::Insets insets_in_pixel = 346 gfx::Insets insets_in_pixel =
(...skipping 17 matching lines...) Expand all
360 } 364 }
361 365
362 gfx::Insets DisplayInfo::GetOverscanInsetsInPixel() const { 366 gfx::Insets DisplayInfo::GetOverscanInsetsInPixel() const {
363 return overscan_insets_in_dip_.Scale(device_scale_factor_); 367 return overscan_insets_in_dip_.Scale(device_scale_factor_);
364 } 368 }
365 369
366 void DisplayInfo::SetDisplayModes( 370 void DisplayInfo::SetDisplayModes(
367 const std::vector<DisplayMode>& display_modes) { 371 const std::vector<DisplayMode>& display_modes) {
368 display_modes_ = display_modes; 372 display_modes_ = display_modes;
369 std::sort(display_modes_.begin(), display_modes_.end(), 373 std::sort(display_modes_.begin(), display_modes_.end(),
370 DisplayModeSorter(id_ == gfx::Display::InternalDisplayId())); 374 DisplayModeSorter(IsInternalDisplayId(id_)));
371 } 375 }
372 376
373 gfx::Size DisplayInfo::GetNativeModeSize() const { 377 gfx::Size DisplayInfo::GetNativeModeSize() const {
374 for (size_t i = 0; i < display_modes_.size(); ++i) { 378 for (size_t i = 0; i < display_modes_.size(); ++i) {
375 if (display_modes_[i].native) 379 if (display_modes_[i].native)
376 return display_modes_[i].size; 380 return display_modes_[i].size;
377 } 381 }
378 382
379 return gfx::Size(); 383 return gfx::Size();
380 } 384 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 color_profile_ = profile; 426 color_profile_ = profile;
423 } 427 }
424 428
425 bool DisplayInfo::IsColorProfileAvailable( 429 bool DisplayInfo::IsColorProfileAvailable(
426 ui::ColorCalibrationProfile profile) const { 430 ui::ColorCalibrationProfile profile) const {
427 return std::find(available_color_profiles_.begin(), 431 return std::find(available_color_profiles_.begin(),
428 available_color_profiles_.end(), 432 available_color_profiles_.end(),
429 profile) != available_color_profiles_.end(); 433 profile) != available_color_profiles_.end();
430 } 434 }
431 435
432 bool DisplayInfo::Use125DSFRorUIScaling() const { 436 bool DisplayInfo::Use125DSFForUIScaling() const {
433 return use_125_dsf_for_ui_scaling && id_ == gfx::Display::InternalDisplayId(); 437 return use_125_dsf_for_ui_scaling && IsInternalDisplayId(id_);
434 } 438 }
435 439
436 } // namespace ash 440 } // namespace ash
OLDNEW
« no previous file with comments | « ash/display/display_info.h ('k') | ash/display/display_info_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698