デバイス上でシステム トレースをキャプチャする

Android 9(API レベル 28)以降を搭載しているデバイスには、「システム トレース」と呼ばれるシステムレベルのアプリが組み込まれています。このアプリは、systrace コマンドライン ユーティリティと似ていますが、デバイスを ADB 経由で接続する必要はなく、直接テストデバイスからトレースを記録できます。アプリを利用することで、トレース結果を開発チームと共有できます。

起動が遅い場合や、遷移が遅い場合、UI ジャンクが発生する場合など、アプリ内に存在するパフォーマンス関連のバグに対処する際、トレースを記録しておくと特に役立ちます。

システム トレースを記録する

システム トレース アプリを使用すると、[クイック設定] タイルやアプリ内のメニューを使用してシステム トレースを記録できます。以下のセクションでは、各インターフェースを使用して記録プロセスを完了する方法について説明します。

[クイック設定] タイルを使用して記録する

通常、オンデバイス システム トレース プロセスを完了する方法としては、[クイック設定] タイルを使用するのが最も簡単です。

タイルをセットアップする

図 2. システム トレースアプリの [[クイック設定] タイルの表示] スイッチ

テストデバイス上で初めてシステム トレースを使用する場合、あるいは、デバイスのクイック設定パネル(図 1)に [システム トレース] タイルが表示されていない場合は、次のセットアップ手順を完了します。

  1. 開発者向けオプションを有効にしていない場合は、有効にします
  2. [開発者向けオプション] 設定画面を開きます。
  3. [デバッグ] セクションで、[システム トレース] を選択します。システム トレースアプリが開き、アプリメニューが表示されます。
  4. アプリメニューから、[[クイック設定] タイルの表示] をオンにします(図 2 を参照)。 [システム トレース] タイルがクイック設定パネルに追加されます(図 1 を参照)。

    図 1. クイック設定パネルの [システム トレース] タイル

    注: デフォルトでは、[システム トレース] タイルは、クイック設定パネル内の 1 番目のタイルとして追加されます。タイルを別の位置に表示したい場合は、パネルの編集モードを使用してタイルを移動します。

システム トレース記録を完了する

クイック設定パネルを使用してシステム トレースを記録する手順は次のとおりです。

  1. [システム トレース] タイルをタップします。[トレースを記録] というラベルが表示されます。タイルが有効になり、システムが現在トレースを記録中であることを通知する永続通知が表示されます(図 3 を参照)。

    「トレースを記録しています。タップするとトレースを停止します」というメッセージの通知
    図 3. オンデバイス システム トレースが開始された後に表示される永続通知
  2. 検査するアクションをアプリで実行します。

  3. アクションを完了したら、クイック設定パネルの [システム トレース] タイルか、[システム トレース] 通知をタップして、トレースを停止します。

    「トレースを保存しています」というメッセージを含む新しい通知が表示されます。保存が完了すると、通知が消去されます。そして、トレースが保存されたことを知らせ、システム トレースを共有する準備が整っているか尋ねる 3 番目の通知が表示されます(図 4 を参照)。

    「トレースを保存しました。タップするとトレースを共有します」というメッセージの通知
    図 4. システムがトレース記録の保存を終了した後に表示される永続通知

アプリメニューを使用して記録する

アプリメニューを使用すると、システム トレースに関する各種の詳細設定を行い、システム トレースの開始と停止を切り替えることができます。

