Skip to content

Commit 456bbc8

Browse files
committed
fix Julio's comments
1 parent f850dee commit 456bbc8

File tree

1 file changed

+48
-72
lines changed

1 file changed

+48
-72
lines changed

firebase-perf/src/test/java/com/google/firebase/perf/application/FrameMetricsRecorderTest.java

Lines changed: 48 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818
import static com.google.common.truth.Truth.assertThat;
1919
import static org.mockito.ArgumentMatchers.any;
2020
import static org.mockito.Mockito.doReturn;
21-
import static org.mockito.Mockito.times;
22-
import static org.mockito.Mockito.verify;
2321
import static org.mockito.MockitoAnnotations.initMocks;
2422

2523
import android.app.Activity;
@@ -31,11 +29,9 @@
3129
import com.google.firebase.perf.metrics.FrameMetricsCalculator.PerfFrameMetrics;
3230
import com.google.firebase.perf.util.Optional;
3331
import java.util.HashMap;
34-
import java.util.List;
3532
import org.junit.Before;
3633
import org.junit.Test;
3734
import org.junit.runner.RunWith;
38-
import org.mockito.ArgumentCaptor;
3935
import org.mockito.Mock;
4036
import org.robolectric.Robolectric;
4137
import org.robolectric.RobolectricTestRunner;
@@ -61,56 +57,39 @@ public void setUp() {
6157
stubFrameMetricsAggregatorData(fma, frameTimesDefault);
6258
}
6359

