CPU Profiler を使用して CPU アクティビティを検査する

アプリによる無駄な CPU 使用をなくすことで、高速でスムーズなユーザー エクスペリエンスを実現する、デバイスのバッテリー寿命を延ばす、のようなメリットを多く得られます。

CPU Profiler を使用すると、アプリの CPU 使用率とスレッド アクティビティをリアルタイムで確認したり、記録されたメソッド トレース、関数トレース、システム トレースの詳細を調べたりできます。

CPU Profiler で記録、表示する特定の情報は、選択した記録構成によって決まります。

  • システム トレース: アプリがシステム リソースをどのように使用しているかを調べることができる、詳細情報を取得します。
  • メソッドと関数のトレース: アプリプロセスの各スレッドで、一定の期間に実行されたメソッド(Java)または関数(C / C++)や、各メソッドまたは関数が実行中に消費した CPU リソースを確認できます。また、メソッド トレースと関数トレースを使用して、呼び出し元と呼び出し先を特定できます。呼び出し元は別のメソッドまたは関数を呼び出すメソッドまたは関数であり、呼び出し先は別のメソッドまたは関数によって呼び出されるメソッドまたは関数です。この情報を使用して、リソースを大量に消費する特定のタスクを頻繁に呼び出す原因になっているメソッドまたは関数を特定し、アプリのコードを最適化して不要な動作を回避できます。

    メソッド トレースを記録する際は、サンプリング記録または計測記録を選択できます。関数トレースを記録するときは、サンプリング記録のみ使用できます。

各トレース オプションの使用と選択について詳しくは、記録構成を選択するをご覧ください。

CPU Profiler の概要

CPU Profiler を開く手順は次のとおりです。

  1. [View] > [Tool Windows] > [Profiler] を選択するか、ツールバーの [Profile] をクリックします。

    [Select Deployment Target] ダイアログが表示されたら、プロファイリング用にアプリをデプロイするデバイスを選択します。USB 経由でデバイスを接続しているにもかかわらずデバイスがリストに表示されない場合は、USB デバッグが有効になっているかを確認します。

  2. [CPU] タイムラインの任意の場所をクリックして CPU Profiler を開きます。

CPU Profiler を開くと、アプリの CPU 使用率とスレッド アクティビティが、図 1 のように画面に表示されます。

図 1. CPU Profiler のタイムライン。

図 1 に示すように、CPU Profiler のデフォルト ビューには次のタイムラインが表示されます。

  1. イベント タイムライン: ライフサイクルでさまざまな状態に変化するアプリのアクティビティと、画面の回転イベントなどのユーザーによるデバイス操作を示します。Android 7.1(API レベル 25)以前を搭載しているデバイスでイベント タイムラインを有効にする方法については、詳細なプロファイリングを有効にするをご覧ください。
  2. CPU タイムライン: アプリのリアルタイム CPU 使用率を利用可能な合計 CPU 時間の割合で表すとともに、アプリが使用しているスレッドの合計数を示します。このタイムラインには、他のプロセス(システム プロセスまたは他のアプリ)の CPU 使用率も示されるため、アプリの CPU 使用率と比較できます。マウスをタイムラインで水平方向に動かすと、CPU 使用率の履歴データを調べることができます。
  3. スレッド アクティビティ タイムライン: アプリプロセスの各スレッドを一覧表示し、以下の色を使用して、スレッドのアクティビティをタイムラインに沿って示します。トレースを記録したら、このタイムラインでスレッドを選択し、トレースペインでそのデータを検証できます。
    • 緑: スレッドがアクティブであるか、CPU を使う用意ができています。つまり、スレッドは実行中または実行可能な状態です。
    • 黄: スレッドはアクティブですが、タスクを完了する前に、ディスク I/O やネットワーク I/O などの I/O 操作を待機しています。
    • グレー: スレッドがスリープ状態であり、CPU 時間を消費していません。この状態は、スレッドがまだ利用できないリソースへのアクセスを要求したときに発生することがあります。スレッドは自発的にスリープ状態になるか、要求したリソースが利用可能になるまでカーネルによってスリープ状態に置かれます。

    CPU Profiler は、JDWPProfile SaverStudio:VMStatsStudio:PerfaStudio:Heartbeat(スレッド アクティビティのタイムラインに表示される正確な名前は異なる場合があります)など、Android Studio と Android プラットフォームがアプリプロセスに追加したスレッドの CPU 使用率も報告します。Android Studio ではこのデータが報告されるため、アプリのコードによってスレッド アクティビティと CPU 使用率が実際に発生したタイミングを特定できます。