- Added realracing3-community.apk (71.57 MB) - Removed 32-bit support (armeabi-v7a) - Only includes arm64-v8a libraries - Decompiled source code included - Added README-community.md with analysis
75 lines
3.7 KiB
Java
75 lines
3.7 KiB
Java
package com.google.firebase.perf.application;
|
|
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.VisibleForTesting;
|
|
import androidx.fragment.app.Fragment;
|
|
import androidx.fragment.app.FragmentManager;
|
|
import com.google.firebase.perf.logging.AndroidLogger;
|
|
import com.google.firebase.perf.metrics.FrameMetricsCalculator;
|
|
import com.google.firebase.perf.metrics.Trace;
|
|
import com.google.firebase.perf.transport.TransportManager;
|
|
import com.google.firebase.perf.util.Clock;
|
|
import com.google.firebase.perf.util.Optional;
|
|
import com.google.firebase.perf.util.ScreenTraceUtil;
|
|
import java.util.WeakHashMap;
|
|
|
|
/* loaded from: classes3.dex */
|
|
public class FragmentStateMonitor extends FragmentManager.FragmentLifecycleCallbacks {
|
|
private static final AndroidLogger logger = AndroidLogger.getInstance();
|
|
private final FrameMetricsRecorder activityFramesRecorder;
|
|
private final AppStateMonitor appStateMonitor;
|
|
private final Clock clock;
|
|
private final WeakHashMap<Fragment, Trace> fragmentToTraceMap = new WeakHashMap<>();
|
|
private final TransportManager transportManager;
|
|
|
|
@VisibleForTesting
|
|
public WeakHashMap<Fragment, Trace> getFragmentToTraceMap() {
|
|
return this.fragmentToTraceMap;
|
|
}
|
|
|
|
public FragmentStateMonitor(Clock clock, TransportManager transportManager, AppStateMonitor appStateMonitor, FrameMetricsRecorder frameMetricsRecorder) {
|
|
this.clock = clock;
|
|
this.transportManager = transportManager;
|
|
this.appStateMonitor = appStateMonitor;
|
|
this.activityFramesRecorder = frameMetricsRecorder;
|
|
}
|
|
|
|
public String getFragmentScreenTraceName(Fragment fragment) {
|
|
return "_st_" + fragment.getClass().getSimpleName();
|
|
}
|
|
|
|
@Override // androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks
|
|
public void onFragmentResumed(@NonNull FragmentManager fragmentManager, @NonNull Fragment fragment) {
|
|
super.onFragmentResumed(fragmentManager, fragment);
|
|
logger.debug("FragmentMonitor %s.onFragmentResumed", fragment.getClass().getSimpleName());
|
|
Trace trace = new Trace(getFragmentScreenTraceName(fragment), this.transportManager, this.clock, this.appStateMonitor);
|
|
trace.start();
|
|
trace.putAttribute("Parent_fragment", fragment.getParentFragment() == null ? "No parent" : fragment.getParentFragment().getClass().getSimpleName());
|
|
if (fragment.getActivity() != null) {
|
|
trace.putAttribute("Hosting_activity", fragment.getActivity().getClass().getSimpleName());
|
|
}
|
|
this.fragmentToTraceMap.put(fragment, trace);
|
|
this.activityFramesRecorder.startFragment(fragment);
|
|
}
|
|
|
|
@Override // androidx.fragment.app.FragmentManager.FragmentLifecycleCallbacks
|
|
public void onFragmentPaused(@NonNull FragmentManager fragmentManager, @NonNull Fragment fragment) {
|
|
super.onFragmentPaused(fragmentManager, fragment);
|
|
AndroidLogger androidLogger = logger;
|
|
androidLogger.debug("FragmentMonitor %s.onFragmentPaused ", fragment.getClass().getSimpleName());
|
|
if (!this.fragmentToTraceMap.containsKey(fragment)) {
|
|
androidLogger.warn("FragmentMonitor: missed a fragment trace from %s", fragment.getClass().getSimpleName());
|
|
return;
|
|
}
|
|
Trace trace = this.fragmentToTraceMap.get(fragment);
|
|
this.fragmentToTraceMap.remove(fragment);
|
|
Optional stopFragment = this.activityFramesRecorder.stopFragment(fragment);
|
|
if (!stopFragment.isAvailable()) {
|
|
androidLogger.warn("onFragmentPaused: recorder failed to trace %s", fragment.getClass().getSimpleName());
|
|
} else {
|
|
ScreenTraceUtil.addFrameCounters(trace, (FrameMetricsCalculator.PerfFrameMetrics) stopFragment.get());
|
|
trace.stop();
|
|
}
|
|
}
|
|
}
|