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

Unified Diff: chrome/browser/metrics/desktop_session_duration/desktop_session_duration_tracker_unittest.cc

Issue 2385103003: [DesktopSessionDurationTracker] Remove visibility-switch timeout from session length. (Closed)
Patch Set: Address nits. Created 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/metrics/desktop_session_duration/desktop_session_duration_tracker.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/metrics/desktop_session_duration/desktop_session_duration_tracker_unittest.cc
diff --git a/chrome/browser/metrics/desktop_session_duration/desktop_session_duration_tracker_unittest.cc b/chrome/browser/metrics/desktop_session_duration/desktop_session_duration_tracker_unittest.cc
index fa5eaf8c3a152099ef8dcc46a22b5ba9f0f4b37a..a8288494f4ea374145c82e06fdb81c43fcd09613 100644
--- a/chrome/browser/metrics/desktop_session_duration/desktop_session_duration_tracker_unittest.cc
+++ b/chrome/browser/metrics/desktop_session_duration/desktop_session_duration_tracker_unittest.cc
@@ -8,8 +8,15 @@
#include "base/run_loop.h"
#include "base/test/histogram_tester.h"
#include "base/test/test_mock_time_task_runner.h"
+#include "base/threading/platform_thread.h"
#include "testing/gtest/include/gtest/gtest.h"
+namespace {
+
+const base::TimeDelta kZeroTime = base::TimeDelta::FromSeconds(0);
+
+} // namespace
+
// Mock class for |DesktopSessionDurationTracker| for testing.
class MockDesktopSessionDurationTracker
: public metrics::DesktopSessionDurationTracker {
@@ -33,147 +40,169 @@ class MockDesktopSessionDurationTracker
DISALLOW_COPY_AND_ASSIGN(MockDesktopSessionDurationTracker);
};
-TEST(DesktopSessionDurationTrackerTest, TestVisibility) {
- base::MessageLoop loop(base::MessageLoop::TYPE_DEFAULT);
- base::HistogramTester histogram_tester;
+class DesktopSessionDurationTrackerTest : public testing::Test {
+ public:
+ DesktopSessionDurationTrackerTest()
+ : loop_(base::MessageLoop::TYPE_DEFAULT) {}
+
+ void ExpectTotalDuration(base::TimeDelta duration) {
+ histogram_tester_.ExpectTotalCount("Session.TotalDuration", 1);
+ base::Bucket bucket =
+ histogram_tester_.GetAllSamples("Session.TotalDuration")[0];
+ int max_expected_value = duration.InMilliseconds();
+ EXPECT_LE(bucket.min, max_expected_value);
+ }
+
+ base::HistogramTester histogram_tester_;
+ MockDesktopSessionDurationTracker instance_;
- MockDesktopSessionDurationTracker instance;
+ private:
+ base::MessageLoop loop_;
+ DISALLOW_COPY_AND_ASSIGN(DesktopSessionDurationTrackerTest);
+};
+
+TEST_F(DesktopSessionDurationTrackerTest, TestVisibility) {
// The browser becomes visible but it shouldn't start the session.
- instance.OnVisibilityChanged(true);
- EXPECT_FALSE(instance.in_session());
- EXPECT_TRUE(instance.is_visible());
- EXPECT_FALSE(instance.is_audio_playing());
- histogram_tester.ExpectTotalCount("Session.TotalDuration", 0);
-
- instance.OnUserEvent();
- EXPECT_TRUE(instance.in_session());
- EXPECT_TRUE(instance.is_visible());
- EXPECT_FALSE(instance.is_audio_playing());
- histogram_tester.ExpectTotalCount("Session.TotalDuration", 0);
+ instance_.OnVisibilityChanged(true, kZeroTime);
+ EXPECT_FALSE(instance_.in_session());
+ EXPECT_TRUE(instance_.is_visible());
+ EXPECT_FALSE(instance_.is_audio_playing());
+ histogram_tester_.ExpectTotalCount("Session.TotalDuration", 0);
+
+ instance_.OnUserEvent();
+ EXPECT_TRUE(instance_.in_session());
+ EXPECT_TRUE(instance_.is_visible());
+ EXPECT_FALSE(instance_.is_audio_playing());
+ histogram_tester_.ExpectTotalCount("Session.TotalDuration", 0);
// Even if there is a recent user event visibility change should end the
// session.
- instance.OnUserEvent();
- instance.OnUserEvent();
- instance.OnVisibilityChanged(false);
- EXPECT_FALSE(instance.in_session());
- EXPECT_FALSE(instance.is_visible());
- EXPECT_FALSE(instance.is_audio_playing());
- histogram_tester.ExpectTotalCount("Session.TotalDuration", 1);
+ instance_.OnUserEvent();
+ instance_.OnUserEvent();
+ instance_.OnVisibilityChanged(false, kZeroTime);
+ EXPECT_FALSE(instance_.in_session());
+ EXPECT_FALSE(instance_.is_visible());
+ EXPECT_FALSE(instance_.is_audio_playing());
+ histogram_tester_.ExpectTotalCount("Session.TotalDuration", 1);
// For the second time only visibility change should start the session.
- instance.OnVisibilityChanged(true);
- EXPECT_TRUE(instance.in_session());
- EXPECT_TRUE(instance.is_visible());
- EXPECT_FALSE(instance.is_audio_playing());
- histogram_tester.ExpectTotalCount("Session.TotalDuration", 1);
- instance.OnVisibilityChanged(false);
- EXPECT_FALSE(instance.in_session());
- EXPECT_FALSE(instance.is_visible());
- EXPECT_FALSE(instance.is_audio_playing());
- histogram_tester.ExpectTotalCount("Session.TotalDuration", 2);
+ instance_.OnVisibilityChanged(true, kZeroTime);
+ EXPECT_TRUE(instance_.in_session());
+ EXPECT_TRUE(instance_.is_visible());
+ EXPECT_FALSE(instance_.is_audio_playing());
+ histogram_tester_.ExpectTotalCount("Session.TotalDuration", 1);
+ instance_.OnVisibilityChanged(false, kZeroTime);
+ EXPECT_FALSE(instance_.in_session());
+ EXPECT_FALSE(instance_.is_visible());
+ EXPECT_FALSE(instance_.is_audio_playing());
+ histogram_tester_.ExpectTotalCount("Session.TotalDuration", 2);
}
-TEST(DesktopSessionDurationTrackerTest, TestUserEvent) {
- base::MessageLoop loop(base::MessageLoop::TYPE_DEFAULT);
- base::HistogramTester histogram_tester;
-
- MockDesktopSessionDurationTracker instance;
- instance.SetInactivityTimeoutForTesting(1);
+TEST_F(DesktopSessionDurationTrackerTest, TestUserEvent) {
+ instance_.SetInactivityTimeoutForTesting(1);
- EXPECT_FALSE(instance.in_session());
- EXPECT_FALSE(instance.is_visible());
- EXPECT_FALSE(instance.is_audio_playing());
- histogram_tester.ExpectTotalCount("Session.TotalDuration", 0);
+ EXPECT_FALSE(instance_.in_session());
+ EXPECT_FALSE(instance_.is_visible());
+ EXPECT_FALSE(instance_.is_audio_playing());
+ histogram_tester_.ExpectTotalCount("Session.TotalDuration", 0);
// User event doesn't go through if nothing is visible.
- instance.OnUserEvent();
- EXPECT_FALSE(instance.in_session());
- EXPECT_FALSE(instance.is_visible());
- EXPECT_FALSE(instance.is_audio_playing());
- histogram_tester.ExpectTotalCount("Session.TotalDuration", 0);
-
- instance.OnVisibilityChanged(true);
- instance.OnUserEvent();
- EXPECT_TRUE(instance.in_session());
- EXPECT_TRUE(instance.is_visible());
- EXPECT_FALSE(instance.is_audio_playing());
- histogram_tester.ExpectTotalCount("Session.TotalDuration", 0);
+ instance_.OnUserEvent();
+ EXPECT_FALSE(instance_.in_session());
+ EXPECT_FALSE(instance_.is_visible());
+ EXPECT_FALSE(instance_.is_audio_playing());
+ histogram_tester_.ExpectTotalCount("Session.TotalDuration", 0);
+
+ instance_.OnVisibilityChanged(true, kZeroTime);
+ instance_.OnUserEvent();
+ EXPECT_TRUE(instance_.in_session());
+ EXPECT_TRUE(instance_.is_visible());
+ EXPECT_FALSE(instance_.is_audio_playing());
+ histogram_tester_.ExpectTotalCount("Session.TotalDuration", 0);
// Wait until the session expires.
- while (!instance.is_timeout()) {
+ while (!instance_.is_timeout()) {
base::RunLoop().RunUntilIdle();
}
- EXPECT_FALSE(instance.in_session());
- EXPECT_TRUE(instance.is_visible());
- EXPECT_FALSE(instance.is_audio_playing());
- histogram_tester.ExpectTotalCount("Session.TotalDuration", 1);
+ EXPECT_FALSE(instance_.in_session());
+ EXPECT_TRUE(instance_.is_visible());
+ EXPECT_FALSE(instance_.is_audio_playing());
+ histogram_tester_.ExpectTotalCount("Session.TotalDuration", 1);
}
-TEST(DesktopSessionDurationTrackerTest, TestAudioEvent) {
- base::MessageLoop loop(base::MessageLoop::TYPE_DEFAULT);
- base::HistogramTester histogram_tester;
+TEST_F(DesktopSessionDurationTrackerTest, TestAudioEvent) {
+ instance_.SetInactivityTimeoutForTesting(1);
- MockDesktopSessionDurationTracker instance;
- instance.SetInactivityTimeoutForTesting(1);
+ instance_.OnVisibilityChanged(true, kZeroTime);
+ instance_.OnAudioStart();
+ EXPECT_TRUE(instance_.in_session());
+ EXPECT_TRUE(instance_.is_visible());
+ EXPECT_TRUE(instance_.is_audio_playing());
+ histogram_tester_.ExpectTotalCount("Session.TotalDuration", 0);
- instance.OnVisibilityChanged(true);
- instance.OnAudioStart();
- EXPECT_TRUE(instance.in_session());
- EXPECT_TRUE(instance.is_visible());
- EXPECT_TRUE(instance.is_audio_playing());
- histogram_tester.ExpectTotalCount("Session.TotalDuration", 0);
+ instance_.OnVisibilityChanged(false, kZeroTime);
+ EXPECT_TRUE(instance_.in_session());
+ EXPECT_FALSE(instance_.is_visible());
+ EXPECT_TRUE(instance_.is_audio_playing());
+ histogram_tester_.ExpectTotalCount("Session.TotalDuration", 0);
- instance.OnVisibilityChanged(false);
- EXPECT_TRUE(instance.in_session());
- EXPECT_FALSE(instance.is_visible());
- EXPECT_TRUE(instance.is_audio_playing());
- histogram_tester.ExpectTotalCount("Session.TotalDuration", 0);
-
- instance.OnAudioEnd();
- EXPECT_TRUE(instance.in_session());
- EXPECT_FALSE(instance.is_visible());
- EXPECT_FALSE(instance.is_audio_playing());
- histogram_tester.ExpectTotalCount("Session.TotalDuration", 0);
+ instance_.OnAudioEnd();
+ EXPECT_TRUE(instance_.in_session());
+ EXPECT_FALSE(instance_.is_visible());
+ EXPECT_FALSE(instance_.is_audio_playing());
+ histogram_tester_.ExpectTotalCount("Session.TotalDuration", 0);
// Wait until the session expires.
- while (!instance.is_timeout()) {
+ while (!instance_.is_timeout()) {
base::RunLoop().RunUntilIdle();
}
- EXPECT_FALSE(instance.in_session());
- EXPECT_FALSE(instance.is_visible());
- EXPECT_FALSE(instance.is_audio_playing());
- histogram_tester.ExpectTotalCount("Session.TotalDuration", 1);
+ EXPECT_FALSE(instance_.in_session());
+ EXPECT_FALSE(instance_.is_visible());
+ EXPECT_FALSE(instance_.is_audio_playing());
+ histogram_tester_.ExpectTotalCount("Session.TotalDuration", 1);
}
-TEST(DesktopSessionDurationTrackerTest, TestTimeoutDiscount) {
- base::MessageLoop loop(base::MessageLoop::TYPE_DEFAULT);
- base::HistogramTester histogram_tester;
- MockDesktopSessionDurationTracker instance;
-
+TEST_F(DesktopSessionDurationTrackerTest, TestInputTimeoutDiscount) {
int inactivity_interval_seconds = 2;
- instance.SetInactivityTimeoutForTesting(inactivity_interval_seconds);
+ instance_.SetInactivityTimeoutForTesting(inactivity_interval_seconds);
- instance.OnVisibilityChanged(true);
+ instance_.OnVisibilityChanged(true, kZeroTime);
base::TimeTicks before_session_start = base::TimeTicks::Now();
- instance.OnUserEvent(); // This should start the session
- histogram_tester.ExpectTotalCount("Session.TotalDuration", 0);
+ instance_.OnUserEvent(); // This should start the session
+ histogram_tester_.ExpectTotalCount("Session.TotalDuration", 0);
// Wait until the session expires.
- while (!instance.is_timeout()) {
+ while (!instance_.is_timeout()) {
base::RunLoop().RunUntilIdle();
}
base::TimeTicks after_session_end = base::TimeTicks::Now();
- histogram_tester.ExpectTotalCount("Session.TotalDuration", 1);
- base::Bucket bucket =
- histogram_tester.GetAllSamples("Session.TotalDuration")[0];
- int max_expected_value =
- (after_session_end - before_session_start -
- base::TimeDelta::FromSeconds(inactivity_interval_seconds))
- .InMilliseconds();
- EXPECT_LE(bucket.min, max_expected_value);
+ ExpectTotalDuration(
+ after_session_end - before_session_start -
+ base::TimeDelta::FromSeconds(inactivity_interval_seconds));
+}
+
+TEST_F(DesktopSessionDurationTrackerTest, TestVisibilityTimeoutDiscount) {
+ instance_.OnVisibilityChanged(true, kZeroTime);
+ base::TimeTicks before_session_start = base::TimeTicks::Now();
+ instance_.OnUserEvent(); // This should start the session
+ histogram_tester_.ExpectTotalCount("Session.TotalDuration", 0);
+
+ // Sleep a little while.
+ base::TimeDelta kDelay = base::TimeDelta::FromSeconds(2);
+ while (true) {
+ base::TimeDelta elapsed = base::TimeTicks::Now() - before_session_start;
+ if (elapsed >= kDelay)
+ break;
+ base::PlatformThread::Sleep(kDelay);
+ }
+
+ // End the session via visibility change.
+ instance_.OnVisibilityChanged(false, kDelay);
+ base::TimeTicks after_session_end = base::TimeTicks::Now();
+
+ ExpectTotalDuration(after_session_end - before_session_start - kDelay);
}
« no previous file with comments | « chrome/browser/metrics/desktop_session_duration/desktop_session_duration_tracker.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698