summaryrefslogtreecommitdiffstats
path: root/ash/display
diff options
context:
space:
mode:
authoroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-23 06:11:37 +0000
committeroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-23 06:11:37 +0000
commit9466aa7bd901bb8387d0b05b0b2d8f84bbc9c63b (patch)
tree2518a318f2b68518057b08b8b537934f49ecd2fe /ash/display
parent2832876e1c731e885013a6a41d9d80f5f45206ca (diff)
downloadchromium_src-9466aa7bd901bb8387d0b05b0b2d8f84bbc9c63b.zip
chromium_src-9466aa7bd901bb8387d0b05b0b2d8f84bbc9c63b.tar.gz
chromium_src-9466aa7bd901bb8387d0b05b0b2d8f84bbc9c63b.tar.bz2
Revert 195733 "Enable virtual resolution on low DPI displays"
>Add debug shortcuts that toggles options to shows paint rects, debug borders and fps counters. >Cleanup: Separate desktop shortcuts which are useful only on linux desktop, and debug shortcuts. > >BUG=227375 >Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=195733 TBR=oshima@chromium.org BUG= Review URL: https://codereview.chromium.org/14263025 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@195737 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash/display')
-rw-r--r--ash/display/display_controller_unittest.cc16
-rw-r--r--ash/display/display_info.cc7
-rw-r--r--ash/display/display_manager.cc113
-rw-r--r--ash/display/display_manager.h2
-rw-r--r--ash/display/display_manager_unittest.cc48
5 files changed, 65 insertions, 121 deletions
diff --git a/ash/display/display_controller_unittest.cc b/ash/display/display_controller_unittest.cc
index 84f615f..c9ecff4 100644
--- a/ash/display/display_controller_unittest.cc
+++ b/ash/display/display_controller_unittest.cc
@@ -319,16 +319,14 @@ TEST_F(DisplayControllerTest, BoundsUpdated) {
display_manager->SetDisplayRotation(primary_id, gfx::Display::ROTATE_90);
EXPECT_EQ(0, observer.CountAndReset());
- // UI scale is eanbled only on internal display.
+ // UI scale is eanbled only on internal display (=1st display in unittest).
int64 secondary_id = GetSecondaryDisplay().id();
gfx::Display::SetInternalDisplayId(secondary_id);
- display_manager->SetDisplayUIScale(secondary_id, 1.125f);
- EXPECT_EQ(1, observer.CountAndReset());
- display_manager->SetDisplayUIScale(secondary_id, 1.125f);
- EXPECT_EQ(0, observer.CountAndReset());
- display_manager->SetDisplayUIScale(primary_id, 1.125f);
+ display_manager->SetDisplayUIScale(secondary_id, 1.25f);
EXPECT_EQ(0, observer.CountAndReset());
- display_manager->SetDisplayUIScale(primary_id, 1.125f);
+ display_manager->SetDisplayUIScale(primary_id, 1.25f);
+ EXPECT_EQ(1, observer.CountAndReset());
+ display_manager->SetDisplayUIScale(primary_id, 1.25f);
EXPECT_EQ(0, observer.CountAndReset());
}
@@ -819,8 +817,6 @@ TEST_F(DisplayControllerTest, MAYBE_ScaleRootWindow) {
UpdateDisplay("600x400*2@1.5,500x300");
gfx::Display display1 = Shell::GetScreen()->GetPrimaryDisplay();
- gfx::Display::SetInternalDisplayId(display1.id());
-
gfx::Display display2 = ScreenAsh::GetSecondaryDisplay();
Shell::RootWindowList root_windows = Shell::GetAllRootWindows();
EXPECT_EQ("0,0 450x300", display1.bounds().ToString());
@@ -835,7 +831,7 @@ TEST_F(DisplayControllerTest, MAYBE_ScaleRootWindow) {
internal::DisplayManager* display_manager =
Shell::GetInstance()->display_manager();
- display_manager->SetDisplayUIScale(display1.id(), 1.25f);
+ display_manager->SetDisplayUIScale(display1.id(), 1.25);
display1 = Shell::GetScreen()->GetPrimaryDisplay();
display2 = ScreenAsh::GetSecondaryDisplay();
EXPECT_EQ("0,0 375x250", display1.bounds().ToString());
diff --git a/ash/display/display_info.cc b/ash/display/display_info.cc
index fa72bdc..2b8fb54 100644
--- a/ash/display/display_info.cc
+++ b/ash/display/display_info.cc
@@ -148,6 +148,13 @@ void DisplayInfo::Copy(const DisplayInfo& native_info) {
rotation_ = native_info.rotation_;
ui_scale_ = native_info.ui_scale_;
}
+ // It makes little sense to scale beyond the original
+ // resolution. This guard is to protect applying
+ // ui_scale to an external display whose DPI has changed
+ // from 2.0 to 1.0 for some reason.
+ if (ui_scale_ > device_scale_factor_)
+ ui_scale_ = 1.0f;
+
// Don't copy insets as it may be given by preference. |rotation_|
// is treated as a native so that it can be specified in
// |CreateFromSpec|.
diff --git a/ash/display/display_manager.cc b/ash/display/display_manager.cc
index bb5a148..3e38236 100644
--- a/ash/display/display_manager.cc
+++ b/ash/display/display_manager.cc
@@ -4,7 +4,6 @@
#include "ash/display/display_manager.h"
-#include <cmath>
#include <set>
#include <string>
#include <vector>
@@ -56,13 +55,11 @@ typedef std::vector<DisplayInfo> DisplayInfoList;
namespace {
-// List of value UI Scale values. Scales for 2x are equivalent to 640,
-// 800, 1024, 1280, 1440, 1600 and 1920 pixel width respectively on
-// 2560 pixel width 2x density display. Please see crbug.com/233375
-// for the full list of resolutions.
-const float kUIScalesFor2x[] = {0.5f, 0.625f, 0.8f, 1.0f, 1.125f, 1.25f, 1.5f};
-const float kUIScalesFor1280[] = {0.5f, 0.625f, 0.8f, 1.0f, 1.125f };
-const float kUIScalesFor1366[] = {0.5f, 0.6f, 0.75f, 1.0f, 1.125f };
+// List of value UI Scale values. These scales are equivalent to 640, 800, 1024,
+// 1280, 1440, 1600 and 1920 pixel width respectively on 2560 pixel width 2x
+// density display.
+const float kUIScales[] = {0.5f, 0.625f, 0.8f, 1.0f, 1.125f, 1.25f, 1.5f};
+const size_t kUIScaleTableSize = arraysize(kUIScales);
struct DisplaySortFunctor {
bool operator()(const gfx::Display& a, const gfx::Display& b) {
@@ -76,47 +73,19 @@ struct DisplayInfoSortFunctor {
}
};
-struct ScaleComparator {
- ScaleComparator(float s) : scale(s) {}
-
- bool operator()(float s) const {
- const float kEpsilon = 0.0001f;
- return std::abs(scale - s) < kEpsilon;
- }
- float scale;
-};
-
-std::vector<float> GetScalesForDisplay(const DisplayInfo& info) {
- std::vector<float> ret;
- if (info.device_scale_factor() == 2.0f) {
- ret.assign(kUIScalesFor2x, kUIScalesFor2x + arraysize(kUIScalesFor2x));
- return ret;
- }
- switch (info.bounds_in_pixel().width()) {
- case 1280:
- ret.assign(kUIScalesFor1280,
- kUIScalesFor1280 + arraysize(kUIScalesFor1280));
- break;
- case 1366:
- ret.assign(kUIScalesFor1366,
- kUIScalesFor1366 + arraysize(kUIScalesFor1366));
- break;
- default:
- ret.assign(kUIScalesFor1280,
- kUIScalesFor1280 + arraysize(kUIScalesFor1280));
-#if defined(OS_CHROMEOS)
- if (base::chromeos::IsRunningOnChromeOS())
- NOTREACHED() << "Unknown resolution:" << info.ToString();
-#endif
- }
- return ret;
-}
-
gfx::Display& GetInvalidDisplay() {
static gfx::Display* invalid_display = new gfx::Display();
return *invalid_display;
}
+bool IsValidUIScale(float scale) {
+ for (size_t i = 0; i < kUIScaleTableSize; ++i) {
+ if (kUIScales[i] == scale)
+ return true;
+ }
+ return false;
+}
+
} // namespace
using aura::RootWindow;
@@ -153,16 +122,14 @@ void DisplayManager::ToggleDisplayScaleFactor() {
}
// static
-float DisplayManager::GetNextUIScale(const DisplayInfo& info, bool up) {
- float scale = info.ui_scale();
- std::vector<float> scales = GetScalesForDisplay(info);
- for (size_t i = 0; i < scales.size(); ++i) {
- if (ScaleComparator(scales[i])(scale)) {
- if (up && i != scales.size() - 1)
- return scales[i + 1];
+float DisplayManager::GetNextUIScale(float scale, bool up) {
+ for (size_t i = 0; i < kUIScaleTableSize; ++i) {
+ if (kUIScales[i] == scale) {
+ if (up && i != kUIScaleTableSize -1)
+ return kUIScales[i + 1];
if (!up && i != 0)
- return scales[i - 1];
- return scales[i];
+ return kUIScales[i - 1];
+ return kUIScales[i];
}
}
// Fallback to 1.0f if the |scale| wasn't in the list.
@@ -254,10 +221,8 @@ void DisplayManager::SetDisplayRotation(int64 display_id,
void DisplayManager::SetDisplayUIScale(int64 display_id,
float ui_scale) {
- if (!IsDisplayUIScalingEnabled() ||
- gfx::Display::InternalDisplayId() != display_id) {
+ if (!IsDisplayUIScalingEnabled() || !IsValidUIScale(ui_scale))
return;
- }
DisplayInfoList display_info_list;
for (DisplayList::const_iterator iter = displays_.begin();
@@ -266,12 +231,6 @@ void DisplayManager::SetDisplayUIScale(int64 display_id,
if (info.id() == display_id) {
if (info.ui_scale() == ui_scale)
return;
- std::vector<float> scales = GetScalesForDisplay(info);
- ScaleComparator comparator(ui_scale);
- if (std::find_if(scales.begin(), scales.end(), comparator) ==
- scales.end()) {
- return;
- }
info.set_ui_scale(ui_scale);
}
display_info_list.push_back(info);
@@ -290,8 +249,7 @@ void DisplayManager::RegisterDisplayProperty(
}
display_info_[display_id].set_rotation(rotation);
- // Just in case the preference file was corrupted.
- if (0.5f <= ui_scale && ui_scale <= 2.0f)
+ if (IsValidUIScale(ui_scale))
display_info_[display_id].set_ui_scale(ui_scale);
if (overscan_insets)
display_info_[display_id].SetOverscanInsets(true, *overscan_insets);
@@ -628,10 +586,15 @@ void DisplayManager::OnRootWindowResized(const aura::RootWindow* root,
int64 DisplayManager::GetDisplayIdForUIScaling() const {
// UI Scaling is effective only on internal display.
int64 display_id = gfx::Display::InternalDisplayId();
-#if defined(OS_WIN)
+#if defined(OS_CHROMEOS)
+ // On linux desktop, allow ui scalacing on the first dislpay.
+ if (!base::chromeos::IsRunningOnChromeOS())
+ display_id = first_display_id();
+#elif defined(OS_WIN)
display_id = first_display_id();
#endif
- return display_id;
+ return GetDisplayForId(display_id).device_scale_factor() == 2.0f ?
+ display_id : gfx::Display::kInvalidDisplayID;
}
void DisplayManager::Init() {
@@ -647,9 +610,6 @@ void DisplayManager::Init() {
if (displays_.empty())
AddDisplayFromSpec(std::string() /* default */);
first_display_id_ = displays_[0].id();
- CommandLine* command_line = CommandLine::ForCurrentProcess();
- if (command_line->HasSwitch(switches::kAshUseFirstDisplayAsInternal))
- gfx::Display::SetInternalDisplayId(first_display_id_);
num_connected_displays_ = displays_.size();
}
@@ -721,6 +681,21 @@ void DisplayManager::InsertAndUpdateDisplayInfo(const DisplayInfo& new_info) {
display_info_[new_info.id()] = new_info;
display_info_[new_info.id()].set_native(false);
}
+ bool on_chromeos = false;
+#if defined(OS_CHROMEOS)
+ on_chromeos = base::chromeos::IsRunningOnChromeOS();
+#endif
+ CommandLine* command_line = CommandLine::ForCurrentProcess();
+ if ((new_info.id() == gfx::Display::InternalDisplayId() || !on_chromeos) &&
+ command_line->HasSwitch(switches::kAshInternalDisplayUIScale)) {
+ double scale_in_double = 1.0;
+ std::string value = CommandLine::ForCurrentProcess()->
+ GetSwitchValueASCII(switches::kAshInternalDisplayUIScale);
+ if (!base::StringToDouble(value, &scale_in_double))
+ LOG(ERROR) << "Failed to parse the display scale:" << value;
+ display_info_[new_info.id()].set_ui_scale(scale_in_double);
+ }
+
display_info_[new_info.id()].UpdateDisplaySize();
}
diff --git a/ash/display/display_manager.h b/ash/display/display_manager.h
index ffd4e18..b63aec4 100644
--- a/ash/display/display_manager.h
+++ b/ash/display/display_manager.h
@@ -45,7 +45,7 @@ class ASH_EXPORT DisplayManager : public aura::RootWindowObserver {
static void ToggleDisplayScaleFactor();
// Returns next valid UI scale.
- static float GetNextUIScale(const DisplayInfo& info, bool up);
+ static float GetNextUIScale(float scale, bool up);
// When set to true, the MonitorManager calls OnDisplayBoundsChanged
// even if the display's bounds didn't change. Used to swap primary
diff --git a/ash/display/display_manager_unittest.cc b/ash/display/display_manager_unittest.cc
index 66ad123..7ddb8a5 100644
--- a/ash/display/display_manager_unittest.cc
+++ b/ash/display/display_manager_unittest.cc
@@ -714,55 +714,25 @@ TEST_F(DisplayManagerTest, Rotate) {
}
TEST_F(DisplayManagerTest, UIScale) {
- UpdateDisplay("1280x800");
+ // 1x display does not support scaling.
+ UpdateDisplay("100x200");
int64 display_id = Shell::GetScreen()->GetPrimaryDisplay().id();
- display_manager()->SetDisplayUIScale(display_id, 1.125f);
- EXPECT_EQ(1.0, GetDisplayInfoAt(0).ui_scale());
- display_manager()->SetDisplayUIScale(display_id, 0.8f);
- EXPECT_EQ(1.0f, GetDisplayInfoAt(0).ui_scale());
- display_manager()->SetDisplayUIScale(display_id, 0.75f);
- EXPECT_EQ(1.0f, GetDisplayInfoAt(0).ui_scale());
- display_manager()->SetDisplayUIScale(display_id, 0.625f);
- EXPECT_EQ(1.0f, GetDisplayInfoAt(0).ui_scale());
-
- gfx::Display::SetInternalDisplayId(display_id);
display_manager()->SetDisplayUIScale(display_id, 1.5f);
EXPECT_EQ(1.0f, GetDisplayInfoAt(0).ui_scale());
display_manager()->SetDisplayUIScale(display_id, 1.25f);
EXPECT_EQ(1.0f, GetDisplayInfoAt(0).ui_scale());
display_manager()->SetDisplayUIScale(display_id, 1.125f);
- EXPECT_EQ(1.125f, GetDisplayInfoAt(0).ui_scale());
+ EXPECT_EQ(1.0, GetDisplayInfoAt(0).ui_scale());
display_manager()->SetDisplayUIScale(display_id, 0.8f);
- EXPECT_EQ(0.8f, GetDisplayInfoAt(0).ui_scale());
- display_manager()->SetDisplayUIScale(display_id, 0.75f);
- EXPECT_EQ(0.8f, GetDisplayInfoAt(0).ui_scale());
- display_manager()->SetDisplayUIScale(display_id, 0.625f);
- EXPECT_EQ(0.625f, GetDisplayInfoAt(0).ui_scale());
- display_manager()->SetDisplayUIScale(display_id, 0.6f);
- EXPECT_EQ(0.625f, GetDisplayInfoAt(0).ui_scale());
- display_manager()->SetDisplayUIScale(display_id, 0.5f);
- EXPECT_EQ(0.5f, GetDisplayInfoAt(0).ui_scale());
-
- UpdateDisplay("1366x768");
- display_manager()->SetDisplayUIScale(display_id, 1.5f);
EXPECT_EQ(1.0f, GetDisplayInfoAt(0).ui_scale());
- display_manager()->SetDisplayUIScale(display_id, 1.25f);
- EXPECT_EQ(1.0f, GetDisplayInfoAt(0).ui_scale());
- display_manager()->SetDisplayUIScale(display_id, 1.125f);
- EXPECT_EQ(1.125f, GetDisplayInfoAt(0).ui_scale());
- display_manager()->SetDisplayUIScale(display_id, 0.8f);
- EXPECT_EQ(1.125f, GetDisplayInfoAt(0).ui_scale());
- display_manager()->SetDisplayUIScale(display_id, 0.75f);
- EXPECT_EQ(0.75f, GetDisplayInfoAt(0).ui_scale());
- display_manager()->SetDisplayUIScale(display_id, 0.6f);
- EXPECT_EQ(0.6f, GetDisplayInfoAt(0).ui_scale());
display_manager()->SetDisplayUIScale(display_id, 0.625f);
- EXPECT_EQ(0.6f, GetDisplayInfoAt(0).ui_scale());
+ EXPECT_EQ(1.0f, GetDisplayInfoAt(0).ui_scale());
display_manager()->SetDisplayUIScale(display_id, 0.5f);
- EXPECT_EQ(0.5f, GetDisplayInfoAt(0).ui_scale());
+ EXPECT_EQ(1.0f, GetDisplayInfoAt(0).ui_scale());
- UpdateDisplay("1280x850*2");
+ // 2x display supports all scales.
+ UpdateDisplay("100x200*2");
EXPECT_EQ(1.0f, GetDisplayInfoAt(0).ui_scale());
display_manager()->SetDisplayUIScale(display_id, 1.5f);
EXPECT_EQ(1.5f, GetDisplayInfoAt(0).ui_scale());
@@ -772,12 +742,8 @@ TEST_F(DisplayManagerTest, UIScale) {
EXPECT_EQ(1.125f, GetDisplayInfoAt(0).ui_scale());
display_manager()->SetDisplayUIScale(display_id, 0.8f);
EXPECT_EQ(0.8f, GetDisplayInfoAt(0).ui_scale());
- display_manager()->SetDisplayUIScale(display_id, 0.75f);
- EXPECT_EQ(0.8f, GetDisplayInfoAt(0).ui_scale());
display_manager()->SetDisplayUIScale(display_id, 0.625f);
EXPECT_EQ(0.625f, GetDisplayInfoAt(0).ui_scale());
- display_manager()->SetDisplayUIScale(display_id, 0.6f);
- EXPECT_EQ(0.625f, GetDisplayInfoAt(0).ui_scale());
display_manager()->SetDisplayUIScale(display_id, 0.5f);
EXPECT_EQ(0.5f, GetDisplayInfoAt(0).ui_scale());
}