Skip to content

Commit f94d80d

Browse files
Incorporating review comments (grouping variables)
1 parent 0a32a18 commit f94d80d

30 files changed

+176
-163
lines changed

firebase-perf/src/main/java/com/google/firebase/perf/application/AppStateMonitor.java

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,34 @@
5555
public class AppStateMonitor implements ActivityLifecycleCallbacks {
5656

5757
private static final AndroidLogger logger = AndroidLogger.getInstance();
58+
private static final String FRAME_METRICS_AGGREGATOR_CLASSNAME =
59+
"androidx.core.app.FrameMetricsAggregator";
5860

5961
private static volatile AppStateMonitor instance;
6062

63+
private final WeakHashMap<Activity, Boolean> activityToResumedMap = new WeakHashMap<>();
64+
private final WeakHashMap<Activity, Trace> activityToScreenTraceMap = new WeakHashMap<>();
65+
private final Map<String, Long> metricToCountMap = new HashMap<>();
66+
private final Set<WeakReference<AppStateCallback>> appStateSubscribers = new HashSet<>();
67+
68+
/* Count for TRACE_STARTED_NOT_STOPPED */
69+
private final AtomicInteger tsnsCount = new AtomicInteger(0);
70+
71+
private final TransportManager transportManager;
72+
private final ConfigResolver configResolver;
73+
private final Clock clock;
74+
75+
private FrameMetricsAggregator frameMetricsAggregator;
76+
77+
private Timer resumeTime; // The time app comes to foreground
78+
private Timer stopTime; // The time app goes to background
79+
80+
private ApplicationProcessState currentAppState = ApplicationProcessState.BACKGROUND;
81+
82+
private boolean isRegisteredForLifecycleCallbacks = false;
83+
private boolean isColdStart = true;
84+
private boolean hasFrameMetricsAggregator = false;
85+
6186
public static AppStateMonitor getInstance() {
6287
if (instance == null) {
6388
synchronized (AppStateMonitor.class) {
@@ -69,29 +94,6 @@ public static AppStateMonitor getInstance() {
6994
return instance;
7095
}
7196

72-
private static final String FRAME_METRICS_AGGREGATOR_CLASSNAME =
73-
"androidx.core.app.FrameMetricsAggregator";
74-
private boolean isRegisteredForLifecycleCallbacks = false;
75-
private final TransportManager transportManager;
76-
private ConfigResolver configResolver;
77-
private final Clock clock;
78-
private boolean isColdStart = true;
79-
private final WeakHashMap<Activity, Boolean> activityToResumedMap = new WeakHashMap<>();
80-
private Timer stopTime; // The time app goes to background
81-
private Timer resumeTime; // The time app comes to foreground
82-
private final Map<String, Long> metricToCountMap = new HashMap<>();
83-
/* Count for TRACE_STARTED_NOT_STOPPED */
84-
private AtomicInteger tsnsCount = new AtomicInteger(0);
85-
86-
private ApplicationProcessState currentAppState = ApplicationProcessState.BACKGROUND;
87-
88-
private Set<WeakReference<AppStateCallback>> appStateSubscribers =
89-
new HashSet<WeakReference<AppStateCallback>>();
90-
91-
private boolean hasFrameMetricsAggregator = false;
92-
private FrameMetricsAggregator frameMetricsAggregator;
93-
private final WeakHashMap<Activity, Trace> activityToScreenTraceMap = new WeakHashMap<>();
94-
9597
AppStateMonitor(TransportManager transportManager, Clock clock) {
9698
this.transportManager = transportManager;
9799
this.clock = clock;

firebase-perf/src/main/java/com/google/firebase/perf/application/AppStateUpdateHandler.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,16 @@
2828
/** @hide */
2929
public abstract class AppStateUpdateHandler implements AppStateCallback {
3030

31-
private AppStateMonitor appStateMonitor;
32-
private ApplicationProcessState currentAppState =
33-
ApplicationProcessState.APPLICATION_PROCESS_STATE_UNKNOWN;
34-
private boolean isRegisteredForAppState = false;
31+
private final AppStateMonitor appStateMonitor;
3532
// The weak reference to register/unregister with AppStateMonitor.
3633
// It must be a weak reference because unregisterForAppState() is called typically from
3734
// Trace.stop() and user may forget to call Trace.stop(), if it was a strong reference,
3835
// the registration in AppStateMonitor will prevent Trace to be deallocated.
39-
private WeakReference<AppStateCallback> appStateCallback;
36+
private final WeakReference<AppStateCallback> appStateCallback;
37+
38+
private boolean isRegisteredForAppState = false;
39+
private ApplicationProcessState currentAppState =
40+
ApplicationProcessState.APPLICATION_PROCESS_STATE_UNKNOWN;
4041

4142
/** @hide */
4243
/** @hide */

firebase-perf/src/main/java/com/google/firebase/perf/config/ConfigResolver.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,12 @@
5555
public class ConfigResolver {
5656

5757
private static final AndroidLogger logger = AndroidLogger.getInstance();
58+
5859
private static volatile ConfigResolver instance;
5960

6061
// Configuration Storage objects.
62+
private final RemoteConfigManager remoteConfigManager;
6163
private ImmutableBundle metadataBundle;
62-
private RemoteConfigManager remoteConfigManager;
6364
private DeviceCacheManager deviceCacheManager;
6465

6566
/**

firebase-perf/src/main/java/com/google/firebase/perf/config/DeviceCacheManager.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,16 @@
3636
public class DeviceCacheManager {
3737

3838
private static final AndroidLogger logger = AndroidLogger.getInstance();
39-
private static DeviceCacheManager instance;
40-
4139
private static final String PREFS_NAME = Constants.PREFS_NAME;
40+
41+
private static DeviceCacheManager instance;
4242
// The key-value pairs are written to XML files that persist across user sessions, even if the
4343
// app is killed.
4444
// https://developer.android.com/guide/topics/data/data-storage.html#pref
4545
private volatile SharedPreferences sharedPref;
4646

4747
// Used for retrieving the shared preferences on a separate thread.
48-
private ExecutorService serialExecutor;
48+
private final ExecutorService serialExecutor;
4949

5050
@VisibleForTesting
5151
public DeviceCacheManager(ExecutorService serialExecutor) {

firebase-perf/src/main/java/com/google/firebase/perf/config/RemoteConfigManager.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,23 +46,20 @@
4646
public class RemoteConfigManager {
4747

4848
private static final AndroidLogger logger = AndroidLogger.getInstance();
49-
50-
private static final String FIREPERF_FRC_NAMESPACE_NAME = "fireperf";
51-
5249
private static final RemoteConfigManager instance = new RemoteConfigManager();
50+
private static final String FIREPERF_FRC_NAMESPACE_NAME = "fireperf";
5351
private static final long TIME_AFTER_WHICH_A_FETCH_IS_CONSIDERED_STALE_MS =
5452
TimeUnit.HOURS.toMillis(12);
55-
5653
private static final long FETCH_NEVER_HAPPENED_TIMESTAMP_MS = 0;
54+
55+
private final ConcurrentHashMap<String, FirebaseRemoteConfigValue> allRcConfigMap;
56+
private final Executor executor;
57+
5758
private long firebaseRemoteConfigLastFetchTimestampMs = FETCH_NEVER_HAPPENED_TIMESTAMP_MS;
5859

5960
@Nullable private Provider<RemoteConfigComponent> firebaseRemoteConfigProvider;
6061
@Nullable private FirebaseRemoteConfig firebaseRemoteConfig;
6162

62-
private final Executor executor;
63-
64-
private final ConcurrentHashMap<String, FirebaseRemoteConfigValue> allRcConfigMap;
65-
6663
private RemoteConfigManager() {
6764
this(
6865
new ThreadPoolExecutor(

firebase-perf/src/main/java/com/google/firebase/perf/metrics/AppStartTrace.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,9 @@
5353
*/
5454
/** @hide */
5555
public class AppStartTrace implements ActivityLifecycleCallbacks {
56+
5657
private static final long MAX_LATENCY_BEFORE_UI_INIT = TimeUnit.MINUTES.toMicros(1);
58+
5759
private static volatile AppStartTrace instance;
5860

5961
/**

firebase-perf/src/main/java/com/google/firebase/perf/metrics/Counter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,9 @@
2626
*/
2727
/** @hide */
2828
public class Counter implements Parcelable {
29+
2930
private final String name;
30-
private AtomicLong count;
31+
private final AtomicLong count;
3132

3233
/**
3334
* Creates a Counter with given name.

firebase-perf/src/main/java/com/google/firebase/perf/metrics/HttpMetric.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,10 @@ public class HttpMetric implements FirebasePerformanceAttributable {
3939

4040
private static final AndroidLogger logger = AndroidLogger.getInstance();
4141

42-
private NetworkRequestMetricBuilder networkMetricBuilder;
43-
private Timer timer;
42+
private final NetworkRequestMetricBuilder networkMetricBuilder;
43+
private final Timer timer;
4444
private final Map<String, String> customAttributesMap;
45+
4546
private boolean isStopped = false;
4647
private boolean isDisabled = false;
4748

firebase-perf/src/main/java/com/google/firebase/perf/metrics/NetworkRequestMetricBuilder.java

Lines changed: 23 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ public final class NetworkRequestMetricBuilder extends AppStateUpdateHandler
5252
implements SessionAwareObject {
5353

5454
private static final AndroidLogger logger = AndroidLogger.getInstance();
55-
5655
private static final char HIGHEST_CONTROL_CHAR = '\u001f';
5756
private static final char HIGHEST_ASCII_CHAR = '\u007f';
5857

@@ -61,16 +60,14 @@ public final class NetworkRequestMetricBuilder extends AppStateUpdateHandler
6160
private final GaugeManager gaugeManager;
6261
private final TransportManager transportManager;
6362

64-
private final NetworkRequestMetric.Builder networkMetricBuilder =
65-
NetworkRequestMetric.newBuilder();
63+
private final NetworkRequestMetric.Builder builder = NetworkRequestMetric.newBuilder();
64+
private final WeakReference<SessionAwareObject> weakReference = new WeakReference<>(this);
6665

6766
@Nullable private String userAgent;
6867

6968
private boolean isReportSent;
7069
private boolean isManualNetworkRequestMetric;
7170

72-
private final WeakReference<SessionAwareObject> weakReference = new WeakReference<>(this);
73-
7471
/** @hide */
7572
@Override
7673
/** @hide */
@@ -134,15 +131,15 @@ public NetworkRequestMetricBuilder setUrl(@Nullable String url) {
134131
url = Utils.stripSensitiveInfo(url);
135132

136133
// Limits the URL length to 2000 chars.
137-
networkMetricBuilder.setUrl(Utils.truncateURL(url, Constants.MAX_URL_LENGTH));
134+
builder.setUrl(Utils.truncateURL(url, Constants.MAX_URL_LENGTH));
138135
}
139136

140137
return this;
141138
}
142139

143140
/** Gets the url for the current {@link NetworkRequestMetric}. */
144141
public String getUrl() {
145-
return networkMetricBuilder.getUrl();
142+
return builder.getUrl();
146143
}
147144

148145
/** Sets the user-agent for the current network request. */
@@ -196,31 +193,31 @@ public NetworkRequestMetricBuilder setHttpMethod(@Nullable String method) {
196193
httpMethod = HttpMethod.HTTP_METHOD_UNKNOWN;
197194
break;
198195
}
199-
networkMetricBuilder.setHttpMethod(httpMethod);
196+
builder.setHttpMethod(httpMethod);
200197
}
201198
return this;
202199
}
203200

204201
/** Sets the httpResponseCode for the current {@link NetworkRequestMetric}. */
205202
public NetworkRequestMetricBuilder setHttpResponseCode(int code) {
206-
networkMetricBuilder.setHttpResponseCode(code);
203+
builder.setHttpResponseCode(code);
207204
return this;
208205
}
209206

210207
/** Answers whether the builder has an HttpResponseCode. */
211208
public boolean hasHttpResponseCode() {
212-
return networkMetricBuilder.hasHttpResponseCode();
209+
return builder.hasHttpResponseCode();
213210
}
214211

215212
/** Sets the requestPayloadBytes for the current {@link NetworkRequestMetric}. */
216213
public NetworkRequestMetricBuilder setRequestPayloadBytes(long bytes) {
217-
networkMetricBuilder.setRequestPayloadBytes(bytes);
214+
builder.setRequestPayloadBytes(bytes);
218215
return this;
219216
}
220217

221218
/** Sets the customAttributes for the current {@link NetworkRequestMetric}. */
222219
public NetworkRequestMetricBuilder setCustomAttributes(Map<String, String> attributes) {
223-
networkMetricBuilder.clearCustomAttributes().putAllCustomAttributes(attributes);
220+
builder.clearCustomAttributes().putAllCustomAttributes(attributes);
224221
return this;
225222
}
226223

@@ -238,7 +235,7 @@ public NetworkRequestMetricBuilder setRequestStartTimeMicros(long time) {
238235
PerfSession perfSession = sessionManager.perfSession();
239236
SessionManager.getInstance().registerForSessionUpdates(weakReference);
240237

241-
networkMetricBuilder.setClientStartTimeUs(time);
238+
builder.setClientStartTimeUs(time);
242239
updateSession(perfSession);
243240

244241
if (perfSession.isGaugeAndEventCollectionEnabled()) {
@@ -250,19 +247,19 @@ public NetworkRequestMetricBuilder setRequestStartTimeMicros(long time) {
250247

251248
/** Sets the timeToRequestCompletedUs for the current {@link NetworkRequestMetric}. */
252249
public NetworkRequestMetricBuilder setTimeToRequestCompletedMicros(long time) {
253-
networkMetricBuilder.setTimeToRequestCompletedUs(time);
250+
builder.setTimeToRequestCompletedUs(time);
254251
return this;
255252
}
256253

257254
/** Sets the timeToResponseInitiatedUs for the current {@link NetworkRequestMetric}. */
258255
public NetworkRequestMetricBuilder setTimeToResponseInitiatedMicros(long time) {
259-
networkMetricBuilder.setTimeToResponseInitiatedUs(time);
256+
builder.setTimeToResponseInitiatedUs(time);
260257
return this;
261258
}
262259

263260
/** Gets the timeToResponseInitiatedUs for the current {@link NetworkRequestMetric}. */
264261
public long getTimeToResponseInitiatedMicros() {
265-
return networkMetricBuilder.getTimeToResponseInitiatedUs();
262+
return builder.getTimeToResponseInitiatedUs();
266263
}
267264

268265
/**
@@ -275,7 +272,7 @@ public long getTimeToResponseInitiatedMicros() {
275272
* @see PerfSession#isGaugeAndEventCollectionEnabled()
276273
*/
277274
public NetworkRequestMetricBuilder setTimeToResponseCompletedMicros(long time) {
278-
networkMetricBuilder.setTimeToResponseCompletedUs(time);
275+
builder.setTimeToResponseCompletedUs(time);
279276

280277
if (SessionManager.getInstance().perfSession().isGaugeAndEventCollectionEnabled()) {
281278
gaugeManager.collectGaugeMetricOnce(SessionManager.getInstance().perfSession().getTimer());
@@ -286,19 +283,19 @@ public NetworkRequestMetricBuilder setTimeToResponseCompletedMicros(long time) {
286283

287284
/** Sets the responsePayloadBytes for the current {@link NetworkRequestMetric}. */
288285
public NetworkRequestMetricBuilder setResponsePayloadBytes(long bytes) {
289-
networkMetricBuilder.setResponsePayloadBytes(bytes);
286+
builder.setResponsePayloadBytes(bytes);
290287
return this;
291288
}
292289

293290
/** Sets the responseContentType for the current {@link NetworkRequestMetric}. */
294291
public NetworkRequestMetricBuilder setResponseContentType(@Nullable String contentType) {
295292
if (contentType == null) {
296-
networkMetricBuilder.clearResponseContentType();
293+
builder.clearResponseContentType();
297294
return this;
298295
}
299296

300297
if (isValidContentType(contentType)) {
301-
networkMetricBuilder.setResponseContentType(contentType);
298+
builder.setResponseContentType(contentType);
302299
} else {
303300
logger.info("The content type of the response is not a valid content-type:" + contentType);
304301
}
@@ -310,7 +307,7 @@ public NetworkRequestMetricBuilder setResponseContentType(@Nullable String conte
310307
* the current {@link NetworkRequestMetric}.
311308
*/
312309
public NetworkRequestMetricBuilder setNetworkClientErrorReason() {
313-
networkMetricBuilder.setNetworkClientErrorReason(NetworkClientErrorReason.GENERIC_CLIENT_ERROR);
310+
builder.setNetworkClientErrorReason(NetworkClientErrorReason.GENERIC_CLIENT_ERROR);
314311
return this;
315312
}
316313

@@ -322,10 +319,10 @@ public NetworkRequestMetric build() {
322319
com.google.firebase.perf.v1.PerfSession[] perfSessions =
323320
PerfSession.buildAndSort(getSessions());
324321
if (perfSessions != null) {
325-
networkMetricBuilder.addAllPerfSessions(Arrays.asList(perfSessions));
322+
builder.addAllPerfSessions(Arrays.asList(perfSessions));
326323
}
327324

328-
NetworkRequestMetric metric = networkMetricBuilder.build();
325+
NetworkRequestMetric metric = builder.build();
329326

330327
if (!isAllowedUserAgent(userAgent)) {
331328
logger.debug("Dropping network request from a 'User-Agent' that is not allowed");
@@ -349,12 +346,12 @@ public NetworkRequestMetric build() {
349346

350347
/** Checks if the network request has stopped. */
351348
private boolean isStopped() {
352-
return networkMetricBuilder.hasTimeToResponseCompletedUs();
349+
return builder.hasTimeToResponseCompletedUs();
353350
}
354351

355352
/** Checks if the network request has started. */
356353
private boolean hasStarted() {
357-
return networkMetricBuilder.hasClientStartTimeUs();
354+
return builder.hasClientStartTimeUs();
358355
}
359356

360357
@VisibleForTesting
@@ -384,7 +381,7 @@ void setReportSent() {
384381

385382
@VisibleForTesting
386383
void clearBuilderFields() {
387-
networkMetricBuilder.clear();
384+
builder.clear();
388385
}
389386

390387
/**

0 commit comments

Comments
 (0)