diff options
author | derat@chromium.org <derat@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-15 15:46:26 +0000 |
---|---|---|
committer | derat@chromium.org <derat@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-15 15:46:26 +0000 |
commit | e9c0ba7ac5987a7cc3ce2bfa2c8441862b77d258 (patch) | |
tree | f35d5e9d597b1719dac859e47d38e4458cbccc3f /chrome/browser/metrics | |
parent | 32d792580c3685b549541109bb294e7a6f5b6def (diff) | |
download | chromium_src-e9c0ba7ac5987a7cc3ce2bfa2c8441862b77d258.zip chromium_src-e9c0ba7ac5987a7cc3ce2bfa2c8441862b77d258.tar.gz chromium_src-e9c0ba7ac5987a7cc3ce2bfa2c8441862b77d258.tar.bz2 |
base: Move UI code out of SysInfo.
This moves GetPrimaryDisplayDimensions() and DisplayCount()
out of base and into a new DisplayUtils class (currently
alongside the metrics code, since that's the only place that
they're called). These methods add a GDK dependency that
prevents Chrome OS from including process_util (which
depends on SysInfo) in its libchrome library.
BUG=chromium-os:16153
TEST=moved existing unit tests
Review URL: http://codereview.chromium.org/7128001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@89194 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/metrics')
-rw-r--r-- | chrome/browser/metrics/display_utils.h | 24 | ||||
-rw-r--r-- | chrome/browser/metrics/display_utils_mac.cc | 51 | ||||
-rw-r--r-- | chrome/browser/metrics/display_utils_posix.cc | 28 | ||||
-rw-r--r-- | chrome/browser/metrics/display_utils_unittest.cc | 25 | ||||
-rw-r--r-- | chrome/browser/metrics/display_utils_win.cc | 21 | ||||
-rw-r--r-- | chrome/browser/metrics/metrics_log.cc | 5 |
6 files changed, 152 insertions, 2 deletions
diff --git a/chrome/browser/metrics/display_utils.h b/chrome/browser/metrics/display_utils.h new file mode 100644 index 0000000..c512148 --- /dev/null +++ b/chrome/browser/metrics/display_utils.h @@ -0,0 +1,24 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_METRICS_DISPLAY_UTILS_H_ +#define CHROME_BROWSER_METRICS_DISPLAY_UTILS_H_ +#pragma once + +#include "base/basictypes.h" + +class DisplayUtils { + public: + // Returns the pixel dimensions of the primary display via the + // width and height parameters. + static void GetPrimaryDisplayDimensions(int* width, int* height); + + // Returns the number of displays. + static int GetDisplayCount(); + + private: + DISALLOW_COPY_AND_ASSIGN(DisplayUtils); +}; + +#endif // CHROME_BROWSER_METRICS_DISPLAY_UTILS_H_ diff --git a/chrome/browser/metrics/display_utils_mac.cc b/chrome/browser/metrics/display_utils_mac.cc new file mode 100644 index 0000000..dd0fd30 --- /dev/null +++ b/chrome/browser/metrics/display_utils_mac.cc @@ -0,0 +1,51 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/metrics/display_utils.h" + +#include <ApplicationServices/ApplicationServices.h> + +// static +void DisplayUtils::GetPrimaryDisplayDimensions(int* width, int* height) { + CGDirectDisplayID main_display = CGMainDisplayID(); + if (width) + *width = CGDisplayPixelsWide(main_display); + if (height) + *height = CGDisplayPixelsHigh(main_display); +} + +// static +int DisplayUtils::GetDisplayCount() { + // Don't just return the number of online displays. It includes displays + // that mirror other displays, which are not desired in the count. It's + // tempting to use the count returned by CGGetActiveDisplayList, but active + // displays exclude sleeping displays, and those are desired in the count. + + // It would be ridiculous to have this many displays connected, but + // CGDirectDisplayID is just an integer, so supporting up to this many + // doesn't hurt. + CGDirectDisplayID online_displays[128]; + CGDisplayCount online_display_count = 0; + if (CGGetOnlineDisplayList(arraysize(online_displays), + online_displays, + &online_display_count) != kCGErrorSuccess) { + // 1 is a reasonable assumption. + return 1; + } + + int display_count = 0; + for (CGDisplayCount online_display_index = 0; + online_display_index < online_display_count; + ++online_display_index) { + CGDirectDisplayID online_display = online_displays[online_display_index]; + if (CGDisplayMirrorsDisplay(online_display) == kCGNullDirectDisplay) { + // If this display doesn't mirror any other, include it in the count. + // The primary display in a mirrored set will be counted, but those that + // mirror it will not be. + ++display_count; + } + } + + return display_count; +} diff --git a/chrome/browser/metrics/display_utils_posix.cc b/chrome/browser/metrics/display_utils_posix.cc new file mode 100644 index 0000000..e3f5667 --- /dev/null +++ b/chrome/browser/metrics/display_utils_posix.cc @@ -0,0 +1,28 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/metrics/display_utils.h" + +#include <gdk/gdk.h> + +#include "content/browser/browser_thread.h" + +// static +void DisplayUtils::GetPrimaryDisplayDimensions(int* width, int* height) { + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); + GdkScreen* screen = gdk_screen_get_default(); + if (width) + *width = gdk_screen_get_width(screen); + if (height) + *height = gdk_screen_get_height(screen); +} + +// static +int DisplayUtils::GetDisplayCount() { + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); + // This query is kinda bogus for Linux -- do we want number of X screens? + // The number of monitors Xinerama has? We'll just use whatever GDK uses. + GdkScreen* screen = gdk_screen_get_default(); + return gdk_screen_get_n_monitors(screen); +} diff --git a/chrome/browser/metrics/display_utils_unittest.cc b/chrome/browser/metrics/display_utils_unittest.cc new file mode 100644 index 0000000..11ef45e --- /dev/null +++ b/chrome/browser/metrics/display_utils_unittest.cc @@ -0,0 +1,25 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/message_loop.h" +#include "chrome/browser/metrics/display_utils.h" +#include "content/browser/browser_thread.h" +#include "testing/gtest/include/gtest/gtest.h" + +TEST(DisplayUtilsTest, GetPrimaryDisplayDimensions) { + MessageLoop message_loop; + BrowserThread ui_thread(BrowserThread::UI, &message_loop); + int width = 0, height = 0; + // We aren't actually testing that it's correct, just that it's sane. + DisplayUtils::GetPrimaryDisplayDimensions(&width, &height); + EXPECT_GE(width, 10); + EXPECT_GE(height, 10); +} + +TEST(DisplayUtilsTest, GetDisplayCount) { + MessageLoop message_loop; + BrowserThread ui_thread(BrowserThread::UI, &message_loop); + // We aren't actually testing that it's correct, just that it's sane. + EXPECT_GE(DisplayUtils::GetDisplayCount(), 1); +} diff --git a/chrome/browser/metrics/display_utils_win.cc b/chrome/browser/metrics/display_utils_win.cc new file mode 100644 index 0000000..5b459c8 --- /dev/null +++ b/chrome/browser/metrics/display_utils_win.cc @@ -0,0 +1,21 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/metrics/display_utils.h" + +#include <windows.h> + +// static +void DisplayUtils::GetPrimaryDisplayDimensions(int* width, int* height) { + if (width) + *width = GetSystemMetrics(SM_CXSCREEN); + + if (height) + *height = GetSystemMetrics(SM_CYSCREEN); +} + +// static +int DisplayUtils::GetDisplayCount() { + return GetSystemMetrics(SM_CMONITORS); +} diff --git a/chrome/browser/metrics/metrics_log.cc b/chrome/browser/metrics/metrics_log.cc index 20b1844..c826923 100644 --- a/chrome/browser/metrics/metrics_log.cc +++ b/chrome/browser/metrics/metrics_log.cc @@ -19,6 +19,7 @@ #include "chrome/browser/autocomplete/autocomplete.h" #include "chrome/browser/autocomplete/autocomplete_match.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/metrics/display_utils.h" #include "chrome/browser/prefs/pref_service.h" #include "chrome/common/chrome_version_info.h" #include "chrome/common/logging_chrome.h" @@ -350,10 +351,10 @@ void MetricsLog::RecordEnvironment( OPEN_ELEMENT_FOR_SCOPE("display"); int width = 0; int height = 0; - base::SysInfo::GetPrimaryDisplayDimensions(&width, &height); + DisplayUtils::GetPrimaryDisplayDimensions(&width, &height); WriteIntAttribute("xsize", width); WriteIntAttribute("ysize", height); - WriteIntAttribute("screens", base::SysInfo::DisplayCount()); + WriteIntAttribute("screens", DisplayUtils::GetDisplayCount()); } { |