Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(768)

Side by Side Diff: chrome/browser/ui/cocoa/browser_window_controller_private.mm

Issue 640053007: mac: Add metrics for AppKit Fullscreen style. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rewrite metrics. Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "chrome/browser/ui/cocoa/browser_window_controller_private.h" 5 #import "chrome/browser/ui/cocoa/browser_window_controller_private.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/mac/mac_util.h" 10 #include "base/mac/mac_util.h"
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 #include "content/public/browser/web_contents.h" 46 #include "content/public/browser/web_contents.h"
47 #import "ui/base/cocoa/focus_tracker.h" 47 #import "ui/base/cocoa/focus_tracker.h"
48 #import "ui/base/cocoa/nsview_additions.h" 48 #import "ui/base/cocoa/nsview_additions.h"
49 #include "ui/base/ui_base_types.h" 49 #include "ui/base/ui_base_types.h"
50 50
51 using content::RenderWidgetHostView; 51 using content::RenderWidgetHostView;
52 using content::WebContents; 52 using content::WebContents;
53 53
54 namespace { 54 namespace {
55 55
56 // Each time the user enters fullscreen, a single histogram enumeration is 56 // The screen on which the window was fullscreened, and whether the device had
57 // recorded. There are several relevant parameters, whose values are mapped 57 // multiple screens available.
58 // directly into individual bits of the enumeration. 58 enum WindowLocation {
59 // 59 PRIMARY_SINGLE_SCREEN = 0,
60 // + Fullscreen Mechanism: The mechanism by which the window's size is changed 60 PRIMARY_MULTIPLE_SCREEN = 1,
61 // to encompass the entire screen. Bit 0. 61 SECONDARY_MULTIPLE_SCREEN = 2,
62 // - AppKit (value of bit: 1) 62 WINDOW_LOCATION_COUNT = 3
63 // - Immersive (value of bit: 0)
64 //
65 // + Primary Screen: Whether the window is located on the screen at index 0.
66 // Depending on OSX version, this has different implications for menu bar
67 // visibility. Bit 1.
68 // - Primary (value of bit: 1)
69 // - Secondary (value of bit: 0)
70 //
71 // + Displays have separate spaces: An option available in Mission Control in
72 // OSX 10.9+. Bit 2.
73 // - On (value of bit: 1)
74 // - Off (value of bit: 0)
75 //
76 // + Multiple screens: Whether the user has multiple screens. If the window is
77 // located on a secondary screen, then there must be multiple screens. Bit 3.
78 // - Yes (value of bit: 1)
79 // - No (value of bit: 0)
80
81 enum FullscreenMechanism {
82 IMMERSIVE_FULLSCREEN_MECHANISM,
83 APPKIT_FULLSCREEN_MECHANISM,
84 }; 63 };
85 64
86 enum { 65 // There are 2 mechanisms for invoking fullscreen: AppKit and Immersive.
87 FULLSCREEN_MECHANISM_BIT = 0, 66 // There are 2 types of AppKit Fullscreen: Presentation Mode and Canonical
88 PRIMARY_SCREEN_BIT = 1, 67 // Fullscreen.
89 DISPLAYS_SEPARATE_SPACES_BIT = 2, 68 enum FullscreenStyle {
90 MULTIPLE_SCREENS_BIT = 3, 69 IMMERSIVE_FULLSCREEN = 0,
91 BIT_COUNT 70 PRESENTATION_MODE = 1,
71 CANONICAL_FULLSCREEN = 2,
72 FULLSCREEN_STYLE_COUNT = 3
92 }; 73 };
93 74
94 // Emits a histogram entry indicating that |window| is being made fullscreen. 75 // Emits a histogram entry indicating the Fullscreen window location.
95 void RecordFullscreenHistogram(FullscreenMechanism mechanism, 76 void RecordFullscreenWindowLocation(NSWindow* window) {
96 NSWindow* window) {
97 NSArray* screens = [NSScreen screens]; 77 NSArray* screens = [NSScreen screens];
98 bool primary_screen = ([[window screen] isEqual:[screens objectAtIndex:0]]); 78 bool primary_screen = ([[window screen] isEqual:[screens objectAtIndex:0]]);
99 bool displays_have_separate_spaces =
100 [NSScreen respondsToSelector:@selector(screensHaveSeparateSpaces)] &&
101 [NSScreen screensHaveSeparateSpaces];
102 bool multiple_screens = [screens count] > 1; 79 bool multiple_screens = [screens count] > 1;
103 80
104 int output = 0; 81 WindowLocation location = PRIMARY_SINGLE_SCREEN;
105 if (mechanism == APPKIT_FULLSCREEN_MECHANISM) 82 if (multiple_screens) {
106 output += 1 << FULLSCREEN_MECHANISM_BIT; 83 location =
84 primary_screen ? PRIMARY_MULTIPLE_SCREEN : SECONDARY_MULTIPLE_SCREEN;
85 }
107 86
108 if (primary_screen) 87 UMA_HISTOGRAM_ENUMERATION(
109 output += 1 << PRIMARY_SCREEN_BIT; 88 "OSX.Fullscreen.Enter.WindowLocation", location, WINDOW_LOCATION_COUNT);
89 }
110 90
111 if (displays_have_separate_spaces) 91 // Emits a histogram entry indicating the Fullscreen style.
112 output += 1 << DISPLAYS_SEPARATE_SPACES_BIT; 92 void RecordFullscreenStyle(FullscreenStyle style) {
113 93 UMA_HISTOGRAM_ENUMERATION(
114 if (multiple_screens) 94 "OSX.Fullscreen.Enter.Style", style, FULLSCREEN_STYLE_COUNT);
115 output += 1 << MULTIPLE_SCREENS_BIT;
116
117 int max_output = 1 << BIT_COUNT;
118 UMA_HISTOGRAM_ENUMERATION("OSX.Fullscreen.Enter", output, max_output);
119 } 95 }
120 96
121 } // namespace 97 } // namespace
122 98
123 @implementation BrowserWindowController(Private) 99 @implementation BrowserWindowController(Private)
124 100
125 // Create the tab strip controller. 101 // Create the tab strip controller.
126 - (void)createTabStripController { 102 - (void)createTabStripController {
127 DCHECK([overlayableContentsController_ activeContainer]); 103 DCHECK([overlayableContentsController_ activeContainer]);
128 DCHECK([[overlayableContentsController_ activeContainer] window]); 104 DCHECK([[overlayableContentsController_ activeContainer] window]);
(...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after
511 [self layoutSubviews]; 487 [self layoutSubviews];
512 } 488 }
513 489
514 - (PresentationModeController*)newPresentationModeControllerWithStyle: 490 - (PresentationModeController*)newPresentationModeControllerWithStyle:
515 (fullscreen_mac::SlidingStyle)style { 491 (fullscreen_mac::SlidingStyle)style {
516 return [[PresentationModeController alloc] initWithBrowserController:self 492 return [[PresentationModeController alloc] initWithBrowserController:self
517 style:style]; 493 style:style];
518 } 494 }
519 495
520 - (void)enterImmersiveFullscreen { 496 - (void)enterImmersiveFullscreen {
521 RecordFullscreenHistogram(IMMERSIVE_FULLSCREEN_MECHANISM, [self window]); 497 RecordFullscreenWindowLocation([self window]);
498 RecordFullscreenStyle(IMMERSIVE_FULLSCREEN);
522 499
523 // Set to NO by |-windowDidEnterFullScreen:|. 500 // Set to NO by |-windowDidEnterFullScreen:|.
524 enteringImmersiveFullscreen_ = YES; 501 enteringImmersiveFullscreen_ = YES;
525 502
526 // Fade to black. 503 // Fade to black.
527 const CGDisplayReservationInterval kFadeDurationSeconds = 0.6; 504 const CGDisplayReservationInterval kFadeDurationSeconds = 0.6;
528 Boolean didFadeOut = NO; 505 Boolean didFadeOut = NO;
529 CGDisplayFadeReservationToken token; 506 CGDisplayFadeReservationToken token;
530 if (CGAcquireDisplayFadeReservation(kFadeDurationSeconds, &token) 507 if (CGAcquireDisplayFadeReservation(kFadeDurationSeconds, &token)
531 == kCGErrorSuccess) { 508 == kCGErrorSuccess) {
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
665 } 642 }
666 643
667 - (NSApplicationPresentationOptions)window:(NSWindow*)window 644 - (NSApplicationPresentationOptions)window:(NSWindow*)window
668 willUseFullScreenPresentationOptions:(NSApplicationPresentationOptions)opt { 645 willUseFullScreenPresentationOptions:(NSApplicationPresentationOptions)opt {
669 return (opt | 646 return (opt |
670 NSApplicationPresentationAutoHideDock | 647 NSApplicationPresentationAutoHideDock |
671 NSApplicationPresentationAutoHideMenuBar); 648 NSApplicationPresentationAutoHideMenuBar);
672 } 649 }
673 650
674 - (void)windowWillEnterFullScreen:(NSNotification*)notification { 651 - (void)windowWillEnterFullScreen:(NSNotification*)notification {
675 RecordFullscreenHistogram(APPKIT_FULLSCREEN_MECHANISM, [self window]); 652 RecordFullscreenWindowLocation([self window]);
653 RecordFullscreenStyle(enteringPresentationMode_ ? PRESENTATION_MODE
654 : CANONICAL_FULLSCREEN);
676 655
677 if (notification) // For System Fullscreen when non-nil. 656 if (notification) // For System Fullscreen when non-nil.
678 [self registerForContentViewResizeNotifications]; 657 [self registerForContentViewResizeNotifications];
679 658
680 NSWindow* window = [self window]; 659 NSWindow* window = [self window];
681 savedRegularWindowFrame_ = [window frame]; 660 savedRegularWindowFrame_ = [window frame];
682 BOOL mode = enteringPresentationMode_ || 661 BOOL mode = enteringPresentationMode_ ||
683 browser_->fullscreen_controller()->IsWindowFullscreenForTabOrPending(); 662 browser_->fullscreen_controller()->IsWindowFullscreenForTabOrPending();
684 enteringAppKitFullscreen_ = YES; 663 enteringAppKitFullscreen_ = YES;
685 664
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after
1043 1022
1044 [CATransaction commit]; 1023 [CATransaction commit];
1045 hasAdjustedTabStripWhileEnteringAppKitFullscreen_ = YES; 1024 hasAdjustedTabStripWhileEnteringAppKitFullscreen_ = YES;
1046 } 1025 }
1047 } else { 1026 } else {
1048 hasAdjustedTabStripWhileEnteringAppKitFullscreen_ = NO; 1027 hasAdjustedTabStripWhileEnteringAppKitFullscreen_ = NO;
1049 } 1028 }
1050 } 1029 }
1051 1030
1052 @end // @implementation BrowserWindowController(Private) 1031 @end // @implementation BrowserWindowController(Private)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698