Chromium Code Reviews| 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..85ac27082a468f38ed7a2c6f59b40515186af3f1 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 |
| @@ -10,6 +10,12 @@ |
| #include "base/test/test_mock_time_task_runner.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 { |
| @@ -40,7 +46,7 @@ TEST(DesktopSessionDurationTrackerTest, TestVisibility) { |
| MockDesktopSessionDurationTracker instance; |
| // The browser becomes visible but it shouldn't start the session. |
| - instance.OnVisibilityChanged(true); |
| + instance.OnVisibilityChanged(true, kZeroTime); |
| EXPECT_FALSE(instance.in_session()); |
| EXPECT_TRUE(instance.is_visible()); |
| EXPECT_FALSE(instance.is_audio_playing()); |
| @@ -56,19 +62,19 @@ TEST(DesktopSessionDurationTrackerTest, TestVisibility) { |
| // session. |
| instance.OnUserEvent(); |
| instance.OnUserEvent(); |
| - instance.OnVisibilityChanged(false); |
| + 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); |
| + 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); |
| + instance.OnVisibilityChanged(false, kZeroTime); |
| EXPECT_FALSE(instance.in_session()); |
| EXPECT_FALSE(instance.is_visible()); |
| EXPECT_FALSE(instance.is_audio_playing()); |
| @@ -94,7 +100,7 @@ TEST(DesktopSessionDurationTrackerTest, TestUserEvent) { |
| EXPECT_FALSE(instance.is_audio_playing()); |
| histogram_tester.ExpectTotalCount("Session.TotalDuration", 0); |
| - instance.OnVisibilityChanged(true); |
| + instance.OnVisibilityChanged(true, kZeroTime); |
| instance.OnUserEvent(); |
| EXPECT_TRUE(instance.in_session()); |
| EXPECT_TRUE(instance.is_visible()); |
| @@ -119,14 +125,14 @@ TEST(DesktopSessionDurationTrackerTest, TestAudioEvent) { |
| MockDesktopSessionDurationTracker instance; |
| instance.SetInactivityTimeoutForTesting(1); |
| - instance.OnVisibilityChanged(true); |
| + 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(false); |
| + instance.OnVisibilityChanged(false, kZeroTime); |
| EXPECT_TRUE(instance.in_session()); |
| EXPECT_FALSE(instance.is_visible()); |
| EXPECT_TRUE(instance.is_audio_playing()); |
| @@ -149,7 +155,36 @@ TEST(DesktopSessionDurationTrackerTest, TestAudioEvent) { |
| histogram_tester.ExpectTotalCount("Session.TotalDuration", 1); |
| } |
| -TEST(DesktopSessionDurationTrackerTest, TestTimeoutDiscount) { |
| +TEST(DesktopSessionDurationTrackerTest, TestInputTimeoutDiscount) { |
| + base::MessageLoop loop(base::MessageLoop::TYPE_DEFAULT); |
| + base::HistogramTester histogram_tester; |
| + MockDesktopSessionDurationTracker instance; |
| + |
| + int inactivity_interval_seconds = 2; |
| + instance.SetInactivityTimeoutForTesting(inactivity_interval_seconds); |
| + |
| + 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); |
| + |
| + // Wait until the session expires. |
| + 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); |
| +} |
|
Alexei Svitkine (slow)
2016/10/03 16:50:33
I'm having trouble seeing how this test is differe
chrisha
2016/10/03 16:58:40
Oops, was in the middle of writing this and comple
|
| + |
| +TEST(DesktopSessionDurationTrackerTest, TestVisibilityTimeoutDiscount) { |
| base::MessageLoop loop(base::MessageLoop::TYPE_DEFAULT); |
| base::HistogramTester histogram_tester; |
| MockDesktopSessionDurationTracker instance; |
| @@ -157,7 +192,7 @@ TEST(DesktopSessionDurationTrackerTest, TestTimeoutDiscount) { |
| int inactivity_interval_seconds = 2; |
| 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); |