64-
/** FrameMetricsAggregator misuse prevention tests. Only 1 Activity per FMA. */
6560
@Test
66-
public void frameMetricsAggregator_shouldOnlyUseTheSameSingleActivity() {
67-
ArgumentCaptor<Activity> activityCaptor = ArgumentCaptor.forClass(Activity.class);
68-
recorder.start();
69-
recorder.stop();
61+
public void stop_whileNotStarted_returnsEmptyResult() {
62+
// nothing ever started
63+
Optional<PerfFrameMetrics> result = recorder.stop();
64+
assertThat(result.isAvailable()).isFalse();
65+
// previous recording ended but no one has not started
7066
recorder.start();
7167
recorder.stop();
72-
verify(fma, times(2)).add(activityCaptor.capture());
73-
verify(fma, times(2)).remove(activityCaptor.capture());
74-
List<Activity> activities = activityCaptor.getAllValues();
75-
assertThat(activities.stream().allMatch(a -> a == activity)).isTrue();
76-
}
77-
78-
@Test
79-
public void start_whileAlreadyStarted_doesNotCallFMATwice() {
80-
recorder.start();
81-
recorder.start();
82-
verify(fma, times(1)).add(any());
68+
Optional<PerfFrameMetrics> result2 = recorder.stop();
69+
assertThat(result2.isAvailable()).isFalse();
8370
}
8471

8572
@Test
86-
public void start_afterPreviousEnded_doesCallFMASuccessfully() {
73+
public void startAndStop_calledTwice_ignoresSecondCall() {
8774
recorder.start();
88-
recorder.stop();
89-
recorder.start();
90-
verify(fma, times(2)).add(any());
91-
}
75+
recorder.start(); // 2nd call is ignored
76+
stubFrameMetricsAggregatorData(fma, new int[][] {{1, 1}, {17, 3}, {800, 1}});
77+
Optional<PerfFrameMetrics> result1 = recorder.stop();
78+
stubFrameMetricsAggregatorData(fma, frameTimes2); // 2nd call is ignored
79+
Optional<PerfFrameMetrics> result2 = recorder.stop();
9280

93-
@Test
94-
public void stop_whileNotStarted_returnsEmptyResult() {
95-
Optional<PerfFrameMetrics> result;
96-
result = recorder.stop();
97-
assertThat(result.isAvailable()).isFalse();
98-
}
81+
assertThat(result1.isAvailable()).isTrue();
82+
assertThat(result2.isAvailable()).isFalse();
9983

100-
@Test
101-
public void stop_calledTwice_returnsEmptyResult() {
102-
Optional<PerfFrameMetrics> result;
103-
recorder.start();
104-
recorder.stop();
105-
result = recorder.stop();
106-
assertThat(result.isAvailable()).isFalse();
84+
assertThat(result1.get().getTotalFrames()).isEqualTo(1 + 3 + 1);
85+
assertThat(result1.get().getTotalFrames()).isEqualTo(3 + 1);
86+
assertThat(result1.get().getTotalFrames()).isEqualTo(1);
10787
}
10888

10989
@Test
11090
public void startAndStop_calledInCorrectOrder_returnsValidResult() {
111-
Optional<PerfFrameMetrics> result;
11291
recorder.start();
113-
result = recorder.stop();
92+
Optional<PerfFrameMetrics> result = recorder.stop();
11493
assertThat(result.isAvailable()).isTrue();
11594
assertThat(result.get().getTotalFrames()).isEqualTo(3);
11695
assertThat(result.get().getSlowFrames()).isEqualTo(2);
@@ -120,76 +99,74 @@ public void startAndStop_calledInCorrectOrder_returnsValidResult() {
12099
@Test
121100
public void startAndStopSubTrace_activityRecordingNeverStarted_returnsEmptyResult() {
122101
Fragment fragment = new Fragment();
123-
Optional<PerfFrameMetrics> result;
124102

125103
stubFrameMetricsAggregatorData(fma, frameTimes1);
126104
recorder.startSubTrace(fragment);
127105
stubFrameMetricsAggregatorData(fma, frameTimes2);
128-
result = recorder.stopSubTrace(fragment);
106+
Optional<PerfFrameMetrics> result = recorder.stopSubTrace(fragment);
129107
assertThat(result.isAvailable()).isFalse();
130108
}
131109

132110
@Test
133111
public void startAndStopSubTrace_activityRecordingHasEnded_returnsEmptyResult() {
134112
Fragment fragment = new Fragment();
135-
Optional<PerfFrameMetrics> result;
136113

137114
recorder.start();
138115
recorder.stop();
139116
stubFrameMetricsAggregatorData(fma, frameTimes1);
140117
recorder.startSubTrace(fragment);
141118
stubFrameMetricsAggregatorData(fma, frameTimes2);
142-
result = recorder.stopSubTrace(fragment);
119+
Optional<PerfFrameMetrics> result = recorder.stopSubTrace(fragment);
143120
assertThat(result.isAvailable()).isFalse();
144121
}
145122

123+
/**
124+
* This scenario happens only when we hook on to the same instance of fragment twice, which should
125+
* never happen
126+
*/
146127
@Test
147128
public void startAndStopSubTrace_whenCalledTwice_ignoresSecondCall() {
148129
Fragment fragment = new Fragment();
149-
Optional<PerfFrameMetrics> result1;
150-
Optional<PerfFrameMetrics> result2;
151130

152-
// Happens only when we hook on to the same instance of fragment twice. Very unlikely.
131+
// comments are in this format: total frames, slow frames, frozen frames
153132
recorder.start();
154133
stubFrameMetricsAggregatorData(fma, new int[][] {{1, 1}, {17, 1}, {800, 1}}); // 3, 2, 1
155134
recorder.startSubTrace(fragment);
156-
stubFrameMetricsAggregatorData(fma, new int[][] {{1, 2}, {17, 3}, {800, 2}}); // 7, 5, 2
157-
recorder.startSubTrace(fragment);
135+
stubFrameMetricsAggregatorData(fma, new int[][] {{1, 2}, {17, 3}, {800, 2}}); // ignored
136+
recorder.startSubTrace(fragment); // this call is ignored
158137
stubFrameMetricsAggregatorData(fma, new int[][] {{1, 5}, {17, 4}, {800, 5}}); // 14, 9, 5
159-
result1 = recorder.stopSubTrace(fragment);
160-
stubFrameMetricsAggregatorData(fma, new int[][] {{1, 6}, {17, 5}, {800, 5}}); // 16, 10, 5
161-
result2 = recorder.stopSubTrace(fragment);
138+
Optional<PerfFrameMetrics> result1 = recorder.stopSubTrace(fragment);
139+
stubFrameMetricsAggregatorData(fma, new int[][] {{1, 6}, {17, 5}, {800, 5}}); // ignored
140+
Optional<PerfFrameMetrics> result2 = recorder.stopSubTrace(fragment); // this call is ignored
162141

163142
// total = 14 - 3 = 11, slow = 9 - 2 = 7, frozen = 5 - 1 = 4
164-
assertThat(result1.get().getTotalFrames()).isEqualTo(11);
165-
assertThat(result1.get().getSlowFrames()).isEqualTo(7);
166-
assertThat(result1.get().getFrozenFrames()).isEqualTo(4);
143+
assertThat(result1.get().getTotalFrames()).isEqualTo(14 - 3);
144+
assertThat(result1.get().getSlowFrames()).isEqualTo(9 - 2);
145+
assertThat(result1.get().getFrozenFrames()).isEqualTo(5 - 1);
167146
assertThat(result2.isAvailable()).isFalse();
168147
}
169148

170149
@Test
171150
public void stopAndStopSubTrace_whenNoSubTraceWithGivenKeyExists_returnsEmptyResult() {
172151
Fragment fragment1 = new Fragment();
173152
Fragment fragment2 = new Fragment();
174-
Optional<PerfFrameMetrics> result;
175153

176154
recorder.start();
177155

178156
recorder.startSubTrace(fragment1);
179-
result = recorder.stopSubTrace(fragment2);
157+
Optional<PerfFrameMetrics> result = recorder.stopSubTrace(fragment2);
180158

181159
assertThat(result.isAvailable()).isFalse();
182160
}
183161

184162
@Test
185163
public void startAndStopSubTrace_duringActivityRecording_returnsValidResult() {
186164
Fragment fragment = new Fragment();
187-
Optional<PerfFrameMetrics> result;
188165
recorder.start();
189166
stubFrameMetricsAggregatorData(fma, frameTimes1);
190167
recorder.startSubTrace(fragment);
191168
stubFrameMetricsAggregatorData(fma, frameTimes2);
192-
result = recorder.stopSubTrace(fragment);
169+
Optional<PerfFrameMetrics> result = recorder.stopSubTrace(fragment);
193170
assertThat(result.isAvailable()).isTrue();
194171
// frameTimes2 - frameTimes1
195172
assertThat(result.get().getTotalFrames()).isEqualTo(9);
@@ -201,26 +178,25 @@ public void startAndStopSubTrace_duringActivityRecording_returnsValidResult() {
201178
public void startAndStopSubTrace_whenTwoSubTracesOverlap_returnsCorrectResults() {
202179
Fragment fragment1 = new Fragment();
203180
Fragment fragment2 = new Fragment();
204-
Optional<PerfFrameMetrics> subTrace1;
205-
Optional<PerfFrameMetrics> subTrace2;
206181
recorder.start();
182+
// comments are in this format: total frames, slow frames, frozen frames
207183
stubFrameMetricsAggregatorData(fma, new int[][] {{1, 1}, {17, 1}, {800, 1}}); // 3, 2, 1
208184
recorder.startSubTrace(fragment1);
209185
stubFrameMetricsAggregatorData(fma, new int[][] {{1, 2}, {17, 3}, {800, 2}}); // 7, 5, 2
210186
recorder.startSubTrace(fragment2);
211187
stubFrameMetricsAggregatorData(fma, new int[][] {{1, 5}, {17, 4}, {800, 5}}); // 14, 9, 5
212-
subTrace1 = recorder.stopSubTrace(fragment1);
188+
Optional<PerfFrameMetrics> subTrace1 = recorder.stopSubTrace(fragment1);
213189
stubFrameMetricsAggregatorData(fma, new int[][] {{1, 6}, {17, 5}, {800, 5}}); // 16, 10, 5
214-
subTrace2 = recorder.stopSubTrace(fragment2);
215-
216-
// total = 14 - 3 = 11, slow = 9 - 2 = 7, frozen = 5 - 1 = 4
217-
assertThat(subTrace1.get().getTotalFrames()).isEqualTo(11);
218-
assertThat(subTrace1.get().getSlowFrames()).isEqualTo(7);
219-
assertThat(subTrace1.get().getFrozenFrames()).isEqualTo(4);
220-
// total = 16 - 7 = 9, slow = 10 - 5 = 5, frozen = 5 - 2 = 3
221-
assertThat(subTrace2.get().getTotalFrames()).isEqualTo(9);
222-
assertThat(subTrace2.get().getSlowFrames()).isEqualTo(5);
223-
assertThat(subTrace2.get().getFrozenFrames()).isEqualTo(3);
190+
Optional<PerfFrameMetrics> subTrace2 = recorder.stopSubTrace(fragment2);
191+
192+
// 3rd snapshot - 1st snapshot
193+
assertThat(subTrace1.get().getTotalFrames()).isEqualTo(14 - 3);
194+
assertThat(subTrace1.get().getSlowFrames()).isEqualTo(9 - 2);
195+
assertThat(subTrace1.get().getFrozenFrames()).isEqualTo(5 - 1);
196+
// 4th snapshot - 2nd snapshot
197+
assertThat(subTrace2.get().getTotalFrames()).isEqualTo(16 - 7);
198+
assertThat(subTrace2.get().getSlowFrames()).isEqualTo(10 - 5);
199+
assertThat(subTrace2.get().getFrozenFrames()).isEqualTo(5 - 2);
224200
}
225201

226202
private static Activity createFakeActivity(boolean isHardwareAccelerated) {

0 commit comments

Comments
 (0)