OLD | NEW |
| (Empty) |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "content/browser/media/android/media_session_uma_helper.h" | |
6 | |
7 #include "base/metrics/histogram_samples.h" | |
8 #include "base/test/histogram_tester.h" | |
9 #include "base/test/simple_test_clock.h" | |
10 #include "testing/gtest/include/gtest/gtest.h" | |
11 | |
12 namespace content { | |
13 | |
14 using MediaSessionSuspendedSource = | |
15 MediaSessionUmaHelper::MediaSessionSuspendedSource; | |
16 | |
17 namespace { | |
18 | |
19 class MediaSessionUmaHelperTest : public testing::Test { | |
20 public: | |
21 MediaSessionUmaHelperTest() = default; | |
22 | |
23 void SetUp() override { | |
24 clock_ = new base::SimpleTestClock(); | |
25 clock_->SetNow(base::Time::Now()); | |
26 media_session_uma_helper_.SetClockForTest( | |
27 scoped_ptr<base::SimpleTestClock>(clock_)); | |
28 } | |
29 | |
30 void TearDown() override { | |
31 clock_ = nullptr; | |
32 } | |
33 | |
34 base::SimpleTestClock* clock() { return clock_; } | |
35 | |
36 MediaSessionUmaHelper& media_session_uma_helper() { | |
37 return media_session_uma_helper_; | |
38 }; | |
39 | |
40 scoped_ptr<base::HistogramSamples> GetHistogramSamplesSinceTestStart( | |
41 const std::string& name) { | |
42 return histogram_tester_.GetHistogramSamplesSinceCreation(name); | |
43 } | |
44 | |
45 private: | |
46 base::SimpleTestClock* clock_ = nullptr; | |
47 MediaSessionUmaHelper media_session_uma_helper_; | |
48 base::HistogramTester histogram_tester_; | |
49 }; | |
50 | |
51 } // anonymous namespace | |
52 | |
53 TEST_F(MediaSessionUmaHelperTest, CreateAndKillDoesNothing) { | |
54 { | |
55 MediaSessionUmaHelper* uma_helper = new MediaSessionUmaHelper(); | |
56 delete uma_helper; | |
57 } | |
58 | |
59 { | |
60 scoped_ptr<base::HistogramSamples> samples( | |
61 GetHistogramSamplesSinceTestStart("Media.Session.Suspended")); | |
62 EXPECT_EQ(0, samples->TotalCount()); | |
63 } | |
64 | |
65 { | |
66 scoped_ptr<base::HistogramSamples> samples( | |
67 GetHistogramSamplesSinceTestStart("Media.Session.ActiveTime")); | |
68 EXPECT_EQ(0, samples->TotalCount()); | |
69 } | |
70 } | |
71 | |
72 TEST_F(MediaSessionUmaHelperTest, SuspendRegisterImmediately) { | |
73 media_session_uma_helper().RecordSessionSuspended( | |
74 MediaSessionSuspendedSource::SystemTransient); | |
75 | |
76 scoped_ptr<base::HistogramSamples> samples( | |
77 GetHistogramSamplesSinceTestStart("Media.Session.Suspended")); | |
78 EXPECT_EQ(1, samples->TotalCount()); | |
79 EXPECT_EQ(1, samples->GetCount(0)); // System Transient | |
80 EXPECT_EQ(0, samples->GetCount(1)); // System Permanent | |
81 EXPECT_EQ(0, samples->GetCount(2)); // UI | |
82 } | |
83 | |
84 TEST_F(MediaSessionUmaHelperTest, MultipleSuspend) { | |
85 media_session_uma_helper().RecordSessionSuspended( | |
86 MediaSessionSuspendedSource::SystemTransient); | |
87 media_session_uma_helper().RecordSessionSuspended( | |
88 MediaSessionSuspendedSource::SystemPermanent); | |
89 media_session_uma_helper().RecordSessionSuspended( | |
90 MediaSessionSuspendedSource::UI); | |
91 | |
92 scoped_ptr<base::HistogramSamples> samples( | |
93 GetHistogramSamplesSinceTestStart("Media.Session.Suspended")); | |
94 EXPECT_EQ(3, samples->TotalCount()); | |
95 EXPECT_EQ(1, samples->GetCount(0)); // System Transient | |
96 EXPECT_EQ(1, samples->GetCount(1)); // System Permanent | |
97 EXPECT_EQ(1, samples->GetCount(2)); // UI | |
98 } | |
99 | |
100 TEST_F(MediaSessionUmaHelperTest, MultipleSuspendSame) { | |
101 media_session_uma_helper().RecordSessionSuspended( | |
102 MediaSessionSuspendedSource::SystemPermanent); | |
103 media_session_uma_helper().RecordSessionSuspended( | |
104 MediaSessionSuspendedSource::SystemTransient); | |
105 media_session_uma_helper().RecordSessionSuspended( | |
106 MediaSessionSuspendedSource::UI); | |
107 media_session_uma_helper().RecordSessionSuspended( | |
108 MediaSessionSuspendedSource::SystemTransient); | |
109 media_session_uma_helper().RecordSessionSuspended( | |
110 MediaSessionSuspendedSource::SystemPermanent); | |
111 media_session_uma_helper().RecordSessionSuspended( | |
112 MediaSessionSuspendedSource::UI); | |
113 | |
114 scoped_ptr<base::HistogramSamples> samples( | |
115 GetHistogramSamplesSinceTestStart("Media.Session.Suspended")); | |
116 EXPECT_EQ(6, samples->TotalCount()); | |
117 EXPECT_EQ(2, samples->GetCount(0)); // System Transient | |
118 EXPECT_EQ(2, samples->GetCount(1)); // System Permanent | |
119 EXPECT_EQ(2, samples->GetCount(2)); // UI | |
120 } | |
121 | |
122 TEST_F(MediaSessionUmaHelperTest, ActivationNotTerminatedDoesNotCommit) { | |
123 media_session_uma_helper().OnSessionActive(); | |
124 clock()->Advance(base::TimeDelta::FromMilliseconds(1000)); | |
125 | |
126 scoped_ptr<base::HistogramSamples> samples( | |
127 GetHistogramSamplesSinceTestStart("Media.Session.ActiveTime")); | |
128 EXPECT_EQ(0, samples->TotalCount()); | |
129 } | |
130 | |
131 TEST_F(MediaSessionUmaHelperTest, SuspendActivationNotTerminatedDoesNotCommit) { | |
132 media_session_uma_helper().OnSessionActive(); | |
133 | |
134 clock()->Advance(base::TimeDelta::FromMilliseconds(1000)); | |
135 media_session_uma_helper().OnSessionSuspended(); | |
136 | |
137 scoped_ptr<base::HistogramSamples> samples( | |
138 GetHistogramSamplesSinceTestStart("Media.Session.ActiveTime")); | |
139 EXPECT_EQ(0, samples->TotalCount()); | |
140 } | |
141 | |
142 TEST_F(MediaSessionUmaHelperTest, FullActivation) { | |
143 media_session_uma_helper().OnSessionActive(); | |
144 | |
145 clock()->Advance(base::TimeDelta::FromMilliseconds(1000)); | |
146 media_session_uma_helper().OnSessionInactive(); | |
147 | |
148 scoped_ptr<base::HistogramSamples> samples( | |
149 GetHistogramSamplesSinceTestStart("Media.Session.ActiveTime")); | |
150 EXPECT_EQ(1, samples->TotalCount()); | |
151 EXPECT_EQ(1, samples->GetCount(1000)); | |
152 } | |
153 | |
154 TEST_F(MediaSessionUmaHelperTest, ActivationCycleWithSuspend) { | |
155 media_session_uma_helper().OnSessionActive(); | |
156 | |
157 clock()->Advance(base::TimeDelta::FromMilliseconds(1000)); | |
158 media_session_uma_helper().OnSessionSuspended(); | |
159 | |
160 clock()->Advance(base::TimeDelta::FromMilliseconds(2000)); | |
161 media_session_uma_helper().OnSessionActive(); | |
162 | |
163 clock()->Advance(base::TimeDelta::FromMilliseconds(1000)); | |
164 media_session_uma_helper().OnSessionInactive(); | |
165 | |
166 scoped_ptr<base::HistogramSamples> samples( | |
167 GetHistogramSamplesSinceTestStart("Media.Session.ActiveTime")); | |
168 EXPECT_EQ(1, samples->TotalCount()); | |
169 EXPECT_EQ(1, samples->GetCount(2000)); | |
170 } | |
171 | |
172 TEST_F(MediaSessionUmaHelperTest, ActivationCycleWithMultipleSuspend) { | |
173 media_session_uma_helper().OnSessionActive(); | |
174 | |
175 clock()->Advance(base::TimeDelta::FromMilliseconds(1000)); | |
176 media_session_uma_helper().OnSessionSuspended(); | |
177 | |
178 clock()->Advance(base::TimeDelta::FromMilliseconds(2000)); | |
179 media_session_uma_helper().OnSessionActive(); | |
180 | |
181 clock()->Advance(base::TimeDelta::FromMilliseconds(1000)); | |
182 media_session_uma_helper().OnSessionSuspended(); | |
183 | |
184 clock()->Advance(base::TimeDelta::FromMilliseconds(2000)); | |
185 media_session_uma_helper().OnSessionActive(); | |
186 | |
187 clock()->Advance(base::TimeDelta::FromMilliseconds(1000)); | |
188 media_session_uma_helper().OnSessionInactive(); | |
189 | |
190 scoped_ptr<base::HistogramSamples> samples( | |
191 GetHistogramSamplesSinceTestStart("Media.Session.ActiveTime")); | |
192 EXPECT_EQ(1, samples->TotalCount()); | |
193 EXPECT_EQ(1, samples->GetCount(3000)); | |
194 } | |
195 | |
196 TEST_F(MediaSessionUmaHelperTest, MultipleActivations) { | |
197 media_session_uma_helper().OnSessionActive(); | |
198 | |
199 clock()->Advance(base::TimeDelta::FromMilliseconds(1000)); | |
200 media_session_uma_helper().OnSessionSuspended(); | |
201 | |
202 clock()->Advance(base::TimeDelta::FromMilliseconds(2000)); | |
203 media_session_uma_helper().OnSessionActive(); | |
204 | |
205 clock()->Advance(base::TimeDelta::FromMilliseconds(1000)); | |
206 media_session_uma_helper().OnSessionInactive(); | |
207 | |
208 media_session_uma_helper().OnSessionActive(); | |
209 | |
210 clock()->Advance(base::TimeDelta::FromMilliseconds(1000)); | |
211 media_session_uma_helper().OnSessionSuspended(); | |
212 | |
213 clock()->Advance(base::TimeDelta::FromMilliseconds(2000)); | |
214 media_session_uma_helper().OnSessionActive(); | |
215 | |
216 clock()->Advance(base::TimeDelta::FromMilliseconds(1000)); | |
217 media_session_uma_helper().OnSessionSuspended(); | |
218 | |
219 clock()->Advance(base::TimeDelta::FromMilliseconds(2000)); | |
220 media_session_uma_helper().OnSessionActive(); | |
221 | |
222 clock()->Advance(base::TimeDelta::FromMilliseconds(1000)); | |
223 media_session_uma_helper().OnSessionInactive(); | |
224 | |
225 scoped_ptr<base::HistogramSamples> samples( | |
226 GetHistogramSamplesSinceTestStart("Media.Session.ActiveTime")); | |
227 EXPECT_EQ(2, samples->TotalCount()); | |
228 EXPECT_EQ(1, samples->GetCount(2000)); | |
229 EXPECT_EQ(1, samples->GetCount(3000)); | |
230 } | |
231 | |
232 TEST_F(MediaSessionUmaHelperTest, MultipleActivationCalls) { | |
233 media_session_uma_helper().OnSessionActive(); | |
234 | |
235 clock()->Advance(base::TimeDelta::FromMilliseconds(1000)); | |
236 media_session_uma_helper().OnSessionActive(); | |
237 | |
238 clock()->Advance(base::TimeDelta::FromMilliseconds(2000)); | |
239 media_session_uma_helper().OnSessionActive(); | |
240 | |
241 clock()->Advance(base::TimeDelta::FromMilliseconds(500)); | |
242 media_session_uma_helper().OnSessionInactive(); | |
243 | |
244 // Calling OnSessionActive() multiple times reset the start time of the | |
245 // session. | |
246 scoped_ptr<base::HistogramSamples> samples( | |
247 GetHistogramSamplesSinceTestStart("Media.Session.ActiveTime")); | |
248 EXPECT_EQ(1, samples->TotalCount()); | |
249 EXPECT_EQ(1, samples->GetCount(500)); | |
250 } | |
251 | |
252 TEST_F(MediaSessionUmaHelperTest, MultipleSuspendCalls_WhileSuspended) { | |
253 media_session_uma_helper().OnSessionActive(); | |
254 | |
255 clock()->Advance(base::TimeDelta::FromMilliseconds(1000)); | |
256 media_session_uma_helper().OnSessionSuspended(); | |
257 | |
258 clock()->Advance(base::TimeDelta::FromMilliseconds(2000)); | |
259 media_session_uma_helper().OnSessionSuspended(); | |
260 | |
261 clock()->Advance(base::TimeDelta::FromMilliseconds(500)); | |
262 media_session_uma_helper().OnSessionSuspended(); | |
263 | |
264 media_session_uma_helper().OnSessionInactive(); | |
265 | |
266 // If the session is already suspended, OnSessionSuspended() calls are | |
267 // ignored. | |
268 scoped_ptr<base::HistogramSamples> samples( | |
269 GetHistogramSamplesSinceTestStart("Media.Session.ActiveTime")); | |
270 EXPECT_EQ(1, samples->TotalCount()); | |
271 EXPECT_EQ(1, samples->GetCount(1000)); | |
272 } | |
273 | |
274 TEST_F(MediaSessionUmaHelperTest, MultipleSuspendCalls_WhileInactive) { | |
275 media_session_uma_helper().OnSessionActive(); | |
276 | |
277 clock()->Advance(base::TimeDelta::FromMilliseconds(1000)); | |
278 media_session_uma_helper().OnSessionInactive(); | |
279 | |
280 clock()->Advance(base::TimeDelta::FromMilliseconds(2000)); | |
281 media_session_uma_helper().OnSessionSuspended(); | |
282 | |
283 clock()->Advance(base::TimeDelta::FromMilliseconds(500)); | |
284 media_session_uma_helper().OnSessionSuspended(); | |
285 | |
286 media_session_uma_helper().OnSessionInactive(); | |
287 | |
288 // If the session is already inactive, OnSessionSuspended() calls are | |
289 // ignored. | |
290 scoped_ptr<base::HistogramSamples> samples( | |
291 GetHistogramSamplesSinceTestStart("Media.Session.ActiveTime")); | |
292 EXPECT_EQ(1, samples->TotalCount()); | |
293 EXPECT_EQ(1, samples->GetCount(1000)); | |
294 } | |
295 | |
296 TEST_F(MediaSessionUmaHelperTest, MultipleInactiveCalls) { | |
297 media_session_uma_helper().OnSessionActive(); | |
298 | |
299 clock()->Advance(base::TimeDelta::FromMilliseconds(3000)); | |
300 media_session_uma_helper().OnSessionInactive(); | |
301 | |
302 clock()->Advance(base::TimeDelta::FromMilliseconds(2000)); | |
303 media_session_uma_helper().OnSessionInactive(); | |
304 | |
305 clock()->Advance(base::TimeDelta::FromMilliseconds(500)); | |
306 media_session_uma_helper().OnSessionInactive(); | |
307 | |
308 // If the session is already inactive, OnSessionInactive() calls are ignored. | |
309 scoped_ptr<base::HistogramSamples> samples( | |
310 GetHistogramSamplesSinceTestStart("Media.Session.ActiveTime")); | |
311 EXPECT_EQ(1, samples->TotalCount()); | |
312 EXPECT_EQ(1, samples->GetCount(3000)); | |
313 } | |
314 | |
315 } // namespace content | |
OLD | NEW |