AndroidX Macrobenchmarkでアプリの起動時間を計測する方法について書いていきます。
基本はドキュメントを見れば大丈夫だとは思いますが、少し分かりにくいものもあるので、丁寧に手順を説明しようと思います。
https://developer.android.com/studio/profile/macrobenchmark-intro
環境
- Android Studio Bumblebee Beta 4
ベンチマーク用のモジュール作成
まずはベンチマーク用のモジュールを作成します。 作成するには通常のマルチモジュールと同じです。1点注意としてはminSdkは23以上にする必要があります。
build.gradle設定
先程作ったモジュールの build.gradle
を編集していきます。
Gradle Pluginの変更
com.android.library
を com.android.test
に変更します。
android { } に設定を追加
いくつか設定を android { }
のブロックに追加していきます。
説明はコメントに記載しています。
不要なbuildTypeを無効にする
先ほど作成した benchmark
のbuildType以外は使用しないので、無効にします。
dependencies に必要なものを追加
Macrobenchmarkのライブラリを追加します。 testImplementation
と androidTestImplementation
は使わないので注意です。
appモジュールのbuildTypeを追加
先程ベンチマーク用のモジュールに benchmark
というbuildTypeを追加したので、それに合わせてappモジュールにも追加しておく必要があります。
このときの設定内容ですがリリースビルドと同じような内容にします。debbugableを無効にして、R8を有効にしておくと良いと思います。署名に関しては何でも良いのでdebugのもを使っています。
AndroidManifest.xml
appモジュール側のAndroidManifestに設定を追加します。プロファイルを可能にする設定になります。
先程つくった、 benchmark
のbuildTypeでだけ有効になるように app/src/benchmark/AndroidManifest.xml
に設定します。
テストコード
benchmarkのモジュールでテストを書いていきます。テストコードですが、記述する場所は src/main/java
の箇所になります。
コードの細かい解説はしませんが、Cold start での起動を計測しています。
他にもRecyclerViewのスクロールなども計測できます。サンプルを参考にしてみてください。
実行
実行するには普通のテストと同じ感じです。
いくつか方法ありますが、benchmarkモジュールを右クリックして Run 'All Tests'
などから実行できます。
実行すると、対象アプリを設定したbuildTypeでビルドしてインストールしてから、計測してくれます。
結果
実行すると以下のような感じで結果が表示されます。ちょっと分かりにくいですが、右側の領域の Benchmark
タブで計測結果が確認できます。
最小、最大、平均の値とリンク、各イテレーションのリンクが表示されています。
このリンクをクリックをすると、Profilerツールで詳細が確認できるようになっています。
この例はわざと極端に大きい画像ファイルを読み込んでいます。そのため decodeBitmap
の処理に時間がかかってるのが分かると思います。
tracing
androidx.tracing を使うといろんな箇所の時間を計測することができます。
以下のように計測したい処理を trace
で囲い引数にラベルを設定します。例として2つの画像のBitmapを取得しています。
この状態でMacrobenchmarkを実行してProfilerで確認すると以下のようにラベルが表示され、計測ができるようになります。
参考
https://developer.android.com/studio/profile/macrobenchmark-intro