テストデバイスからプロファイルを取得するか、バックエンドからダウンロードしたら、Perfetto UI でファイルを開いて、タイムライン、スレッドの状態、メモリ保持グラフを調べることができます。このページでは、ProfilingManager でキャプチャされた、秘匿化されたシステム トレースと Java ヒープダンプを操作する方法について説明します。
システム トレースを可視化する
Perfetto UI で .perfetto-trace ファイルを開き、CPU とスレッドのアクティビティを時系列で検査します。
ユーザーのプライバシーを保護するため、ProfilingManager は、他のすべてのプロセスの CPU アクティビティを 1 つの OtherProcesses トラックに統合することで、システム トレースを編集します。この統合されたトラックを検査することで、アプリの速度低下が内部のボトルネックによるものか、デバイス全体の負荷によるものかを判断できます。
図 2 は、秘匿化されたシステム トレースの主なセクションを示しています。
- CPU リスト: デバイスで使用可能なすべてのプロセッサが表示されます。
- CPU タスク: 各 CPU が実行していたスレッドを示します。
- その他のプロセスのビュー: 他のプロセスによって消費された CPU リソースが表示されます。
- Process View: アプリのプロセスを表示します。
- Threads View: プロセス内で実行されているスレッドと、そのスレッドの状態(実行可能(R)、実行中(R)、スリープ(S)、割り込み不可スリープ(D))を表示します。これらは Linux プロセスの状態に直接マッピングされます。
- トレース スライス: このセクションには、アプリ デベロッパーまたはフレームワークによって追加されたトレース アノテーションが表示されます。これらのアノテーションは、
Trace.beginSectionとTrace.endSectionの間の計算を対象としています。
Perfetto UI とトレースの可視化について詳しくは、Perfetto のドキュメントをご覧ください。
Java ヒープダンプを可視化する
PROFILING_TYPE_JAVA_HEAP_DUMP を使用して Java ヒープダンプをキャプチャしたら、生成された .perfetto-java-heap-dump ファイルを Perfetto UI で開き、メモリリークを特定するか、メモリ使用量を最適化します。ヒープダンプ エクスプローラでは、図 3 に示すように、ヒープグラフの探索、累積オブジェクト サイズのフレームグラフの検査、クラス、オブジェクト、ドミネーターの閲覧が可能です。
ProfilingManager ヒープダンプと HPROF ダンプの違い
標準の .hprof ヒープダンプ(Debug.dumpHprofData や Android Studio でキャプチャされたものなど)とは異なり、ProfilingManager は Perfetto ART ヒープダンプ(.perfetto-java-heap-dump)をキャプチャします。ProfilingManager は、未加工のメモリ コンテンツをダンプするのではなく、オブジェクト保持グラフとサイズ設定メタデータを記録し、オブジェクト内に保存されている未加工のデータは省略します。
- 収集されるデータ:
- クラスと型: クラス名、スーパークラス階層、クラスローダ、インスタンス サイズ、参照型(通常のクラス、配列、文字列、弱参照、ソフト参照、ファイナライザ参照、ファントム参照など)。
- オブジェクトのインスタンスとサイズ: 各オブジェクトのシャローサイズ(
self_size)、ヒープ領域(HEAP_TYPE_APP、HEAP_TYPE_ZYGOTE、HEAP_TYPE_BOOT_IMAGE)、NativeAllocationRegistryを介して登録された関連するネイティブ メモリ。 - 参照と GC ルート: ガベージ コレクション ルート(JNI グローバルとローカル、Java スタック フレーム、スレッド オブジェクトなど)と、どのオブジェクトがどのフィールド名で別のオブジェクトを保持しているかを示すフィールド レベルの参照チェーン。
- サイズ設定メタデータを選択する:
Bitmapディメンション(mWidthとmHeight)など、特定のフレームワーク タイプに関する機密性のないメタデータ。
- 省略されるもの: 実際のプリミティブ フィールド値、
String文字コンテンツ、未加工の配列ペイロード(byte[]、char[]、その他のプリミティブ配列)。未加工のオブジェクト コンテンツを省略すると、本番環境デバイスでユーザーのプライバシーが保護され、ダンプファイルのサイズが大幅に小さくなります。
次のステップ
Perfetto UI での視覚的な検査以外にも、PerfettoSQL を使用してプロファイルをクエリしたり、トレースを一括で分析したり、AI を使用してプロファイルを分析したりできます。