2019年8月21日水曜日

Android開発者向けオプションでグラフィックの負荷を表示する

Androidで描画が重いのかを確認する


 Androidアプリで「重い」場合の原因の一つに、”表示だけが重い?”と感じた場合、以下の方法を試すと表示(描画)が原因でカクついているのかを確認することが出来ます。

 確認画面はこんな感じです。

 弊社の開発アプリ「ぽぽぽぽ」の開発中に、下記設定をONにした状態でスクリーンショットを撮ったものです。
 アプリ内の花火をアニメーションで描画するときに何故かとても重い個体があったので確認してみました。
 もしこのAndroidアプリに興味のある方は>こちら<からどうぞ^^


<設定方法>


 まず、「開発者モード」をONにします。方法は以前記載した方法です。

 次に、「開発者向けオプション」から、

 「GPUレンダリングのプロファイル作成」を選択し、「バーとして画面に表示」を選択します。この時点で画面下に棒グラフが現れてくると思います。

 試しに開発者向けオプション内のページを上下にスライド操作するだけでパラパラと棒グラフが左に移動しながら負荷を高さで表していくと思います。

 ここで、重いアプリを起動してみます。
 重いといっても、「表示が遅くない???」というものを試してみましょう。
 “描画”が重い原因となっている場合、以下の様にとびぬけてグラフ縦方向が伸び、それが描画終わるまで続きます。よく、透過が多い画像や重なり、移動、拡大縮小のアニメーションで重くなることも多いと思います。

 静的なアプリ(アニメーションが無い、広告も止まっている)では、このようにほとんどグラフが動くようなことはありません。操作したときに若干グラフが伸びる程度です。


 設定を戻す時は逆の手順になります。
 「開発者向けオプション」から「GPUレンダリングのプロファイル作成」が「バーとして画面に表示」になっているのを「OFF」に戻します。


<グラフについて>


 棒グラフ1本の縦線は1フレーム当たりのレンダリングにかかった時間(ミリ秒)を表します。

 緑の横線は16ミリ秒の節目で、1秒当たり60フレームのスムーズさを出すためには垂直バー全体がこの線よりも下に収まっている必要がある目安になります。

 グラフのオレンジ色はCPUがGPUタスクの完了を待っている状態で長い場合はGPUをたくさん使っている状態という意味になります。

 グラフの赤色は、ディスプレイリストを描画/再描画するときにOpenGLへのコマンド発行にかかった時間で、描画すべき情報(リスト)が増えれば増えるほど長くなります。

 水色またはは、画像をGPUにアップロードするのにかかった時間になります。

 系は細かくいくつかに分かれますが、いちばん濃い緑はアプリが二つの連続したフレーム間で動作を実行するのにかかった時間を表します(あんにアニメーション系という事でしょうかね)。UIスレッドで発生し過大な処理を表している可能性が高く、別スレッドにすることで解決できる場合があります。


 もしAndroidが重くてこのグラフが高い場合は、描画系に何かしらの問題があるか、スペックとして追い付いていないか、アプリ側が無茶をしているかということになりますでしょうか。。。
 逆にグラフが伸びていないのにカクついていたりもっさりしている感じがする場合は、別の理由(CPU(処理)やメモリ、メモリ不足、ストレージアクセス当たり?)に原因があるかもしれません。

 なかなか対処は難しいですが、原因がわかるだけでも少し気分は変わりますね。


 - PDS PIS 研究室 室長 -

0 件のコメント:

コメントを投稿