Androidアプリのパフォーマンス 解析


この記事では、Androidアプリのパフォーマンス改善のための、解析方法について記載します。

準備

パフォーマンスの解析にはいくつか方法がありますが、ここでは「Systraceコマンドラインツール」を使用します。

Systraceコマンドを使うにはAndroid SDKとPython(2.7)が必要です。
 https://qiita.com/yoshihiro-kato/items/1c4fb816782e6a8aba8e

カスタムイベント

処理に時間がかかっていそうな部分にカスタムログを入れます。
※どの辺に時間がかかっているかわからない場合は、広い範囲に入れてみると良いです。

カスタムログは下記のようにTrace.beginSectionとTrace.endSectionをペアで実装します。

TextViewSampleActivity.kt
class TextViewSampleActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        Trace.beginSection("TextViewSampleActivity#onCreate")
        ...
        Trace.endSection()
    }
}

Systraceの取得

まず、下記のコマンドを実行します。
※systrace.pyはSDKの中にあるので、パスは実行環境に合わせて書き換えてください。
※カスタムイベントを取得するには、プロセス名の指定(--app)が必要です。
※-oで出力ファイル名を指定します。

python /Users/yoshihiro/Library/Android/sdk/platform-tools/systrace/systrace.py --app=com.ykato.sample.kotlinsampleapplication -o mynewtrace.html sched freq idle am wm gfx view binder_driver hal dalvik camera input res

上記のコマンドを実行すると、下記がコンソールに表示されます。
下記が表示されたら、パフォーマンス解析を行いたい操作を行ってください。

Starting tracing (stop with enter)

操作が終わったら、コンソール上でエンターキーを押下してください。

Tracing completed. Collecting output...
Outputting Systrace results...
Tracing complete, writing results

Wrote trace HTML file: file:///Users/ykato/Documents/tmp/mynewtrace.html

Systraceの解析

Systraceの取得結果の解析は、下記のURLから行います。
https://ui.perfetto.dev

左のツールバーの一番上にある「Open trace file」から、結果を確認したいファイルを選択します。

取得結果はプロセス毎に表示され、画面上部の検索窓から、Trace.beginSectionで指定したsectionNameを検索することで、解析対象を簡単に見つけることが出来ます。

上記の場合は、TextViewSampleActivity#onCreateは223msかかっていることがわかります。

取得結果の表示操作の詳細は下記を参照してください。
https://developer.android.com/topic/performance/tracing/navigate-report?hl=ja#keyboard-shortcuts

補足

左のツールバーの一番上にある「Open with legacy UI」から、結果を開くことで、表示パフォーマンスに問題がある場所(フレームアラート)を特定することが出来ます。

legacy UIもプロセス毎に表示されます。
フレームアラートは丸で囲まれたFで表示され、問題ある箇所は赤と黄色で表示されます。

参考