FireBasePerformanceMonitoringの機能のひとつに、ある点からある点までの2点間を計測するTrace機能があります。
Android 向け Firebase Performance Monitoring を使ってみる
同じクラス内であれば、newTrace("")してオブジェクトを生成し、.startTrace() → .stopTrace()をすればいいですが、
- 別のクラスを跨ぐとき
- Activity・Fragment間を移動するとき
を計測するケースを考えると、ユーティリティっぽく使える方が保守性・拡張性があります。
また、ActivityにTraceオブジェクトを持たせて、コールバックを受け取るなりしてstop()するのもあまりやりたくないのも理由ですね。
SingletonとEnumで作ってみましたので、アウトプットがてら共有します。
public class PerformanceMonitoringSample {
private static PerformanceMonitorSample performanceMonitorSample;
private final Map<TraceName, Trace> traceMap = new HashMap<>();
public enum TraceName {
SAMPLE_ONE("sample_one"),
SAMPLE_TWO("sample_two");
private final String traceInstanceName;
TraceName(String traceInstanceName) {
this.traceInstanceName = traceInstancName;
}
}
private PerformanceMonitoringSample() {
}
/**
* インスタンスを取得
*/
public static PerformanceMonitoringSample getInstance() {
if (performanceMonitorSample == null) {
performanceMonitoringSample = new PerformanceMonitoringSample();
return performanceMonitorSample;
} else {
return performanceMonitorSample;
}
}
ここまでが
- EnumでTraceを管理する。
- コンストラクタ
- getInstance()で呼び出せるようにする
ですね。
以下、計測開始と終了の処理を書いていきます。
/**
*計測を開始
*/
public void startTrace(TraceName traceName) {
if (traceMap.containsKey(traceName)) {
return;
}
Trace myTrace = = FirebasePerformance.getInstance().newTrace(traceName.traceInstanceName);
myTrace.start();
traceMap.put(traceName.traceInstanceName, myTrace);
}
}
/**
*計測を終了
*/
public void stopTrace(TraceName traceName) {
//Map自体のnullチェックが必要かも・・・
if (traceMap.containsKey(traceName)) {
traceMap.remove(traceName.traceInstanceName).stop;
}
}
}
}
###使い方
使い方としては、まずgetInstance()でPerformanceMonitoringインスタンスを生成し、計測したい2点間でstart()とstop()をするだけです。
裏でPerformanceMonitoringがうまい事よしなにやってくれるので、分岐だけ網羅しておけば良い感じに計測してくれる&そうそう落ちることはない、はずです・・・。