AI でプロファイルを分析する

ProfilingManager プロファイルは標準の Perfetto 形式を使用し、PerfettoSQL でクエリできるため、AI コーディング エージェントと Perfetto AI スキルを組み合わせることで、Perfetto UI でタイムラインを手動で操作したり、Perfetto 標準ライブラリに対してカスタムクエリを作成したりする代わりに、ワークスペースで直接根本原因分析を自動化できます。

  1. プロファイルを読み込む: エージェントは、Perfetto の trace_processor を使用して、収集されたプロファイルを開きます。
  2. 診断クエリを実行する: Perfetto AI スキルのガイドに従って、エージェントは標準ライブラリ モジュール(ジャンクの場合は android.frames.timeline、メモリリークの場合は android.memory.heap_graph.dominator_tree など)にクエリを実行し、クエリを繰り返し改良します。
  3. ソースコードと関連付ける: エージェントは、カスタム トレース スライス、サンプリングされたコールスタック、またはプロファイル内の保持クラス名を Kotlin または Java ソースファイルに直接マッピングし、修正を提案します。

Perfetto AI スキルを設定する

オープンソースの Perfetto AI スキルは、trace_processor の実行、PerfettoSQL の作成、Android のメモリと CPU の分析のためのガイド付きワークフローの実行方法をコーディング エージェントに教えます。各インストールには trace_processor ラッパーがバンドルされているため、trace_processor を個別にインストールする必要はありません。

  • AI を使用してインストールする: 任意の AI コーディング エージェントで次のプロンプトを実行します。

    Following instructions from https://perfetto.dev/docs/getting-started/using-ai set up the Perfetto AI skill to be usable by any agent
    
  • 手動でインストールする: エージェント(Claude Code、Codex、Cursor、Antigravity、OpenCode など)の Perfetto で AI を使用するの手順に沿って設定します。

ワークフローの例

キャプチャしたプロファイルを 1 つ以上ワークスペースに配置し、AI エージェントに調査を指示します。1 つのプロファイルを分析して個々の問題を診断することも、複数のプロファイルを渡してパターンと回帰を一括で比較することもできます。

Java ヒープダンプと OOM を分析する

PROFILING_TYPE_JAVA_HEAP_DUMP で直接キャプチャした Java ヒープダンプ、または TRIGGER_TYPE_OOM トリガーで自動的にキャプチャした Java ヒープダンプを指定すると、Perfetto AI スキルを使用する AI エージェントが次の特定に役立ちます。

  • メモリリーク: 破棄された Activity インスタンスや Fragment インスタンスなど、再利用されるべきときに GC ルートから到達可能なままになっているオブジェクト。
  • 重複が著しいオブジェクト: インスタンス数が予想外に多く、ヒープの大部分を消費しているクラス。
  • メモリの非効率性: キャッシュのサイズが大きすぎる、データ構造が冗長である、単一のドミネーター オブジェクトが不釣り合いな量のメモリを保持している。

OutOfMemoryError ヒープダンプを調査してアプリのソースコードに関連付けるには、次のようなプロンプトを実行します。

Analyze the Perfetto OOM heap dump at </path/to/profile>, which corresponds to
the codebase located at </path/to/codebase> using the Perfetto AI skill and find
the root cause of the OutOfMemoryError.

このプロンプトによって生成されるレポートの完全な例(ドミネーター ツリーの保持パス、ソースコードの根本原因、提案された修正など)については、ケーススタディ: OOM クラッシュをデバッグするの AI エージェントを使用して OOM 調査を自動化するをご覧ください。

システム トレースと ANR を分析する

PROFILING_TYPE_SYSTEM_TRACE で直接キャプチャしたシステム トレース、または TRIGGER_TYPE_ANR トリガーで自動的にキャプチャしたシステム トレースを提供すると、Perfetto AI スキルを使用する AI エージェントが次の特定を支援します。

  • メインスレッドのオペレーションのブロック: 実行時間の長いトレース スライスまたは同期呼び出し。UI スレッドが ANR しきい値に達する前に入力イベントを処理したり、フレームを描画したりできなくなります。
  • スレッド状態のボトルネック: メインスレッドが Sleeping(ネットワーク I/O のブロックや Thread.sleep タイムアウトなど)、Blocked(ロック競合)、Runnable(CPU スケジューリングの遅延)の状態で停止している間隔。
  • メインスレッドの CPU スパイク: バックグラウンド スレッドではなく、UI スレッドで直接実行される負荷の高い計算やタイトなループ。

ANR システム トレースを調査し、アプリのソースコードと関連付けるには、次のようなプロンプトを実行します。

Analyze the Perfetto system trace at </path/to/trace.perfetto-trace>, which
corresponds to an ANR trace, and find the root cause of the ANR using the
Perfetto AI skill. The codebase is located at </path/to/codebase>.

このプロンプトによって生成されるレポートの完全な例(メインスレッド スライスの内訳、thread_state 間隔の再構築、ソースコード マッピングなど)については、ケーススタディ: ANR をデバッグするの AI エージェントを使用して ANR 調査を自動化するをご覧ください。