|
41 | 41 | import com.google.firebase.perf.v1.GaugeMetadata;
|
42 | 42 | import com.google.firebase.perf.v1.GaugeMetric;
|
43 | 43 | import com.google.testing.timing.FakeScheduledExecutorService;
|
| 44 | +import java.util.Random; |
44 | 45 | import java.util.concurrent.TimeUnit;
|
45 | 46 | import org.junit.Before;
|
46 | 47 | import org.junit.Ignore;
|
@@ -323,38 +324,37 @@ public void stopCollectingGauges_invalidGaugeCollectionFrequency_appInForeground
|
323 | 324 | }
|
324 | 325 |
|
325 | 326 | @Test
|
326 |
| - @Ignore // TODO(b/394127311): Change to verify GaugeCounter. |
327 |
| - public void testStartCollectingGaugesStartsAJobToConsumeTheGeneratedMetrics() { |
| 327 | + public void testGaugeCounterStartsAJobToConsumeTheGeneratedMetrics() { |
328 | 328 | PerfSession fakeSession = createTestSession(1);
|
| 329 | + testGaugeManager.setApplicationProcessState(ApplicationProcessState.FOREGROUND); |
329 | 330 | testGaugeManager.startCollectingGauges(fakeSession);
|
| 331 | + GaugeCounter.INSTANCE.setGaugeManager(testGaugeManager); |
| 332 | + |
| 333 | + // There's no job to log the gauges. |
| 334 | + assertThat(fakeScheduledExecutorService.isEmpty()).isTrue(); |
| 335 | + |
| 336 | + // Generate metrics that don't exceed the GaugeCounter.MAX_COUNT. |
| 337 | + generateMetricsAndIncrementCounter(24); |
330 | 338 |
|
| 339 | + // There's still no job to log the gauges. |
| 340 | + assertThat(fakeScheduledExecutorService.isEmpty()).isTrue(); |
| 341 | + |
| 342 | + generateMetricsAndIncrementCounter(2); |
331 | 343 | assertThat(fakeScheduledExecutorService.isEmpty()).isFalse();
|
332 | 344 | assertThat(fakeScheduledExecutorService.getDelayToNextTask(TimeUnit.MILLISECONDS))
|
333 |
| - .isEqualTo( |
334 |
| - getMinimumBackgroundCollectionFrequency() |
335 |
| - * APPROX_NUMBER_OF_DATA_POINTS_PER_GAUGE_METRIC); |
336 |
| - |
337 |
| - CpuMetricReading fakeCpuMetricReading1 = createFakeCpuMetricReading(200, 100); |
338 |
| - CpuMetricReading fakeCpuMetricReading2 = createFakeCpuMetricReading(300, 200); |
339 |
| - fakeCpuGaugeCollector.cpuMetricReadings.add(fakeCpuMetricReading1); |
340 |
| - fakeCpuGaugeCollector.cpuMetricReadings.add(fakeCpuMetricReading2); |
341 |
| - |
342 |
| - AndroidMemoryReading fakeMemoryMetricReading1 = |
343 |
| - createFakeAndroidMetricReading(/* currentUsedAppJavaHeapMemoryKb= */ 123456); |
344 |
| - AndroidMemoryReading fakeMemoryMetricReading2 = |
345 |
| - createFakeAndroidMetricReading(/* currentUsedAppJavaHeapMemoryKb= */ 23454678); |
346 |
| - fakeMemoryGaugeCollector.memoryMetricReadings.add(fakeMemoryMetricReading1); |
347 |
| - fakeMemoryGaugeCollector.memoryMetricReadings.add(fakeMemoryMetricReading2); |
| 345 | + .isEqualTo(TIME_TO_WAIT_BEFORE_FLUSHING_GAUGES_QUEUE_MS); |
348 | 346 |
|
349 | 347 | fakeScheduledExecutorService.simulateSleepExecutingAtMostOneTask();
|
350 | 348 | GaugeMetric recordedGaugeMetric =
|
351 |
| - getLastRecordedGaugeMetric(ApplicationProcessState.BACKGROUND, 1); |
| 349 | + getLastRecordedGaugeMetric(ApplicationProcessState.FOREGROUND, 1); |
352 | 350 |
|
353 |
| - assertThatCpuGaugeMetricWasSentToTransport( |
354 |
| - testSessionId(1), recordedGaugeMetric, fakeCpuMetricReading1, fakeCpuMetricReading2); |
| 351 | + // It flushes all metrics in the ConcurrentLinkedQueues. |
| 352 | + int recordedGaugeMetricsCount = |
| 353 | + recordedGaugeMetric.getAndroidMemoryReadingsCount() |
| 354 | + + recordedGaugeMetric.getCpuMetricReadingsCount(); |
| 355 | + assertThat(recordedGaugeMetricsCount).isEqualTo(26); |
355 | 356 |
|
356 |
| - assertThatMemoryGaugeMetricWasSentToTransport( |
357 |
| - testSessionId(1), recordedGaugeMetric, fakeMemoryMetricReading1, fakeMemoryMetricReading2); |
| 357 | + assertThat(recordedGaugeMetric.getSessionId()).isEqualTo(testSessionId(1)); |
358 | 358 | }
|
359 | 359 |
|
360 | 360 | @Test
|
@@ -519,6 +519,20 @@ private long getMinimumBackgroundCollectionFrequency() {
|
519 | 519 | return DEFAULT_CPU_GAUGE_COLLECTION_FREQUENCY_BG_MS;
|
520 | 520 | }
|
521 | 521 |
|
| 522 | + // Simulates the behavior of Cpu and Memory Gauge collector. |
| 523 | + private void generateMetricsAndIncrementCounter(int count) { |
| 524 | + Random random = new Random(); |
| 525 | + for (int i = 0; i < count; ++i) { |
| 526 | + if (random.nextInt(2) == 0) { |
| 527 | + fakeCpuGaugeCollector.cpuMetricReadings.add(createFakeCpuMetricReading(100, 200)); |
| 528 | + GaugeCounter.INSTANCE.incrementCounter(); |
| 529 | + } else { |
| 530 | + fakeMemoryGaugeCollector.memoryMetricReadings.add(createFakeAndroidMetricReading(100)); |
| 531 | + GaugeCounter.INSTANCE.incrementCounter(); |
| 532 | + } |
| 533 | + } |
| 534 | + } |
| 535 | + |
522 | 536 | private CpuMetricReading createFakeCpuMetricReading(long userTimeUs, long systemTimeUs) {
|
523 | 537 | CpuMetricReading.Builder fakeMetricReadingBuilder = CpuMetricReading.newBuilder();
|
524 | 538 | fakeMetricReadingBuilder.setClientTimeUs(System.currentTimeMillis());
|
|
0 commit comments