Skip to content

Commit 6a42873

Browse files
Fireperf: fragment lifecycle callbacks (#3565)
* onResume and onPause * copyright * rename to * more specific language
1 parent 23d1a5e commit 6a42873

File tree

2 files changed

+85
-1
lines changed

2 files changed

+85
-1
lines changed

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

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import android.util.SparseIntArray;
2323
import androidx.annotation.NonNull;
2424
import androidx.core.app.FrameMetricsAggregator;
25+
import androidx.fragment.app.FragmentActivity;
2526
import com.google.android.gms.common.util.VisibleForTesting;
2627
import com.google.firebase.perf.config.ConfigResolver;
2728
import com.google.firebase.perf.logging.AndroidLogger;
@@ -140,7 +141,19 @@ public void incrementTsnsCount(int value) {
140141
}
141142

142143
@Override
143-
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {}
144+
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
145+
if (isScreenTraceSupported(activity) && configResolver.isPerformanceMonitoringEnabled()) {
146+
if (activity instanceof FragmentActivity) {
147+
FragmentActivity fragmentActivity = (FragmentActivity) activity;
148+
fragmentActivity
149+
.getSupportFragmentManager()
150+
.registerFragmentLifecycleCallbacks(
151+
new FragmentStateMonitor(
152+
fragmentActivity, clock, transportManager, this, frameMetricsAggregator),
153+
true);
154+
}
155+
}
156+
}
144157

145158
@Override
146159
public void onActivityDestroyed(Activity activity) {}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
// Copyright 2022 Google LLC
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
package com.google.firebase.perf.application;
16+
17+
import androidx.annotation.NonNull;
18+
import androidx.core.app.FrameMetricsAggregator;
19+
import androidx.fragment.app.Fragment;
20+
import androidx.fragment.app.FragmentActivity;
21+
import androidx.fragment.app.FragmentManager;
22+
import com.google.firebase.perf.logging.AndroidLogger;
23+
import com.google.firebase.perf.transport.TransportManager;
24+
import com.google.firebase.perf.util.Clock;
25+
import com.google.firebase.perf.util.Constants;
26+
27+
public class FragmentStateMonitor extends FragmentManager.FragmentLifecycleCallbacks {
28+
private static final AndroidLogger logger = AndroidLogger.getInstance();
29+
private final FragmentActivity activity;
30+
private final Clock clock;
31+
private final TransportManager transportManager;
32+
private final AppStateMonitor appStateMonitor;
33+
private final FrameMetricsAggregator frameMetricsAggregator;
34+
35+
public FragmentStateMonitor(
36+
FragmentActivity activity,
37+
Clock clock,
38+
TransportManager transportManager,
39+
AppStateMonitor appStateMonitor,
40+
FrameMetricsAggregator fma) {
41+
this.activity = activity;
42+
this.clock = clock;
43+
this.transportManager = transportManager;
44+
this.appStateMonitor = appStateMonitor;
45+
this.frameMetricsAggregator = fma;
46+
}
47+
48+
/**
49+
* Fragment screen trace name is prefix "_st_" concatenates with Fragment's class name.
50+
*
51+
* @param fragment fragment object.
52+
* @return Fragment screen trace name.
53+
*/
54+
public static String getFragmentScreenTraceName(Fragment fragment) {
55+
return Constants.SCREEN_TRACE_PREFIX + fragment.getClass().getSimpleName();
56+
}
57+
58+
@Override
59+
public void onFragmentResumed(@NonNull FragmentManager fm, @NonNull Fragment f) {
60+
super.onFragmentResumed(fm, f);
61+
// Start Fragment screen trace
62+
logger.debug("FragmentMonitor %s.onFragmentResumed", f.getClass().getSimpleName());
63+
}
64+
65+
@Override
66+
public void onFragmentPaused(@NonNull FragmentManager fm, @NonNull Fragment f) {
67+
super.onFragmentPaused(fm, f);
68+
// Stop Fragment screen trace
69+
logger.debug("FragmentMonitor %s.onFragmentPaused ", f.getClass().getSimpleName());
70+
}
71+
}

0 commit comments

Comments
 (0)