diff options
author | oshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-23 06:11:37 +0000 |
---|---|---|
committer | oshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-23 06:11:37 +0000 |
commit | 9466aa7bd901bb8387d0b05b0b2d8f84bbc9c63b (patch) | |
tree | 2518a318f2b68518057b08b8b537934f49ecd2fe /ash/display | |
parent | 2832876e1c731e885013a6a41d9d80f5f45206ca (diff) | |
download | chromium_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.cc | 16 | ||||
-rw-r--r-- | ash/display/display_info.cc | 7 | ||||
-rw-r--r-- | ash/display/display_manager.cc | 113 | ||||
-rw-r--r-- | ash/display/display_manager.h | 2 | ||||
-rw-r--r-- | ash/display/display_manager_unittest.cc | 48 |
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()); } |