システム トレースアプリ メニューを使用してシステム トレースを記録する手順は次のとおりです。

  1. 開発者向けオプションを有効にしていない場合は、有効にします
  2. [開発者向けオプション] 設定画面を開きます。[デバッグ] セクションで、[システム トレース] を選択します。システム トレースアプリが開きます。

    あるいは、[システム トレース] タイルをセットアップ済みの場合は、タイルを長押しすることで、システム トレースアプリを起動できます。

  3. デバッグが有効になっているアプリをシステム トレースに含めるには、[デバッグ可能なアプリをトレース] が選択されていることを確認します。

  4. 必要に応じて、トレースするシステム呼び出しやセンサー呼び出しの [カテゴリ] を選択して、[CPU あたりのバッファサイズ](単位: KB)を選択します。テストするユースケースに対応するカテゴリを選択してください。たとえば、Bluetooth の動作をテストする場合は [オーディオ] カテゴリを、ヒープ割り当ての場合は [メモリ] カテゴリ選択します。

    図 5. システム トレースアプリの [トレースを記録] スイッチ
  5. [長期トレース] を選択すると、トレースをデバイスのストレージに継続的に保存するオプションを有効にできます。このオプションでは、[最長トレースサイズ] と [最長トレース期間] の上限を設定する必要があります。

  6. 図 5 でハイライト表示されている [トレースを記録] スイッチをオンにします。タイルが有効になり、システムが現在トレースを記録中であることを通知する永続通知が表示されます(図 3 を参照)。

  7. 検査するアクションをアプリで実行します。

  8. アクションを完了したら、[トレースを記録] スイッチをオフにして、トレースを停止します。

    「トレースを保存しています」というメッセージを含む新しい通知が表示されます。保存が完了すると、通知が消去されます。そして、トレースが保存されたことを知らせ、システム トレースを共有する準備が整っているか尋ねる 3 番目の通知が表示されます(図 4 を参照)。

システム トレースを共有する

システム トレースアプリを使用すると、複数のワークフローの一部としてシステム トレース結果を共有できます。Android 10(API レベル 29)以降を搭載したデバイスでは、トレース ファイルは .perfetto-trace ファイル名拡張子で保存され、Perfetto UI で開くことができます。以前のバージョンの Android を搭載したデバイスでは、トレース ファイルは Systrace 形式を示す .ctrace ファイル名拡張子で保存されます。

メッセージとして共有する

システム トレースを使用すると、収集したトレースをデバイス上の他のアプリと共有できます。これにより、デバイスを開発マシンに接続することなく、メールやバグ トラッキング アプリを通じて開発チームにトレースを送信できます。

システム トレースの記録が完了したら、デバイスに表示される通知をタップします(図 4 を参照)。プラットフォームのインテント選択ツールが表示され、任意のメッセージ アプリを使用してトレースを共有できます。

ファイルアプリから共有する

Android 10(API レベル 29)を搭載したデバイスでは、ファイルアプリにトレースが表示されます。必要に応じて、このアプリからトレースを共有できます。

ADB を使用してレポートをダウンロードする

必要に応じて、ADB を使用してデバイスからシステム トレースを抽出することもできます。トレースを記録したデバイスを開発マシンに接続して、ターミナル ウィンドウで次のコマンドを実行します。

cd /path-to-traces-on-my-dev-machine && \
  adb pull /data/local/traces/ .

トレース形式間の変換

Perfetto トレース ファイルは Systrace 形式に変換できます。詳細については、トレース形式間の変換をご覧ください。

HTML レポートを作成する

トレースを共有する場合、レポート自体は .perfetto-trace ファイル(Android 10 以降を搭載したデバイス)または .ctrace ファイル(他のすべてのバージョン)に存在します。

ウェブベースの UI またはコマンドラインを使用して、トレース ファイルから HTML レポートを作成します。

ウェブベースの UI

Perfetto UI を使用してトレース ファイルを開き、レポートを生成します。

Perfetto ファイルの場合は、[Open trace file] をクリックします。Systrace ファイルの場合は、[Open with legacy UI] をクリックします。従来の UI のデザインは、Systrace レポートと同じです。

コマンドライン

ターミナル ウィンドウで次のコマンドを実行し、トレース ファイルから HTML レポートを生成します。

cd /path-to-traces-on-my-dev-machine && \
  systrace --from-file trace-file-name{.ctrace | .perfetto-trace}

systrace コマンドライン プログラムをまだインストールしていない場合は、GitHub の Catapult プロジェクトから、または Android オープンソース プロジェクトから直接ダウンロードできます。