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

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

Android 10 以降を搭載したデバイスではトレースを Perfetto 形式で記録しますが、それ以前のデバイスでは Systrace 形式で記録します。Perfetto トレース ビューアを使用して両方の形式を開いてトレースを分析することをおすすめします。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  5. [長期トレース] を選択すると、トレースをデバイスのストレージに継続的に保存するオプションを有効にできます。このオプションでは、[最長トレースサイズ] と [最長トレース期間] の上限を設定します。

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

    図 5. システム トレース設定の [トレースを記録] スイッチ。
  7. システムに検査させるアクションをアプリで実行します。

  8. [トレースを記録] スイッチをオフにして、トレースを停止します。

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

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

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

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

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

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

Files アプリから共有する

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

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 オープンソース プロジェクトから直接ダウンロードできます。