サイトのトップへ戻る

Android Studio ドキュメント 日本語訳

サイト内検索

Profile GPU Rendering Walkthrough

このウォークスルーでは、端末上で GPUレンダリングのプロフィール を使う方法について説明します。

GPUレンダリングのプロフィールを使用すれば、UI ウィンドウのフレームを描写するのに、16 ミリ秒/フレームのベンチマーク と比較してどれだけ時間がかかるのかを素早く視覚化できます。

これは以下の作業ができます:

  • UI ウィンドウの実行が16 ミリ秒/フレームと比較してどれくらいなのかを素早く確認します。
  • Identifying whether any part of the rendering pipeline stands out in using processing time.
  • ユーザー操作やプログラム動作に関連したフレーム描写時間の乱高下を調べます。


前提条件



Working with Profile GPU Rendering

    1. 図 1. レンダリングのプロフィール作成を有効にする

    2. 使用する携帯端末で、設定 > 開発者向けオプションと進みます。
    3. 監視 の項目で、 Profile GPU レンダリングのプロフィール作成を選びます。
    4. GPU レンダリングのプロフィール作成ポップアップにて、バーとして画面に表示を選んで携帯端末の画面上にグラフを重ねて表示するようにします。
    5. プロフィールを取得したいアプリを起動します。

  • 図 2. GPU レンダリングのプロフィール作成を有効にした時の画面。

    何が表示されるか:

    • 各可視アプリケーションごとに、グラフを表示します。
    • 横軸は時間経過を示し、縦軸はフレームあたりの時間をミリ秒単位で示します。
    • アプリケーションを操作すると、画面上に縦棒が表示され○。これが左から右へ表示されていき、時間経過ごとのフレームパフォーマンスをグラフで表示します。
    • 各縦線は、1フレームの描写処理を表します。線が高いほど、描写に長く時間がかかっています。
    • 緑の横線は、16ミリ秒のターゲットマークです。フレームがこの緑線を越えたタイミングでは、アプリはフレームを表示できず、ユーザーには画像が乱れてみえるかもしれません。

  • GPU レンダリングプロフィールのグラフ

    図 3. Profile GPU Rendering のグラフを拡大して注釈を付けたもの。

    上のProfile GPU Rendingのグラフを拡大した画像では、グラフの色分けされた項目と、各色で表している描写パイプラインが何のフェイズなのかを見ることができます

    • 緑線 16 ミリ秒のラインを表します。60 フレーム/秒を達成するには、各フレームの縦線をこの16ミリ秒マーカーより下に保つ必要があります。 縦線がこのラインを越える度に、アニメーションが一時停止する可能性があります。
    • 各縦線は青、紫 (Android バージョン4.0以上の場合のみ)、赤、オレンジのコンポーネントを持っています。
    • 縦線の項目は、ビューの表示一覧の作成と準備に使用された時間を表します。縦線のこの部分が高い場合、カスタムビューの描写がたくさんあるか、onDrawメソッド内で多くの処理を行っている可能性があります。
    • Android 4.0 以上:縦線の 項目は、リソースを描写スレッドへ転送するのにかかった時間を表します。
    • 縦線の 項目は、 Androidの2DレンダラーがOpenGL へコマンドを発行して表示一覧の描写と再描写を行うのにかかった時間を表します。 この縦線の高さは、各表示一覧を実行するのにかかる時間とダイレクトに比例します。—表示一覧が多くなると赤い縦線は高くなります。
    • 縦線の オレンジ 項目は、CPUがGPUの処理の完了を待っている時間を表します。 この縦線が高くなると、アプリが非常に多くの処理をGPU上で行っていることを意味します。

    Note: このツールはProfile GPU Renderingという名前ですが、監視する全てのプロセスは実際にはCPU上で発生します。 描写処理はGPUへのコマンド送信によって発生し、GPUは非同期的に画面描写をします。 特定の状況下では、GPUは非常にたくさんの処理を持つことができ、CPUは新たコマンドを送信するのを待つことがあります。 これが起きると Process (オレンジの縦線)部分とExecute (赤い縦線)部分でグラフの乱高下が発生し、GPUコマンドキューに空きができるまでコマンドの送信がブロックされます。