Skip to content

Commit 9e4307b

Browse files
committed
ssample fragment after trace already sampled
1 parent ce7c779 commit 9e4307b

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

firebase-perf/src/main/java/com/google/firebase/perf/transport/RateLimiter.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,17 @@ private boolean isDeviceAllowedToSendNetworkEvents() {
104104
return samplingBucketId < validNetworkSamplingBucketIdThreshold;
105105
}
106106

107+
/** Returns whether device is allowed to send trace events based on trace sampling rate. */
108+
private boolean isDeviceAllowedToSendFragmentScreenTraces() {
109+
float validFragmentSamplingBucketIdThreshold = configResolver.getFragmentSamplingRate();
110+
return samplingBucketId < validFragmentSamplingBucketIdThreshold;
111+
}
112+
113+
/** Identifies if the {@link PerfMetric} is a Fragment screen trace */
114+
private boolean isFragmentScreenTrace(PerfMetric metric) {
115+
return metric.hasTraceMetric() && metric.getTraceMetric().getName().startsWith(Constants.SCREEN_TRACE_PREFIX) && metric.getTraceMetric().containsCustomAttributes(Constants.ACTIVITY_ATTRIBUTE_KEY);
116+
}
117+
107118
/**
108119
* Check if the {@link PerfMetric} should be rate limited.
109120
*
@@ -140,6 +151,12 @@ boolean isEventSampled(PerfMetric metric) {
140151
return false;
141152
}
142153

154+
if (isFragmentScreenTrace(metric)
155+
&& !(isDeviceAllowedToSendFragmentScreenTraces()
156+
|| hasVerboseSessions(metric.getTraceMetric().getPerfSessionsList()))) {
157+
return false;
158+
}
159+
143160
if (metric.hasNetworkRequestMetric()
144161
&& !(isDeviceAllowedToSendNetworkEvents()
145162
|| hasVerboseSessions(metric.getNetworkRequestMetric().getPerfSessionsList()))) {

0 commit comments

Comments
 (0)