Skip to content

Commit 4ed0531

Browse files
authored
Add gauge counter to collector tests (#6991)
1 parent 1cad5d5 commit 4ed0531

File tree

8 files changed

+61
-13
lines changed

8 files changed

+61
-13
lines changed

firebase-perf/src/main/java/com/google/firebase/perf/session/gauges/CpuGaugeCollector.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ private synchronized void scheduleCpuMetricCollectionWithRate(
166166
CpuMetricReading currCpuReading = syncCollectCpuMetric(referenceTime);
167167
if (currCpuReading != null) {
168168
cpuMetricReadings.add(currCpuReading);
169-
GaugeCounter.INSTANCE.incrementCounter();
169+
GaugeCounter.incrementCounter();
170170
}
171171
},
172172
/* initialDelay */ 0,
@@ -186,7 +186,7 @@ private synchronized void scheduleCpuMetricCollectionOnce(Timer referenceTime) {
186186
CpuMetricReading currCpuReading = syncCollectCpuMetric(referenceTime);
187187
if (currCpuReading != null) {
188188
cpuMetricReadings.add(currCpuReading);
189-
GaugeCounter.INSTANCE.incrementCounter();
189+
GaugeCounter.incrementCounter();
190190
}
191191
},
192192
/* initialDelay */ 0,

firebase-perf/src/main/java/com/google/firebase/perf/session/gauges/GaugeCounter.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ object GaugeCounter {
3131
@set:JvmStatic
3232
var gaugeManager: GaugeManager = GaugeManager.getInstance()
3333

34+
@JvmStatic
3435
fun incrementCounter() {
3536
val metricsCount = counter.incrementAndGet()
3637

@@ -41,15 +42,17 @@ object GaugeCounter {
4142
logger.debug("Incremented logger to $metricsCount")
4243
}
4344

45+
@JvmStatic
4446
fun decrementCounter() {
4547
val curr = counter.decrementAndGet()
4648
logger.debug("Decremented logger to $curr")
4749
}
4850

4951
@VisibleForTesting(otherwise = VisibleForTesting.NONE)
52+
@JvmStatic
5053
fun resetCounter() {
5154
counter.set(0)
5255
}
5356

54-
@VisibleForTesting(otherwise = VisibleForTesting.NONE) fun count(): Int = counter.get()
57+
@VisibleForTesting(otherwise = VisibleForTesting.NONE) @JvmStatic fun count(): Int = counter.get()
5558
}

firebase-perf/src/main/java/com/google/firebase/perf/session/gauges/GaugeManager.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -250,19 +250,18 @@ private void logExistingGaugeMetrics(
250250
*/
251251
private void syncFlush(String sessionId, ApplicationProcessState appState) {
252252
GaugeMetric.Builder gaugeMetricBuilder = GaugeMetric.newBuilder();
253-
GaugeCounter gaugeCounter = GaugeCounter.INSTANCE;
254253

255254
// Adding CPU metric readings.
256255
while (!cpuGaugeCollector.get().cpuMetricReadings.isEmpty()) {
257256
gaugeMetricBuilder.addCpuMetricReadings(cpuGaugeCollector.get().cpuMetricReadings.poll());
258-
gaugeCounter.decrementCounter();
257+
GaugeCounter.decrementCounter();
259258
}
260259

261260
// Adding Memory metric readings.
262261
while (!memoryGaugeCollector.get().memoryMetricReadings.isEmpty()) {
263262
gaugeMetricBuilder.addAndroidMemoryReadings(
264263
memoryGaugeCollector.get().memoryMetricReadings.poll());
265-
gaugeCounter.decrementCounter();
264+
GaugeCounter.decrementCounter();
266265
}
267266

268267
// Adding Session ID info.

firebase-perf/src/main/java/com/google/firebase/perf/session/gauges/MemoryGaugeCollector.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ private synchronized void scheduleMemoryMetricCollectionWithRate(
129129
AndroidMemoryReading memoryReading = syncCollectMemoryMetric(referenceTime);
130130
if (memoryReading != null) {
131131
memoryMetricReadings.add(memoryReading);
132-
GaugeCounter.INSTANCE.incrementCounter();
132+
GaugeCounter.incrementCounter();
133133
}
134134
},
135135
/* initialDelay */ 0,
@@ -149,7 +149,7 @@ private synchronized void scheduleMemoryMetricCollectionOnce(Timer referenceTime
149149
AndroidMemoryReading memoryReading = syncCollectMemoryMetric(referenceTime);
150150
if (memoryReading != null) {
151151
memoryMetricReadings.add(memoryReading);
152-
GaugeCounter.INSTANCE.incrementCounter();
152+
GaugeCounter.incrementCounter();
153153
}
154154
},
155155
/* initialDelay */ 0,

firebase-perf/src/test/java/com/google/firebase/perf/FirebasePerformanceTestBase.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public class FirebasePerformanceTestBase {
5959
@BeforeClass
6060
public static void setUpBeforeClass() {
6161
// TODO(b/394127311): Explore removing this.
62-
GaugeCounter.INSTANCE.resetCounter();
62+
GaugeCounter.resetCounter();
6363
}
6464

6565
@Before

firebase-perf/src/test/java/com/google/firebase/perf/session/gauges/CpuGaugeCollectorTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,11 @@ public void tearDown() {
6060
@Test
6161
public void testStartCollectingAddsCpuMetricReadingsToTheConcurrentLinkedQueue()
6262
throws Exception {
63+
int priorGaugeCount = GaugeCounter.count();
6364
testGaugeCollector.startCollecting(100, new Timer());
6465
fakeScheduledExecutorService.simulateSleepExecutingAtMostOneTask();
6566
assertThat(testGaugeCollector.cpuMetricReadings).hasSize(1);
67+
assertThat(GaugeCounter.count()).isEqualTo(priorGaugeCount + 1);
6668
}
6769

6870
@Test
@@ -246,11 +248,17 @@ public void testCollectCpuMetricDoesntStartCollectingWithInvalidCpuMetricCollect
246248

247249
@Test
248250
public void testCollectOnce_addOnlyOneCpuMetricReadingToQueue() {
251+
int priorGaugeCount = GaugeCounter.count();
249252
assertThat(testGaugeCollector.cpuMetricReadings).isEmpty();
250253
testGaugeCollector.collectOnce(new Timer());
251254

252255
fakeScheduledExecutorService.simulateSleepExecutingAtMostOneTask();
256+
257+
// Simulate running an additional task.
258+
fakeScheduledExecutorService.simulateSleepExecutingAtMostOneTask();
259+
253260
assertThat(testGaugeCollector.cpuMetricReadings).hasSize(1);
261+
assertThat(GaugeCounter.count()).isEqualTo(priorGaugeCount + 1);
254262
}
255263

256264
@Test

firebase-perf/src/test/java/com/google/firebase/perf/session/gauges/GaugeManagerTest.java

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ public void stopCollectingGauges_invalidGaugeCollectionFrequency_appInForeground
331331
}
332332

333333
@Test
334-
public void testGaugeCounterStartsAJobToConsumeTheGeneratedMetrics() throws InterruptedException {
334+
public void testGaugeCounterStartsAJobToConsumeTheGeneratedMetrics() {
335335
PerfSession fakeSession = createTestSession(1);
336336
testGaugeManager.setApplicationProcessState(ApplicationProcessState.FOREGROUND);
337337
testGaugeManager.startCollectingGauges(fakeSession);
@@ -371,6 +371,36 @@ public void testGaugeCounterStartsAJobToConsumeTheGeneratedMetrics() throws Inte
371371
assertThat(recordedGaugeMetric.getSessionId()).isEqualTo(testSessionId(1));
372372
}
373373

374+
@Test
375+
public void testGaugeCounterIsDecrementedWhenLogged() {
376+
int priorGaugeCounter = GaugeCounter.count();
377+
378+
PerfSession fakeSession = createTestSession(1);
379+
testGaugeManager.setApplicationProcessState(ApplicationProcessState.FOREGROUND);
380+
testGaugeManager.startCollectingGauges(fakeSession);
381+
GaugeCounter.setGaugeManager(testGaugeManager);
382+
383+
// There's no job to log the gauges.
384+
assertThat(fakeScheduledExecutorService.isEmpty()).isTrue();
385+
386+
// Generate metrics that don't exceed the GaugeCounter.MAX_COUNT.
387+
generateMetricsAndIncrementCounter(20);
388+
389+
// There's still no job to log the gauges.
390+
assertThat(fakeScheduledExecutorService.isEmpty()).isTrue();
391+
392+
generateMetricsAndIncrementCounter(10);
393+
394+
assertThat(fakeScheduledExecutorService.isEmpty()).isFalse();
395+
assertThat(fakeScheduledExecutorService.getDelayToNextTask(TimeUnit.MILLISECONDS))
396+
.isEqualTo(TIME_TO_WAIT_BEFORE_FLUSHING_GAUGES_QUEUE_MS);
397+
398+
assertThat(GaugeCounter.count()).isEqualTo(priorGaugeCounter + 30);
399+
fakeScheduledExecutorService.simulateSleepExecutingAtMostOneTask();
400+
401+
assertThat(GaugeCounter.count()).isEqualTo(priorGaugeCounter);
402+
}
403+
374404
@Test
375405
public void testUpdateAppStateHandlesMultipleAppStates() {
376406
PerfSession fakeSession = createTestSession(1);
@@ -429,7 +459,7 @@ public void testGaugeManagerHandlesMultipleSessionIds() {
429459
fakeSession.setGaugeAndEventCollectionEnabled(true);
430460
testGaugeManager.setApplicationProcessState(ApplicationProcessState.BACKGROUND);
431461
testGaugeManager.startCollectingGauges(fakeSession);
432-
GaugeCounter.INSTANCE.setGaugeManager(testGaugeManager);
462+
GaugeCounter.setGaugeManager(testGaugeManager);
433463

434464
// Generate metrics that don't exceed the GaugeCounter.MAX_COUNT.
435465
generateMetricsAndIncrementCounter(10);
@@ -615,10 +645,10 @@ private void generateMetricsAndIncrementCounter(int count) {
615645
for (int i = 0; i < count; ++i) {
616646
if (random.nextInt(2) == 0) {
617647
fakeCpuGaugeCollector.cpuMetricReadings.add(createFakeCpuMetricReading(100, 200));
618-
GaugeCounter.INSTANCE.incrementCounter();
648+
GaugeCounter.incrementCounter();
619649
} else {
620650
fakeMemoryGaugeCollector.memoryMetricReadings.add(createFakeAndroidMetricReading(100));
621-
GaugeCounter.INSTANCE.incrementCounter();
651+
GaugeCounter.incrementCounter();
622652
}
623653
}
624654
}

firebase-perf/src/test/java/com/google/firebase/perf/session/gauges/MemoryGaugeCollectorTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,11 @@ private void mockMemory() {
5959

6060
@Test
6161
public void testStartCollecting_addsMemoryMetricReadingsToQueue() {
62+
int priorGaugeCount = GaugeCounter.count();
6263
testGaugeCollector.startCollecting(/* memoryMetricCollectionRateMs= */ 100, new Timer());
6364
fakeScheduledExecutorService.simulateSleepExecutingAtMostOneTask();
6465
assertThat(testGaugeCollector.memoryMetricReadings).hasSize(1);
66+
assertThat(GaugeCounter.count()).isEqualTo(priorGaugeCount + 1);
6567
}
6668

6769
@Test
@@ -148,11 +150,17 @@ public void testCollectedMemoryMetric_containsApproximatelyCorrectTimestamp() {
148150

149151
@Test
150152
public void testCollectOnce_addOnlyOneMemoryMetricReadingToQueue() {
153+
int priorGaugeCount = GaugeCounter.count();
151154
assertThat(testGaugeCollector.memoryMetricReadings).isEmpty();
152155
testGaugeCollector.collectOnce(new Timer());
153156

154157
fakeScheduledExecutorService.simulateSleepExecutingAtMostOneTask();
158+
159+
// Simulate running an additional task.
160+
fakeScheduledExecutorService.simulateSleepExecutingAtMostOneTask();
161+
155162
assertThat(testGaugeCollector.memoryMetricReadings).hasSize(1);
163+
assertThat(GaugeCounter.count()).isEqualTo(priorGaugeCount + 1);
156164
}
157165

158166
@Test

0 commit comments

Comments
 (0)