summaryrefslogtreecommitdiffstats
path: root/ash
diff options
context:
space:
mode:
authorpkotwicz@chromium.org <pkotwicz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-12-12 20:54:16 +0000
committerpkotwicz@chromium.org <pkotwicz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-12-12 20:54:16 +0000
commit97ab8c7e61514e495f1c8013006f528e90cfc8c9 (patch)
tree61fe8942f5d3a7d105bc0e9619f52b48fe8ae92c /ash
parent58a422e6633ce7783a508b13496496ff88664886 (diff)
downloadchromium_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.cc39
-rw-r--r--ash/wm/custom_frame_view_ash.cc11
-rw-r--r--ash/wm/immersive_fullscreen_controller.cc10
-rw-r--r--ash/wm/immersive_fullscreen_controller.h14
-rw-r--r--ash/wm/immersive_fullscreen_controller_unittest.cc66
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());