OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 EXPECT_EQ(0, stats.num_samples); | 51 EXPECT_EQ(0, stats.num_samples); |
52 EXPECT_EQ(-1, stats.min); | 52 EXPECT_EQ(-1, stats.min); |
53 EXPECT_EQ(-1, stats.max); | 53 EXPECT_EQ(-1, stats.max); |
54 EXPECT_EQ(-1, stats.average); | 54 EXPECT_EQ(-1, stats.average); |
55 } | 55 } |
56 | 56 |
57 SimulatedClock clock_; | 57 SimulatedClock clock_; |
58 }; | 58 }; |
59 | 59 |
60 TEST_F(StatsCounterTest, NoSamples) { | 60 TEST_F(StatsCounterTest, NoSamples) { |
61 AvgCounter counter(&clock_, nullptr); | 61 AvgCounter counter(&clock_, nullptr, false); |
62 VerifyStatsIsNotSet(counter.GetStats()); | 62 VerifyStatsIsNotSet(counter.GetStats()); |
63 } | 63 } |
64 | 64 |
65 TEST_F(StatsCounterTest, TestRegisterObserver) { | 65 TEST_F(StatsCounterTest, TestRegisterObserver) { |
66 StatsCounterObserverImpl* observer = new StatsCounterObserverImpl(); | 66 StatsCounterObserverImpl* observer = new StatsCounterObserverImpl(); |
67 const int kSample = 22; | 67 const int kSample = 22; |
68 AvgCounter counter(&clock_, observer); | 68 AvgCounter counter(&clock_, observer, false); |
69 AddSampleAndAdvance(kSample, kProcessIntervalMs, &counter); | 69 AddSampleAndAdvance(kSample, kProcessIntervalMs, &counter); |
70 // Trigger process (sample included in next interval). | 70 // Trigger process (sample included in next interval). |
71 counter.Add(111); | 71 counter.Add(111); |
72 EXPECT_EQ(1, observer->num_calls_); | 72 EXPECT_EQ(1, observer->num_calls_); |
73 } | 73 } |
74 | 74 |
75 TEST_F(StatsCounterTest, VerifyProcessInterval) { | 75 TEST_F(StatsCounterTest, VerifyProcessInterval) { |
76 StatsCounterObserverImpl* observer = new StatsCounterObserverImpl(); | 76 StatsCounterObserverImpl* observer = new StatsCounterObserverImpl(); |
77 AvgCounter counter(&clock_, observer); | 77 AvgCounter counter(&clock_, observer, false); |
78 counter.Add(4); | 78 counter.Add(4); |
79 clock_.AdvanceTimeMilliseconds(kProcessIntervalMs - 1); | 79 clock_.AdvanceTimeMilliseconds(kProcessIntervalMs - 1); |
80 // Try trigger process (interval has not passed). | 80 // Try trigger process (interval has not passed). |
81 counter.Add(8); | 81 counter.Add(8); |
82 EXPECT_EQ(0, observer->num_calls_); | 82 EXPECT_EQ(0, observer->num_calls_); |
83 VerifyStatsIsNotSet(counter.GetStats()); | 83 VerifyStatsIsNotSet(counter.GetStats()); |
84 // Make process interval pass. | 84 // Make process interval pass. |
85 clock_.AdvanceTimeMilliseconds(1); | 85 clock_.AdvanceTimeMilliseconds(1); |
86 // Trigger process (sample included in next interval). | 86 // Trigger process (sample included in next interval). |
87 counter.Add(111); | 87 counter.Add(111); |
88 EXPECT_EQ(1, observer->num_calls_); | 88 EXPECT_EQ(1, observer->num_calls_); |
89 EXPECT_EQ(6, observer->last_sample_); | 89 EXPECT_EQ(6, observer->last_sample_); |
90 // Aggregated stats. | 90 // Aggregated stats. |
91 AggregatedStats stats = counter.GetStats(); | 91 AggregatedStats stats = counter.GetStats(); |
92 EXPECT_EQ(1, stats.num_samples); | 92 EXPECT_EQ(1, stats.num_samples); |
93 } | 93 } |
94 | 94 |
95 TEST_F(StatsCounterTest, TestMetric_AvgCounter) { | 95 TEST_F(StatsCounterTest, TestMetric_AvgCounter) { |
96 StatsCounterObserverImpl* observer = new StatsCounterObserverImpl(); | 96 StatsCounterObserverImpl* observer = new StatsCounterObserverImpl(); |
97 AvgCounter counter(&clock_, observer); | 97 AvgCounter counter(&clock_, observer, false); |
98 counter.Add(4); | 98 counter.Add(4); |
99 counter.Add(8); | 99 counter.Add(8); |
100 counter.Add(9); | 100 counter.Add(9); |
101 clock_.AdvanceTimeMilliseconds(kProcessIntervalMs); | 101 clock_.AdvanceTimeMilliseconds(kProcessIntervalMs); |
102 // Trigger process (sample included in next interval). | 102 // Trigger process (sample included in next interval). |
103 counter.Add(111); | 103 counter.Add(111); |
104 // Average per interval. | 104 // Average per interval. |
105 EXPECT_EQ(1, observer->num_calls_); | 105 EXPECT_EQ(1, observer->num_calls_); |
106 EXPECT_EQ(7, observer->last_sample_); | 106 EXPECT_EQ(7, observer->last_sample_); |
107 // Aggregated stats. | 107 // Aggregated stats. |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
199 EXPECT_EQ(1, observer->num_calls_); | 199 EXPECT_EQ(1, observer->num_calls_); |
200 EXPECT_EQ(94, observer->last_sample_); | 200 EXPECT_EQ(94, observer->last_sample_); |
201 // Aggregated stats. | 201 // Aggregated stats. |
202 AggregatedStats stats = counter.GetStats(); | 202 AggregatedStats stats = counter.GetStats(); |
203 EXPECT_EQ(1, stats.num_samples); | 203 EXPECT_EQ(1, stats.num_samples); |
204 EXPECT_EQ(94, stats.min); | 204 EXPECT_EQ(94, stats.min); |
205 EXPECT_EQ(94, stats.max); | 205 EXPECT_EQ(94, stats.max); |
206 } | 206 } |
207 | 207 |
208 TEST_F(StatsCounterTest, TestGetStats_MultipleIntervals) { | 208 TEST_F(StatsCounterTest, TestGetStats_MultipleIntervals) { |
209 AvgCounter counter(&clock_, nullptr); | 209 AvgCounter counter(&clock_, nullptr, false); |
210 const int kSample1 = 1; | 210 const int kSample1 = 1; |
211 const int kSample2 = 5; | 211 const int kSample2 = 5; |
212 const int kSample3 = 8; | 212 const int kSample3 = 8; |
213 const int kSample4 = 11; | 213 const int kSample4 = 11; |
214 const int kSample5 = 50; | 214 const int kSample5 = 50; |
215 AddSampleAndAdvance(kSample1, kProcessIntervalMs, &counter); | 215 AddSampleAndAdvance(kSample1, kProcessIntervalMs, &counter); |
216 AddSampleAndAdvance(kSample2, kProcessIntervalMs, &counter); | 216 AddSampleAndAdvance(kSample2, kProcessIntervalMs, &counter); |
217 AddSampleAndAdvance(kSample3, kProcessIntervalMs, &counter); | 217 AddSampleAndAdvance(kSample3, kProcessIntervalMs, &counter); |
218 AddSampleAndAdvance(kSample4, kProcessIntervalMs, &counter); | 218 AddSampleAndAdvance(kSample4, kProcessIntervalMs, &counter); |
219 AddSampleAndAdvance(kSample5, kProcessIntervalMs, &counter); | 219 AddSampleAndAdvance(kSample5, kProcessIntervalMs, &counter); |
220 // Trigger process (sample included in next interval). | 220 // Trigger process (sample included in next interval). |
221 counter.Add(111); | 221 counter.Add(111); |
222 AggregatedStats stats = counter.GetStats(); | 222 AggregatedStats stats = counter.GetStats(); |
223 EXPECT_EQ(5, stats.num_samples); | 223 EXPECT_EQ(5, stats.num_samples); |
224 EXPECT_EQ(kSample1, stats.min); | 224 EXPECT_EQ(kSample1, stats.min); |
225 EXPECT_EQ(kSample5, stats.max); | 225 EXPECT_EQ(kSample5, stats.max); |
226 EXPECT_EQ(15, stats.average); | 226 EXPECT_EQ(15, stats.average); |
227 } | 227 } |
228 | 228 |
229 TEST_F(StatsCounterTest, TestGetStatsTwice) { | 229 TEST_F(StatsCounterTest, TestGetStatsTwice) { |
230 const int kSample1 = 4; | 230 const int kSample1 = 4; |
231 const int kSample2 = 7; | 231 const int kSample2 = 7; |
232 AvgCounter counter(&clock_, nullptr); | 232 AvgCounter counter(&clock_, nullptr, false); |
233 AddSampleAndAdvance(kSample1, kProcessIntervalMs, &counter); | 233 AddSampleAndAdvance(kSample1, kProcessIntervalMs, &counter); |
234 // Trigger process (sample included in next interval). | 234 // Trigger process (sample included in next interval). |
235 counter.Add(kSample2); | 235 counter.Add(kSample2); |
236 AggregatedStats stats = counter.GetStats(); | 236 AggregatedStats stats = counter.GetStats(); |
237 EXPECT_EQ(1, stats.num_samples); | 237 EXPECT_EQ(1, stats.num_samples); |
238 EXPECT_EQ(kSample1, stats.min); | 238 EXPECT_EQ(kSample1, stats.min); |
239 EXPECT_EQ(kSample1, stats.max); | 239 EXPECT_EQ(kSample1, stats.max); |
240 // Trigger process (sample included in next interval). | 240 // Trigger process (sample included in next interval). |
241 clock_.AdvanceTimeMilliseconds(kProcessIntervalMs); | 241 clock_.AdvanceTimeMilliseconds(kProcessIntervalMs); |
242 counter.Add(111); | 242 counter.Add(111); |
(...skipping 20 matching lines...) Expand all Loading... |
263 EXPECT_EQ(2, observer->num_calls_); | 263 EXPECT_EQ(2, observer->num_calls_); |
264 EXPECT_EQ(300, observer->last_sample_); | 264 EXPECT_EQ(300, observer->last_sample_); |
265 // Aggregated stats. | 265 // Aggregated stats. |
266 AggregatedStats stats = counter.GetStats(); | 266 AggregatedStats stats = counter.GetStats(); |
267 EXPECT_EQ(2, stats.num_samples); | 267 EXPECT_EQ(2, stats.num_samples); |
268 EXPECT_EQ(100, stats.min); | 268 EXPECT_EQ(100, stats.min); |
269 EXPECT_EQ(300, stats.max); | 269 EXPECT_EQ(300, stats.max); |
270 EXPECT_EQ(200, stats.average); | 270 EXPECT_EQ(200, stats.average); |
271 } | 271 } |
272 | 272 |
273 TEST_F(StatsCounterTest, TestAvgCounter_IntervalsWithoutSamplesIgnored) { | 273 TEST_F(StatsCounterTest, TestAvgCounter_IntervalsWithoutSamplesIncluded) { |
274 StatsCounterObserverImpl* observer = new StatsCounterObserverImpl(); | 274 StatsCounterObserverImpl* observer = new StatsCounterObserverImpl(); |
275 AvgCounter counter(&clock_, observer); | 275 AvgCounter counter(&clock_, observer, true); |
276 AddSampleAndAdvance(6, kProcessIntervalMs * 4 - 1, &counter); | 276 AddSampleAndAdvance(6, kProcessIntervalMs * 4 - 1, &counter); |
277 // Trigger process (sample included in next interval). | 277 // Trigger process (sample included in next interval). |
278 counter.Add(8); | 278 counter.Add(8); |
279 // [6:1], two intervals without samples passed. | 279 // [6:3], 3 intervals passed (2 without samples -> last value reported). |
280 EXPECT_EQ(1, observer->num_calls_); | 280 AggregatedStats stats = counter.ProcessAndGetStats(); |
| 281 EXPECT_EQ(3, stats.num_samples); |
| 282 EXPECT_EQ(6, stats.min); |
| 283 EXPECT_EQ(6, stats.max); |
| 284 // Make next interval pass and verify stats: [6:3],[8:1] |
| 285 clock_.AdvanceTimeMilliseconds(1); |
| 286 counter.ProcessAndGetStats(); |
| 287 EXPECT_EQ(4, observer->num_calls_); |
| 288 EXPECT_EQ(8, observer->last_sample_); |
| 289 } |
| 290 |
| 291 TEST_F(StatsCounterTest, TestAvgCounter_WithPause) { |
| 292 StatsCounterObserverImpl* observer = new StatsCounterObserverImpl(); |
| 293 AvgCounter counter(&clock_, observer, true); |
| 294 // Add sample and advance 3 intervals (2 w/o samples -> last value reported). |
| 295 AddSampleAndAdvance(6, kProcessIntervalMs * 4 - 1, &counter); |
| 296 // Trigger process and verify stats: [6:3] |
| 297 counter.ProcessAndGetStats(); |
| 298 EXPECT_EQ(3, observer->num_calls_); |
281 EXPECT_EQ(6, observer->last_sample_); | 299 EXPECT_EQ(6, observer->last_sample_); |
282 // Make last interval pass. | 300 // Make next interval pass (1 without samples). |
| 301 // Process and pause. Verify stats: [6:4]. |
283 clock_.AdvanceTimeMilliseconds(1); | 302 clock_.AdvanceTimeMilliseconds(1); |
284 counter.Add(111); // Trigger process (sample included in next interval). | 303 counter.ProcessAndPause(); |
285 // [6:1],[8:1] | 304 EXPECT_EQ(4, observer->num_calls_); // Last value reported. |
286 EXPECT_EQ(2, observer->num_calls_); | 305 EXPECT_EQ(6, observer->last_sample_); |
287 EXPECT_EQ(8, observer->last_sample_); | 306 // Make next interval pass (1 without samples -> ignored while paused). |
288 // Aggregated stats. | 307 clock_.AdvanceTimeMilliseconds(kProcessIntervalMs * 2 - 1); |
289 AggregatedStats stats = counter.GetStats(); | 308 counter.Add(22); // Stops pause. |
290 EXPECT_EQ(2, stats.num_samples); | 309 EXPECT_EQ(4, observer->num_calls_); |
291 EXPECT_EQ(6, stats.min); | 310 EXPECT_EQ(6, observer->last_sample_); |
292 EXPECT_EQ(8, stats.max); | 311 // Make next interval pass, [6:4][22:1] |
| 312 clock_.AdvanceTimeMilliseconds(1); |
| 313 counter.ProcessAndGetStats(); |
| 314 EXPECT_EQ(5, observer->num_calls_); |
| 315 EXPECT_EQ(22, observer->last_sample_); |
| 316 // Make 1 interval pass (1 w/o samples -> pause stopped, last value reported). |
| 317 clock_.AdvanceTimeMilliseconds(kProcessIntervalMs); |
| 318 counter.ProcessAndGetStats(); |
| 319 EXPECT_EQ(6, observer->num_calls_); |
| 320 EXPECT_EQ(22, observer->last_sample_); |
293 } | 321 } |
294 | 322 |
295 TEST_F(StatsCounterTest, TestRateCounter_IntervalsWithoutSamplesIgnored) { | 323 TEST_F(StatsCounterTest, TestRateCounter_IntervalsWithoutSamplesIgnored) { |
296 const bool kIncludeEmptyIntervals = false; | 324 const bool kIncludeEmptyIntervals = false; |
297 StatsCounterObserverImpl* observer = new StatsCounterObserverImpl(); | 325 StatsCounterObserverImpl* observer = new StatsCounterObserverImpl(); |
298 const int kSample1 = 50; // 50 / 2 sec | 326 const int kSample1 = 50; // 50 / 2 sec |
299 const int kSample2 = 20; // 20 / 2 sec | 327 const int kSample2 = 20; // 20 / 2 sec |
300 RateCounter counter(&clock_, observer, kIncludeEmptyIntervals); | 328 RateCounter counter(&clock_, observer, kIncludeEmptyIntervals); |
301 counter.Add(kSample1); | 329 counter.Add(kSample1); |
302 clock_.AdvanceTimeMilliseconds(kProcessIntervalMs * 3 - 1); | 330 clock_.AdvanceTimeMilliseconds(kProcessIntervalMs * 3 - 1); |
303 // Trigger process (sample included in next interval). | 331 // Trigger process (sample included in next interval). |
304 counter.Add(kSample2); | 332 counter.Add(kSample2); |
305 // [25:1], one interval without samples passed. | 333 // [25:1], 2 intervals passed (1 without samples -> ignored). |
306 EXPECT_EQ(1, observer->num_calls_); | 334 EXPECT_EQ(1, observer->num_calls_); |
307 EXPECT_EQ(25, observer->last_sample_); | 335 EXPECT_EQ(25, observer->last_sample_); |
308 // Make last interval pass. | 336 // Make next interval pass and verify stats: [10:1],[25:1] |
309 clock_.AdvanceTimeMilliseconds(1); | 337 clock_.AdvanceTimeMilliseconds(1); |
310 counter.Add(111); // Trigger process (sample included in next interval). | 338 counter.ProcessAndGetStats(); |
311 // [10:1],[25:1] | |
312 EXPECT_EQ(2, observer->num_calls_); | 339 EXPECT_EQ(2, observer->num_calls_); |
313 EXPECT_EQ(10, observer->last_sample_); | 340 EXPECT_EQ(10, observer->last_sample_); |
314 // Aggregated stats. | |
315 AggregatedStats stats = counter.GetStats(); | |
316 EXPECT_EQ(2, stats.num_samples); | |
317 EXPECT_EQ(10, stats.min); | |
318 EXPECT_EQ(25, stats.max); | |
319 } | 341 } |
320 | 342 |
321 TEST_F(StatsCounterTest, TestRateCounter_IntervalsWithoutSamplesIncluded) { | 343 TEST_F(StatsCounterTest, TestRateCounter_IntervalsWithoutSamplesIncluded) { |
322 const bool kIncludeEmptyIntervals = true; | 344 const bool kIncludeEmptyIntervals = true; |
323 StatsCounterObserverImpl* observer = new StatsCounterObserverImpl(); | 345 StatsCounterObserverImpl* observer = new StatsCounterObserverImpl(); |
324 const int kSample1 = 50; // 50 / 2 sec | 346 const int kSample1 = 50; // 50 / 2 sec |
325 const int kSample2 = 20; // 20 / 2 sec | 347 const int kSample2 = 20; // 20 / 2 sec |
326 RateCounter counter(&clock_, observer, kIncludeEmptyIntervals); | 348 RateCounter counter(&clock_, observer, kIncludeEmptyIntervals); |
327 counter.Add(kSample1); | 349 counter.Add(kSample1); |
328 clock_.AdvanceTimeMilliseconds(kProcessIntervalMs * 3 - 1); | 350 clock_.AdvanceTimeMilliseconds(kProcessIntervalMs * 3 - 1); |
329 // Trigger process (sample included in next interval). | 351 // Trigger process (sample included in next interval). |
330 counter.Add(kSample2); | 352 counter.Add(kSample2); |
331 // [0:1],[25:1], one interval without samples passed. | 353 // [0:1],[25:1], 2 intervals passed (1 without samples -> zero reported). |
332 EXPECT_EQ(2, observer->num_calls_); | 354 EXPECT_EQ(2, observer->num_calls_); |
333 EXPECT_EQ(25, observer->last_sample_); | 355 EXPECT_EQ(0, observer->last_sample_); |
334 // Make last interval pass. | 356 // Make last interval pass and verify stats: [0:1],[10:1],[25:1] |
335 clock_.AdvanceTimeMilliseconds(1); | 357 clock_.AdvanceTimeMilliseconds(1); |
336 counter.Add(111); // Trigger process (sample included in next interval). | 358 AggregatedStats stats = counter.ProcessAndGetStats(); |
337 // [0:1],[10:1],[25:1] | 359 EXPECT_EQ(25, stats.max); |
338 EXPECT_EQ(3, observer->num_calls_); | 360 EXPECT_EQ(3, observer->num_calls_); |
339 EXPECT_EQ(10, observer->last_sample_); | 361 EXPECT_EQ(10, observer->last_sample_); |
340 // Aggregated stats. | 362 } |
341 AggregatedStats stats = counter.GetStats(); | 363 |
342 EXPECT_EQ(3, stats.num_samples); | 364 TEST_F(StatsCounterTest, TestRateAccCounter_IntervalsWithoutSamplesIncluded) { |
343 EXPECT_EQ(0, stats.min); | 365 StatsCounterObserverImpl* observer = new StatsCounterObserverImpl(); |
344 EXPECT_EQ(25, stats.max); | 366 RateAccCounter counter(&clock_, observer, true); |
| 367 VerifyStatsIsNotSet(counter.ProcessAndGetStats()); |
| 368 // Advance one interval and verify stats. |
| 369 clock_.AdvanceTimeMilliseconds(kProcessIntervalMs); |
| 370 VerifyStatsIsNotSet(counter.ProcessAndGetStats()); |
| 371 // Add sample and advance 3 intervals (2 w/o samples -> zero reported). |
| 372 counter.Set(12); |
| 373 clock_.AdvanceTimeMilliseconds(kProcessIntervalMs * 4 - 1); |
| 374 // Trigger process and verify stats: [0:2][6:1] |
| 375 counter.ProcessAndGetStats(); |
| 376 EXPECT_EQ(3, observer->num_calls_); |
| 377 EXPECT_EQ(0, observer->last_sample_); |
| 378 // Make next interval pass (1 w/o samples -> zero reported), [0:3][6:1] |
| 379 clock_.AdvanceTimeMilliseconds(1); |
| 380 counter.ProcessAndGetStats(); |
| 381 EXPECT_EQ(4, observer->num_calls_); |
| 382 EXPECT_EQ(0, observer->last_sample_); |
| 383 // Insert sample and advance non-complete interval, no change, [0:3][6:1] |
| 384 clock_.AdvanceTimeMilliseconds(kProcessIntervalMs - 1); |
| 385 counter.Set(60); |
| 386 EXPECT_EQ(4, observer->num_calls_); |
| 387 // Make next interval pass, [0:3][6:1][24:1] |
| 388 clock_.AdvanceTimeMilliseconds(1); |
| 389 AggregatedStats stats = counter.ProcessAndGetStats(); |
| 390 EXPECT_EQ(5, observer->num_calls_); |
| 391 EXPECT_EQ(24, observer->last_sample_); |
| 392 EXPECT_EQ(6, stats.average); |
| 393 } |
| 394 |
| 395 TEST_F(StatsCounterTest, TestRateAccCounter_IntervalsWithoutSamplesIgnored) { |
| 396 StatsCounterObserverImpl* observer = new StatsCounterObserverImpl(); |
| 397 RateAccCounter counter(&clock_, observer, false); |
| 398 // Add sample and advance 3 intervals (2 w/o samples -> ignored). |
| 399 counter.Set(12); |
| 400 clock_.AdvanceTimeMilliseconds(kProcessIntervalMs * 4 - 1); |
| 401 // Trigger process and verify stats: [6:1] |
| 402 counter.ProcessAndGetStats(); |
| 403 EXPECT_EQ(1, observer->num_calls_); |
| 404 EXPECT_EQ(6, observer->last_sample_); |
| 405 // Make next interval pass (1 w/o samples -> ignored), [6:1] |
| 406 clock_.AdvanceTimeMilliseconds(1); |
| 407 counter.ProcessAndGetStats(); |
| 408 EXPECT_EQ(1, observer->num_calls_); |
| 409 // Insert sample and advance non-complete interval, no change, [6:1] |
| 410 clock_.AdvanceTimeMilliseconds(kProcessIntervalMs - 1); |
| 411 counter.Set(60); |
| 412 counter.ProcessAndGetStats(); |
| 413 EXPECT_EQ(1, observer->num_calls_); |
| 414 // Make next interval pass, [6:1][24:1] |
| 415 clock_.AdvanceTimeMilliseconds(1); |
| 416 counter.ProcessAndGetStats(); |
| 417 EXPECT_EQ(2, observer->num_calls_); |
| 418 EXPECT_EQ(24, observer->last_sample_); |
345 } | 419 } |
346 | 420 |
347 } // namespace webrtc | 421 } // namespace webrtc |
OLD | NEW |