Help us understand the problem. What is going on with this article?

Firebase Performance Monitoringの2点間計測機能を使ってみる。【Android】

FireBasePerformanceMonitoringの機能のひとつに、ある点からある点までの2点間を計測するTrace機能があります。
Android 向け Firebase Performance Monitoring を使ってみる

同じクラス内であれば、newTrace("")してオブジェクトを生成し、.startTrace() → .stopTrace()をすればいいですが、

  • 別のクラスを跨ぐとき
  • Activity・Fragment間を移動するとき

を計測するケースを考えると、ユーティリティっぽく使える方が保守性・拡張性があります。
また、ActivityにTraceオブジェクトを持たせて、コールバックを受け取るなりしてstop()するのもあまりやりたくないのも理由ですね。

SingletonとEnumで作ってみましたので、アウトプットがてら共有します。

PerformanceMontoringSample.java
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()で呼び出せるようにする

ですね。

以下、計測開始と終了の処理を書いていきます。

PerformanceMontoringSample.java
    /**
     *計測を開始
     */
    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がうまい事よしなにやってくれるので、分岐だけ網羅しておけば良い感じに計測してくれる&そうそう落ちることはない、はずです・・・。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away