summaryrefslogtreecommitdiffstats
path: root/chrome/browser/metrics
diff options
context:
space:
mode:
authorderat@chromium.org <derat@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-15 15:46:26 +0000
committerderat@chromium.org <derat@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-15 15:46:26 +0000
commite9c0ba7ac5987a7cc3ce2bfa2c8441862b77d258 (patch)
treef35d5e9d597b1719dac859e47d38e4458cbccc3f /chrome/browser/metrics
parent32d792580c3685b549541109bb294e7a6f5b6def (diff)
downloadchromium_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.h24
-rw-r--r--chrome/browser/metrics/display_utils_mac.cc51
-rw-r--r--chrome/browser/metrics/display_utils_posix.cc28
-rw-r--r--chrome/browser/metrics/display_utils_unittest.cc25
-rw-r--r--chrome/browser/metrics/display_utils_win.cc21
-rw-r--r--chrome/browser/metrics/metrics_log.cc5
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());
}
{