diff options
author | pkotwicz@chromium.org <pkotwicz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-12 20:54:16 +0000 |
---|---|---|
committer | pkotwicz@chromium.org <pkotwicz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-12 20:54:16 +0000 |
commit | 97ab8c7e61514e495f1c8013006f528e90cfc8c9 (patch) | |
tree | 61fe8942f5d3a7d105bc0e9619f52b48fe8ae92c /ash | |
parent | 58a422e6633ce7783a508b13496496ff88664886 (diff) | |
download | chromium_src-97ab8c7e61514e495f1c8013006f528e90cfc8c9.zip chromium_src-97ab8c7e61514e495f1c8013006f528e90cfc8c9.tar.gz chromium_src-97ab8c7e61514e495f1c8013006f528e90cfc8c9.tar.bz2 |
Add UMA metrics for
- The window show type over time.
- The type of window which is put into immersive fullscreen.
BUG=323066
TEST=None
R=oshima,isherman
TBR=benwells (For trivial change to chrome/browser/ui/views/apps/native_app_window_views.cc)
Review URL: https://codereview.chromium.org/107853002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@240406 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash')
-rw-r--r-- | ash/periodic_metrics_recorder.cc | 39 | ||||
-rw-r--r-- | ash/wm/custom_frame_view_ash.cc | 11 | ||||
-rw-r--r-- | ash/wm/immersive_fullscreen_controller.cc | 10 | ||||
-rw-r--r-- | ash/wm/immersive_fullscreen_controller.h | 14 | ||||
-rw-r--r-- | ash/wm/immersive_fullscreen_controller_unittest.cc | 66 |
5 files changed, 105 insertions, 35 deletions
diff --git a/ash/periodic_metrics_recorder.cc b/ash/periodic_metrics_recorder.cc index a1eb927..93f83a4 100644 --- a/ash/periodic_metrics_recorder.cc +++ b/ash/periodic_metrics_recorder.cc @@ -8,6 +8,7 @@ #include "ash/shelf/shelf_view.h" #include "ash/shelf/shelf_widget.h" #include "ash/shell.h" +#include "ash/wm/window_state.h" #include "base/metrics/histogram.h" namespace ash { @@ -38,6 +39,44 @@ void PeriodicMetricsRecorder::RecordMetrics() { -1), internal::SHELF_ALIGNMENT_UMA_ENUM_VALUE_COUNT); } + + enum ActiveWindowShowType { + ACTIVE_WINDOW_SHOW_TYPE_NO_ACTIVE_WINDOW, + ACTIVE_WINDOW_SHOW_TYPE_OTHER, + ACTIVE_WINDOW_SHOW_TYPE_MAXIMIZED, + ACTIVE_WINDOW_SHOW_TYPE_FULLSCREEN, + ACTIVE_WINDOW_SHOW_TYPE_SNAPPED, + ACTIVE_WINDOW_SHOW_TYPE_COUNT + }; + ActiveWindowShowType active_window_show_type = + ACTIVE_WINDOW_SHOW_TYPE_NO_ACTIVE_WINDOW; + wm::WindowState* active_window_state = ash::wm::GetActiveWindowState(); + if (active_window_state) { + switch(active_window_state->window_show_type()) { + case wm::SHOW_TYPE_MAXIMIZED: + active_window_show_type = ACTIVE_WINDOW_SHOW_TYPE_MAXIMIZED; + break; + case wm::SHOW_TYPE_FULLSCREEN: + active_window_show_type = ACTIVE_WINDOW_SHOW_TYPE_FULLSCREEN; + break; + case wm::SHOW_TYPE_LEFT_SNAPPED: + case wm::SHOW_TYPE_RIGHT_SNAPPED: + active_window_show_type = ACTIVE_WINDOW_SHOW_TYPE_SNAPPED; + break; + case wm::SHOW_TYPE_DEFAULT: + case wm::SHOW_TYPE_NORMAL: + case wm::SHOW_TYPE_MINIMIZED: + case wm::SHOW_TYPE_INACTIVE: + case wm::SHOW_TYPE_DETACHED: + case wm::SHOW_TYPE_END: + case wm::SHOW_TYPE_AUTO_POSITIONED: + active_window_show_type = ACTIVE_WINDOW_SHOW_TYPE_OTHER; + break; + } + UMA_HISTOGRAM_ENUMERATION("Ash.ActiveWindowShowTypeOverTime", + active_window_show_type, + ACTIVE_WINDOW_SHOW_TYPE_COUNT); + } } } // namespace ash diff --git a/ash/wm/custom_frame_view_ash.cc b/ash/wm/custom_frame_view_ash.cc index 268a4d2..5617bd4 100644 --- a/ash/wm/custom_frame_view_ash.cc +++ b/ash/wm/custom_frame_view_ash.cc @@ -89,8 +89,11 @@ class CustomFrameViewAshWindowStateDelegate } else { window_state->Restore(); } - if (immersive_fullscreen_controller_) - immersive_fullscreen_controller_->SetEnabled(enter_fullscreen); + if (immersive_fullscreen_controller_) { + immersive_fullscreen_controller_->SetEnabled( + ash::ImmersiveFullscreenController::WINDOW_TYPE_OTHER, + enter_fullscreen); + } return true; } // Overridden from aura::WindowObserver: @@ -107,7 +110,9 @@ class CustomFrameViewAshWindowStateDelegate !window_state->IsMinimized() && immersive_fullscreen_controller_.get() && immersive_fullscreen_controller_->IsEnabled()) { - immersive_fullscreen_controller_->SetEnabled(false); + immersive_fullscreen_controller_->SetEnabled( + ash::ImmersiveFullscreenController::WINDOW_TYPE_OTHER, + false); } } diff --git a/ash/wm/immersive_fullscreen_controller.cc b/ash/wm/immersive_fullscreen_controller.cc index 28aa1dc..701096e 100644 --- a/ash/wm/immersive_fullscreen_controller.cc +++ b/ash/wm/immersive_fullscreen_controller.cc @@ -8,6 +8,7 @@ #include "ash/shell.h" #include "ash/wm/window_state.h" +#include "base/metrics/histogram.h" #include "ui/aura/client/activation_client.h" #include "ui/aura/client/aura_constants.h" #include "ui/aura/client/capture_client.h" @@ -257,7 +258,8 @@ void ImmersiveFullscreenController::Init(Delegate* delegate, native_window_ = widget_->GetNativeWindow(); } -void ImmersiveFullscreenController::SetEnabled(bool enabled) { +void ImmersiveFullscreenController::SetEnabled(WindowType window_type, + bool enabled) { if (enabled_ == enabled) return; enabled_ = enabled; @@ -301,6 +303,12 @@ void ImmersiveFullscreenController::SetEnabled(bool enabled) { delegate_->OnImmersiveFullscreenExited(); } + + if (enabled_) { + UMA_HISTOGRAM_ENUMERATION("Ash.ImmersiveFullscreen.WindowType", + window_type, + WINDOW_TYPE_COUNT); + } } bool ImmersiveFullscreenController::IsEnabled() const { diff --git a/ash/wm/immersive_fullscreen_controller.h b/ash/wm/immersive_fullscreen_controller.h index 7e0ca78..9b6b600 100644 --- a/ash/wm/immersive_fullscreen_controller.h +++ b/ash/wm/immersive_fullscreen_controller.h @@ -45,6 +45,16 @@ class ASH_EXPORT ImmersiveFullscreenController public aura::WindowObserver, public ImmersiveRevealedLock::Delegate { public: + // The enum is used for an enumerated histogram. New items should be only + // added to the end. + enum WindowType { + WINDOW_TYPE_OTHER, + WINDOW_TYPE_BROWSER, + WINDOW_TYPE_HOSTED_APP, + WINDOW_TYPE_PACKAGED_APP, + WINDOW_TYPE_COUNT + }; + class Delegate { public: // Called when a reveal of the top-of-window views starts. @@ -85,7 +95,9 @@ class ASH_EXPORT ImmersiveFullscreenController views::View* top_container); // Enables or disables immersive fullscreen. - void SetEnabled(bool enable); + // |window_type| is the type of window which is put in immersive fullscreen. + // It is only used for histogramming. + void SetEnabled(WindowType window_type, bool enable); // Returns true if |native_window_| is in immersive fullscreen. bool IsEnabled() const; diff --git a/ash/wm/immersive_fullscreen_controller_unittest.cc b/ash/wm/immersive_fullscreen_controller_unittest.cc index 672e976..94e3f01 100644 --- a/ash/wm/immersive_fullscreen_controller_unittest.cc +++ b/ash/wm/immersive_fullscreen_controller_unittest.cc @@ -144,6 +144,12 @@ class ImmersiveFullscreenControllerTest : public ash::test::AshTestBase { // AshTestBase. } + // Enables / disables immersive fullscreen. + void SetEnabled(bool enabled) { + controller_->SetEnabled(ImmersiveFullscreenController::WINDOW_TYPE_OTHER, + enabled); + } + // Attempt to reveal the top-of-window views via |modality|. // The top-of-window views can only be revealed via mouse hover or a gesture. void AttemptReveal(Modality modality) { @@ -229,7 +235,7 @@ TEST_F(ImmersiveFullscreenControllerTest, Delegate) { EXPECT_FALSE(delegate()->is_enabled()); // Enabling initially hides the top views. - controller()->SetEnabled(true); + SetEnabled(true); EXPECT_TRUE(controller()->IsEnabled()); EXPECT_FALSE(controller()->IsRevealed()); EXPECT_TRUE(delegate()->is_enabled()); @@ -243,7 +249,7 @@ TEST_F(ImmersiveFullscreenControllerTest, Delegate) { EXPECT_EQ(1, delegate()->visible_fraction()); // Disabling ends the immersive reveal. - controller()->SetEnabled(false); + SetEnabled(false); EXPECT_FALSE(controller()->IsEnabled()); EXPECT_FALSE(controller()->IsRevealed()); EXPECT_FALSE(delegate()->is_enabled()); @@ -266,11 +272,11 @@ TEST_F(ImmersiveFullscreenControllerTest, RevealedLock) { EXPECT_FALSE(controller()->IsRevealed()); // Immersive fullscreen should start in the revealed state due to the lock. - controller()->SetEnabled(true); + SetEnabled(true); EXPECT_TRUE(controller()->IsEnabled()); EXPECT_TRUE(controller()->IsRevealed()); - controller()->SetEnabled(false); + SetEnabled(false); EXPECT_FALSE(controller()->IsEnabled()); EXPECT_FALSE(controller()->IsRevealed()); @@ -280,7 +286,7 @@ TEST_F(ImmersiveFullscreenControllerTest, RevealedLock) { // Immersive fullscreen should start in the closed state because the lock is // no longer held. - controller()->SetEnabled(true); + SetEnabled(true); EXPECT_TRUE(controller()->IsEnabled()); EXPECT_FALSE(controller()->IsRevealed()); @@ -310,7 +316,7 @@ TEST_F(ImmersiveFullscreenControllerTest, OnMouseEvent) { display_layout); // Set up initial state. - controller()->SetEnabled(true); + SetEnabled(true); ASSERT_TRUE(controller()->IsEnabled()); ASSERT_FALSE(controller()->IsRevealed()); @@ -416,7 +422,7 @@ TEST_F(ImmersiveFullscreenControllerTest, Inactive) { popup_widget->Show(); ASSERT_FALSE(top_container()->GetWidget()->IsActive()); - controller()->SetEnabled(true); + SetEnabled(true); ASSERT_TRUE(controller()->IsEnabled()); ASSERT_FALSE(controller()->IsRevealed()); @@ -476,7 +482,7 @@ TEST_F(ImmersiveFullscreenControllerTest, MouseEventsVerticalDisplayLayout) { ash::Shell::GetInstance()->display_manager()->SetLayoutForCurrentDisplays( display_layout); - controller()->SetEnabled(true); + SetEnabled(true); ASSERT_TRUE(controller()->IsEnabled()); ASSERT_FALSE(controller()->IsRevealed()); @@ -556,7 +562,7 @@ TEST_F(ImmersiveFullscreenControllerTest, MouseEventsVerticalDisplayLayout) { // Test behavior when the mouse becomes hovered without moving. TEST_F(ImmersiveFullscreenControllerTest, MouseHoveredWithoutMoving) { - controller()->SetEnabled(true); + SetEnabled(true); scoped_ptr<ImmersiveRevealedLock> lock; // 1) Test that if the mouse becomes hovered without the mouse moving due to a @@ -577,22 +583,22 @@ TEST_F(ImmersiveFullscreenControllerTest, MouseHoveredWithoutMoving) { // reveal in ImmersiveFullscreenController::SetEnabled(true) and there are no // locks keeping the top-of-window views revealed, that mouse hover does not // prevent the top-of-window views from closing. - controller()->SetEnabled(false); + SetEnabled(false); SetHovered(true); EXPECT_FALSE(controller()->IsRevealed()); - controller()->SetEnabled(true); + SetEnabled(true); EXPECT_FALSE(controller()->IsRevealed()); // 3) Test that if the mouse becomes hovered without moving because of a // reveal in ImmersiveFullscreenController::SetEnabled(true) and there is a // lock keeping the top-of-window views revealed, that the top-of-window views // do not hide till the mouse moves off of the top-of-window views. - controller()->SetEnabled(false); + SetEnabled(false); SetHovered(true); lock.reset(controller()->GetRevealedLock( ImmersiveFullscreenController::ANIMATE_REVEAL_NO)); EXPECT_FALSE(controller()->IsRevealed()); - controller()->SetEnabled(true); + SetEnabled(true); EXPECT_TRUE(controller()->IsRevealed()); lock.reset(); EXPECT_TRUE(controller()->IsRevealed()); @@ -605,7 +611,7 @@ TEST_F(ImmersiveFullscreenControllerTest, MouseHoveredWithoutMoving) { // edge gesture, switching to using the mouse and ending the reveal by moving // the mouse off of the top-of-window views. TEST_F(ImmersiveFullscreenControllerTest, DifferentModalityEnterExit) { - controller()->SetEnabled(true); + SetEnabled(true); EXPECT_TRUE(controller()->IsEnabled()); EXPECT_FALSE(controller()->IsRevealed()); @@ -638,7 +644,7 @@ TEST_F(ImmersiveFullscreenControllerTest, DifferentModalityEnterExit) { // Test when the SWIPE_CLOSE edge gesture closes the top-of-window views. TEST_F(ImmersiveFullscreenControllerTest, EndRevealViaGesture) { - controller()->SetEnabled(true); + SetEnabled(true); EXPECT_TRUE(controller()->IsEnabled()); EXPECT_FALSE(controller()->IsRevealed()); @@ -687,7 +693,7 @@ TEST_F(ImmersiveFullscreenControllerTest, Focus) { views::FocusManager* focus_manager = top_container()->GetWidget()->GetFocusManager(); - controller()->SetEnabled(true); + SetEnabled(true); // 1) Test that the top-of-window views stay revealed as long as either a // |child_view| has focus or the mouse is hovered above the top-of-window @@ -715,22 +721,22 @@ TEST_F(ImmersiveFullscreenControllerTest, Focus) { // while immersive mode is disabled is properly registered. child_view->RequestFocus(); EXPECT_TRUE(controller()->IsRevealed()); - controller()->SetEnabled(false); + SetEnabled(false); EXPECT_FALSE(controller()->IsRevealed()); unrelated_view->RequestFocus(); - controller()->SetEnabled(true); + SetEnabled(true); EXPECT_FALSE(controller()->IsRevealed()); // Repeat test but with a revealed lock acquired when immersive mode is // disabled because the code path is different. child_view->RequestFocus(); EXPECT_TRUE(controller()->IsRevealed()); - controller()->SetEnabled(false); + SetEnabled(false); scoped_ptr<ImmersiveRevealedLock> lock(controller()->GetRevealedLock( ImmersiveFullscreenController::ANIMATE_REVEAL_NO)); EXPECT_FALSE(controller()->IsRevealed()); unrelated_view->RequestFocus(); - controller()->SetEnabled(true); + SetEnabled(true); EXPECT_TRUE(controller()->IsRevealed()); lock.reset(); EXPECT_FALSE(controller()->IsRevealed()); @@ -741,7 +747,7 @@ TEST_F(ImmersiveFullscreenControllerTest, Focus) { TEST_F(ImmersiveFullscreenControllerTest, Transient) { views::Widget* top_container_widget = top_container()->GetWidget(); - controller()->SetEnabled(true); + SetEnabled(true); ASSERT_FALSE(controller()->IsRevealed()); // 1) Test that a transient window which is not a bubble does not trigger a @@ -795,7 +801,7 @@ TEST_F(ImmersiveFullscreenControllerTest, Bubbles) { unrelated_view->SetBounds(0, 100, 10, 10); top_container()->parent()->AddChildView(unrelated_view); - controller()->SetEnabled(true); + SetEnabled(true); ASSERT_FALSE(controller()->IsRevealed()); // 1) Test that a bubble anchored to a child of the top container triggers @@ -863,9 +869,9 @@ TEST_F(ImmersiveFullscreenControllerTest, Bubbles) { // 4) Test that visibility changes which occur while immersive fullscreen is // disabled are handled upon reenabling immersive fullscreen. - controller()->SetEnabled(false); + SetEnabled(false); bubble_widget5->Hide(); - controller()->SetEnabled(true); + SetEnabled(true); EXPECT_FALSE(controller()->IsRevealed()); // We do not need |bubble_widget4| or |bubble_widget5| anymore, close them. @@ -874,13 +880,13 @@ TEST_F(ImmersiveFullscreenControllerTest, Bubbles) { // 5) Test that a bubble added while immersive fullscreen is disabled is // handled upon reenabling immersive fullscreen. - controller()->SetEnabled(false); + SetEnabled(false); views::Widget* bubble_widget6 = views::BubbleDelegateView::CreateBubble( new views::BubbleDelegateView(child_view, views::BubbleBorder::NONE)); bubble_widget6->Show(); - controller()->SetEnabled(true); + SetEnabled(true); EXPECT_TRUE(controller()->IsRevealed()); bubble_widget6->Close(); @@ -922,11 +928,11 @@ TEST_F(ImmersiveFullscreenControllerTest, Shelf) { // Entering immersive fullscreen sets the shelf to auto hide. window()->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_FULLSCREEN); - controller()->SetEnabled(true); + SetEnabled(true); EXPECT_EQ(ash::SHELF_AUTO_HIDE, shelf->visibility_state()); // Disabling immersive fullscreen puts it back. - controller()->SetEnabled(false); + SetEnabled(false); window()->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL); ASSERT_FALSE(controller()->IsEnabled()); EXPECT_EQ(ash::SHELF_VISIBLE, shelf->visibility_state()); @@ -937,11 +943,11 @@ TEST_F(ImmersiveFullscreenControllerTest, Shelf) { // Entering immersive fullscreen keeps auto-hide. window()->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_FULLSCREEN); - controller()->SetEnabled(true); + SetEnabled(true); EXPECT_EQ(ash::SHELF_AUTO_HIDE, shelf->visibility_state()); // Disabling immersive fullscreen maintains the user's auto-hide selection. - controller()->SetEnabled(false); + SetEnabled(false); window()->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL); EXPECT_EQ(ash::SHELF_AUTO_HIDE, shelf->visibility_state()); |