Index: chrome/browser/ui/cocoa/browser_window_controller_private.mm |
diff --git a/chrome/browser/ui/cocoa/browser_window_controller_private.mm b/chrome/browser/ui/cocoa/browser_window_controller_private.mm |
index 8dd4f36cd8f3e6637a4dc67edcc605b3db301b24..a28c8b0a966154c9280e70a32202826e6f3297df 100644 |
--- a/chrome/browser/ui/cocoa/browser_window_controller_private.mm |
+++ b/chrome/browser/ui/cocoa/browser_window_controller_private.mm |
@@ -10,6 +10,7 @@ |
#include "base/mac/mac_util.h" |
#import "base/mac/scoped_nsobject.h" |
#import "base/mac/sdk_forward_declarations.h" |
+#include "base/metrics/histogram.h" |
#include "base/prefs/pref_service.h" |
#include "base/prefs/scoped_user_pref_update.h" |
#include "chrome/browser/browser_process.h" |
@@ -50,6 +51,75 @@ |
using content::RenderWidgetHostView; |
using content::WebContents; |
+namespace { |
+ |
+// Each time the user enters fullscreen, a single histogram enumeration is |
+// recorded. There are several relevant parameters, whose values are mapped |
+// directly into individual bits of the enumeration. |
+// |
+// + Fullscreen Mechanism: The mechanism by which the window's size is changed |
+// to encompass the entire screen. Bit 0. |
+// - AppKit (value of bit: 1) |
+// - Immersive (value of bit: 0) |
+// |
+// + Primary Screen: Whether the window is located on the screen at index 0. |
+// Depending on OSX version, this has different implications for menu bar |
+// visibility. Bit 1. |
+// - Primary (value of bit: 1) |
+// - Secondary (value of bit: 0) |
+// |
+// + Displays have separate spaces: An option available in Mission Control in |
+// OSX 10.9+. Bit 2. |
+// - On (value of bit: 1) |
+// - Off (value of bit: 0) |
+// |
+// + Multiple screens: Whether the user has multiple screens. If the window is |
+// located on a secondary screen, then there must be multiple screens. Bit 3. |
+// - Yes (value of bit: 1) |
+// - No (value of bit: 0) |
+ |
+enum FullscreenMechanism { |
+ IMMERSIVE_FULLSCREEN_MECHANISM, |
+ APPKIT_FULLSCREEN_MECHANISM, |
+}; |
+ |
+enum { |
+ FULLSCREEN_MECHANISM_BIT = 0, |
+ PRIMARY_SCREEN_BIT = 1, |
+ DISPLAYS_SEPARATE_SPACES_BIT = 2, |
+ MULTIPLE_SCREENS_BIT = 3, |
+ BIT_COUNT |
+}; |
+ |
+// Emits a histogram entry indicating that |window| is being made fullscreen. |
+void RecordFullscreenHistogram(FullscreenMechanism mechanism, |
+ NSWindow* window) { |
+ NSArray* screens = [NSScreen screens]; |
+ bool primary_screen = ([[window screen] isEqual:[screens objectAtIndex:0]]); |
+ bool displays_have_separate_spaces = |
+ [NSScreen respondsToSelector:@selector(screensHaveSeparateSpaces)] && |
+ [NSScreen screensHaveSeparateSpaces]; |
+ bool multiple_screens = [screens count] > 1; |
+ |
+ int output = 0; |
+ if (mechanism == APPKIT_FULLSCREEN_MECHANISM) |
+ output += 1 << FULLSCREEN_MECHANISM_BIT; |
+ |
+ if (primary_screen) |
+ output += 1 << PRIMARY_SCREEN_BIT; |
+ |
+ if (displays_have_separate_spaces) |
+ output += 1 << DISPLAYS_SEPARATE_SPACES_BIT; |
+ |
+ if (multiple_screens) |
+ output += 1 << MULTIPLE_SCREENS_BIT; |
+ |
+ int max_output = 1 << BIT_COUNT; |
+ UMA_HISTOGRAM_ENUMERATION("OSX.Fullscreen.Enter", output, max_output); |
+} |
+ |
+} // namespace |
+ |
@implementation BrowserWindowController(Private) |
// Create the tab strip controller. |
@@ -449,6 +519,8 @@ willPositionSheet:(NSWindow*)sheet |
} |
- (void)enterImmersiveFullscreen { |
+ RecordFullscreenHistogram(IMMERSIVE_FULLSCREEN_MECHANISM, [self window]); |
+ |
// Set to NO by |-windowDidEnterFullScreen:|. |
enteringImmersiveFullscreen_ = YES; |
@@ -601,6 +673,8 @@ willPositionSheet:(NSWindow*)sheet |
} |
- (void)windowWillEnterFullScreen:(NSNotification*)notification { |
+ RecordFullscreenHistogram(APPKIT_FULLSCREEN_MECHANISM, [self window]); |
+ |
if (notification) // For System Fullscreen when non-nil. |
[self registerForContentViewResizeNotifications]; |