Skip to content

Commit 6b009b0

Browse files
Add validation for checking if a Screen Trace has non-positive totalFrames (#2944)
* Add validation to ensure screen traces must have positive totalFrames before being sent to backend
1 parent fda0aed commit 6b009b0

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

firebase-perf/src/main/java/com/google/firebase/perf/metrics/validator/FirebasePerfTraceValidator.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,15 @@ private boolean areCountersValid(@Nullable TraceMetric trace, int deep) {
104104
return true;
105105
}
106106

107+
private boolean isScreenTrace(@NonNull TraceMetric trace) {
108+
return trace.getName().startsWith(Constants.SCREEN_TRACE_PREFIX);
109+
}
110+
111+
private boolean isValidScreenTrace(@NonNull TraceMetric trace) {
112+
Long totalFrames = trace.getCountersMap().get(Constants.CounterNames.FRAMES_TOTAL.toString());
113+
return totalFrames != null && totalFrames.compareTo(0L) > 0;
114+
}
115+
107116
private boolean isValidTrace(@Nullable TraceMetric trace, int deep) {
108117
if (trace == null) {
109118
logger.warn("TraceMetric is null");
@@ -126,6 +135,10 @@ private boolean isValidTrace(@Nullable TraceMetric trace, int deep) {
126135
logger.warn("clientStartTimeUs is null.");
127136
return false;
128137
}
138+
if (isScreenTrace(trace) && !isValidScreenTrace(trace)) {
139+
logger.warn("non-positive totalFrames in screen trace " + trace.getName());
140+
return false;
141+
}
129142
for (TraceMetric subtrace : trace.getSubtracesList()) {
130143
if (!isValidTrace(subtrace, deep + 1)) {
131144
return false;

firebase-perf/src/test/java/com/google/firebase/perf/metrics/validator/FirebasePerfTraceValidatorTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,15 @@ public void testInvalidCounterSubtrace() {
159159
assertThat(new FirebasePerfTraceValidator(trace.build()).isValidPerfMetric()).isFalse();
160160
}
161161

162+
@Test
163+
public void screenTrace_shouldNotAllowNonPositiveTotalFrames() {
164+
TraceMetric.Builder trace =
165+
createValidTraceMetric().setName(Constants.SCREEN_TRACE_PREFIX + "TestActivity");
166+
assertThat(new FirebasePerfTraceValidator(trace.build()).isValidPerfMetric()).isFalse();
167+
trace.putCounters(Constants.CounterNames.FRAMES_TOTAL.toString(), 0L);
168+
assertThat(new FirebasePerfTraceValidator(trace.build()).isValidPerfMetric()).isFalse();
169+
}
170+
162171
@Test
163172
public void testInvalidCustomAttribute() {
164173
TraceMetric.Builder trace = createValidTraceMetric().putCustomAttributes("_test", "value");

0 commit comments

Comments
 (0)