コールスタックをサンプリングする

コールスタックは、実行に時間がかかるコードのセクションである CPU ホットスポットの特定に役立ちます。コールスタックは、コードの実行された部分と、それが呼び出された理由を把握するために役立ちます。

コールスタック サンプルの概要

コールスタックをサンプリングするには、Android Studio Profiler の [Home] タブから [Find CPU Hotspots (Callstack Sample)] タスクを選択します。録音が解析されると、次のビジュアルが表示されます。

CPU 使用率インタラクションのタイムラインを補完するために、[スレッド] セクションには、アプリとシステムが行うすべての呼び出しのフレームが表示されます。コールスタックのサンプルを操作する際のヒントをいくつかご紹介します。

  • 目的のスレッドを展開し、キーボード ショートカットを使用してスタック フレームを移動します。スタック フレームをクリックすると、[分析] ペインにイベントと関連する呼び出しの詳細が表示されます。
  • 特定の種類のスタック フレームをフィルタするには、[フレームを折りたたむ] をクリックし、非表示にするフレームの種類をオンにします。フレームを折りたたむと、[スレッド] セクションと [分析] セクションの両方から削除されます。調査によっては、Java 仮想マシン(android::AndroidRuntime::startart::{...} など)とシステム カーネル([kernel.kallsyms]+{offset} など)のフレームを折りたたむ必要がある場合があります。通常、これは [kernel.kallsyms]/apex//system/* に関連するフレームを折りたたむことに対応します。

Java/Kotlin プログラムは通常、Java 仮想マシンを介して実行されるため、Android Studio が Java/Kotlin プログラムのコールスタックを収集すると、コールスタックには通常、Java/Kotlin コードだけでなく、プログラム自体を実行し、プログラムがシステムやハードウェアと通信するために必要なネイティブ コードも含まれます。

  • スタック フレームに関連付けられたソースコードにジャンプするには、フレームを右クリックして [Jump to source] をクリックします。
  • イベント テーブルでイベントに関連付けられたスタック フレームをハイライト表示するには、イベントをクリックします。

その他のビジュアルについては、システム トレースを記録するグラフの用語集をご覧ください。

コマンドラインを使用したネイティブ コードのサンプル

内部的には、Android Studio は simpleperf を使用して、アプリのネイティブ コードをトレースします。特定のデバイス CPU をサンプリングする場合や、高精度のサンプリング期間を指定する場合など、Simpleperf の追加オプションを指定するには、コマンドラインから simpleperf を使用します。