Slide 1

Slide 1 text

Jetpack Macrobenchmarkを試してみた 2021/06/21 (Mon) Money Forward Tech Drive @daasuu

Slide 2

Slide 2 text

もくじ ● Jetpack Macrobenchmarkとは ● 実装方法 ● カスタマイズ ● 参考資料

Slide 3

Slide 3 text

Jetpack Macrobenchmarkとは

Slide 4

Slide 4 text

Jetpack Macrobenchmarkとは Android Studioでアプリのパフォーマンスがsystraceレベルでわかるツール

Slide 5

Slide 5 text

Jetpack Macrobenchmarkとは ● 起動時等に何にどれくらい時間がかかっているか、スクロール時に何にどれくらい時間がか かっているかを、見える化してくれます

Slide 6

Slide 6 text

Jetpack Macrobenchmarkとは ● 個別に選択して、中身の詳細を見ることもできます

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

Jetpack Macrobenchmarkとは 何が嬉しいの? ● Firebase等のAnalyticsのパフォーマンスは複数端末での統計値等はわかるが、開発 者の手元でsystraceレベルで計測できる ● 既存のJetpack Performanceライブラリーでは、測定でよくあるミスを防ぐのに役立ち ますが、アプリ起動時の詳細なパフォーマンス測定や、60fpsを阻むジャンクの測定は できない ● 結果をjsonで吐き出してくれるので、CIとの組み込みも行いやすい ○ emulatorでは動かないので、Firebase Testlab等の実機テストのみ

Slide 9

Slide 9 text

実装方法

Slide 10

Slide 10 text

実行環境

Slide 11

Slide 11 text

Macrobenchmark 実装方法  ● 新しいモジュールを追加する ● マクロベンチマークを作成する

Slide 12

Slide 12 text

Macrobenchmark 実装方法 新しいモジュールを追加する ● Android Libraryでモジュールをきる ○ [Minimum SDK] を [API 29: Android 10.0 (Q)] に設定

Slide 13

Slide 13 text

Macrobenchmark 実装方法 新しいモジュールを追加する ● 切ったモジュールのGradle ファイルを変更する ○ プラグインを com.android.library から com.android.test に変更 ○ testImplementation または androidTestImplementation という名前のすべての 依存関係を implementation に変更 ○ Macrobenchmark を実行する記述を追加

Slide 14

Slide 14 text

Macrobenchmark 実装方法 新しいモジュールを追加する ● プラグインを com.android.library から com.android.test に変更

Slide 15

Slide 15 text

Macrobenchmark 実装方法 新しいモジュールを追加する ● testImplementation または androidTestImplementation という名前のすべての依存 関係を implementation に変更

Slide 16

Slide 16 text

Macrobenchmark 実装方法 新しいモジュールを追加する ● Macrobenchmark を実行する記述を追加 ○ android のblockに下記を追加します ● android {} ブロックの後、dependencies {} ブロックの前に、以下の行を追加しま す。

Slide 17

Slide 17 text

Macrobenchmark 実装方法  ● マクロベンチマークを作成する

Slide 18

Slide 18 text

Macrobenchmark 実装方法 マクロベンチマークを作成する ● JUnit4で動くclassをセット

Slide 19

Slide 19 text

Macrobenchmark 実装方法 マクロベンチマークを作成する ● MacrobenchmarkRuleをセットします

Slide 20

Slide 20 text

● measureRepeatedメソッドを追加 ○ ブロックパスを数回実行してパフォーマンステストを実行します。 Macrobenchmark 実装方法 マクロベンチマークを作成する

Slide 21

Slide 21 text

Macrobenchmark 実装方法 マクロベンチマークを作成する ● App起動の挙動を追加 ○ ホームボタンを押してデバイスをリセット後、アプリを起動

Slide 22

Slide 22 text

● 対象Appのパッケージを追加 Macrobenchmark 実装方法 マクロベンチマークを作成する

Slide 23

Slide 23 text

● テスト対象となる指標を設定 Macrobenchmark 実装方法 マクロベンチマークを作成する

Slide 24

Slide 24 text

Macrobenchmark 実装方法 テストとなる指標の種類 ● StartupTimingMetric ○ アプリの起動のパフォーマンスを測定 ● Frame Timing Metric ○ スクロールやアニメーションフレームのパフォーマンスを測定

Slide 25

Slide 25 text

● アプリのコンパイル方法を指定 Macrobenchmark 実装方法 マクロベンチマークを作成する

Slide 26

Slide 26 text

Macrobenchmark 実装方法 コンパイル方法の種類 ● None ○ アプリが全くコンパイルされていない場合 ● SpeedProfile ○ 部分的にコンパイルされている場合 ● Speed ○ 完全にコンパイルされている場合

Slide 27

Slide 27 text

Macrobenchmark 実装方法 マクロベンチマークを作成する ● アプリの起動の種類を指定

Slide 28

Slide 28 text

Macrobenchmark 実装方法 アプリの起動の種類 ● Hot ○ 既にオンメモリにあるものを起動。 ■ Activity onResumeのみ実行 ● Warn ○ 既存プロセス内でアクティビティを構築して起動 ■ Activity onStart onResume が実行 ● Cold ○ 実行されていないプロセスから起動 ■ Process Init 〜 Activity onResumeまで実行

Slide 29

Slide 29 text

Macrobenchmark 実装方法 マクロベンチマークを作成する ● テストの実行回数を指定

Slide 30

Slide 30 text

Macrobenchmark 実装方法 実行結果 ● テストを実行!

Slide 31

Slide 31 text

Macrobenchmark 実装方法 実行結果

Slide 32

Slide 32 text

カスタマイズについて

Slide 33

Slide 33 text

カスタマイズについて ● tracing-ktxを使用する ○ トレースメソッドでラップするだけでどんな時間でも計ることができます

Slide 34

Slide 34 text

カスタマイズについて ● tracing-ktxをdependenciesに追加 ● testするメソッドを用意 ● ActivityのonCreate〜onResumeの間でhogePrint()をcall ○ 起動テストに無理やり組み込むので今回は上記のやり方で実施

Slide 35

Slide 35 text

カスタマイズについて

Slide 36

Slide 36 text

参考資料

Slide 37

Slide 37 text

参考資料 ● Macrobenchmark を使用したジャンクとスタートアップの測定 - Youtube ○ https://youtu.be/0adLO2VRJtc ● Jetpack Macrobenchmark でユースケースのベンチマークを行う ○ https://developer.android.com/studio/profile/macrobenchmark ● android Macrobenchmark 公式サンプル - github ○ スクロールのサンプルも記載されてます ○ https://github.com/android/performance-samples/tree/main/Macrobenchm arkSample

Slide 38

Slide 38 text

We’re hiring !! マネーフォワードでは 全方位採用中です! カジュアル面談もお待ちしておりま す!