アプリ デベロッパーにとって難しい問題の一つに、いかにしてスムーズで安定したジャンクのないアニメーションを実現するかという問題があります。特に、同じシステムでリソースを大量に消費するバックグラウンド タスクも実行されている場合、そのデバッグは困難です。ジャンクが発生する原因がアプリなのかシステムなのか、簡単には判断できないからです。しかし、動作不良の原因の特定に役立つプロファイラ ツールがあります。
Chrome OS でのレンダリング
ゲームなどの細かな調整を要するアプリの場合、通常ダブル バッファリングを使用して、ユーザーへの応答時間を可能な限り短くします。それでもなお、パフォーマンスを低下させる要因はたくさんあります。たとえば、フレームのレンダリングに時間がかかりすぎると、次回のバッファ スワップに間に合わず、前回のフレームが繰り返し表示されることになります。その後も、レンダラはその次のフレームのレンダリングを開始できないために、さらに多くの問題が発生します。このような状況は、「純粋な」Android 向けアプリのデベロッパーにとってはおなじみのものです。アプリを Chrome OS で実行するとなれば、状況はさらに複雑になります。
デスクトップで実行されているアプリは、画面の表示フレームに直接レンダリングすることはありません。データはレンダリングされてテクスチャになります。通常はアプリが複数あり、それぞれによってグラフィックスがテクスチャにレンダリングされます。システムがコンポジタを使用して画面上にビューを構築し、すべてのテクスチャを 1 つのデスクトップ画像に統合します。
コンポジタはバックグラウンドで透過的に動作します。ただし、GPU パイプラインを最大限に活用するために、1 フレームの遅延が発生します。これは理想的な状況では不要ですが、これにより負荷の変動が吸収され、システムのパフォーマンスがある程度一定に保たれます。
OS が非常に忙しく動作している場合、GPU が圧迫される可能性があります。その場合、フレームがレンダリングされてから画面に表示されるまでに、さらに遅延する可能性があります。これは、4 重バッファリングを使用することで緩和できる場合があります(ハードウェアに依存します)。しかし、バッファリングを深くしても、グラフィック パイプラインが問題になる可能性は完全には消えません。
ARC グラフィック トレーサー
Chrome OS には、ある時間におけるバッファの使用状況、メモリスワップの発生状況、CPU や GPU のビジー状況、アプリの実施内容を把握できるプロファイリング ツールが用意されています。
プロファイラのセットアップ
プロファイラを使用するには、M75 以降を実行する必要があります。また、Intel デバイスの使用が推奨されます。
プロファイラを使用する前に、アプリにトレースを設定する必要があります。トレースを追加するコードに、Trace.traceCounter(Trace.TRACE_TAG_GRAPHICS, "Event", <number>);
を追加します。ここで、Event
は接頭辞 customTrace.
で始める必要があります。接頭辞はトレース メッセージには表示されません。
プロファイラの設定手順は次のとおりです。
- デベロッパー モードをオンにします。
- Chrome の設定をオンにして、ARC グラフィック バッファ可視化ツールを有効にします。
chrome://arc-graphics-tracing
に移動します。
プロファイラの実行
- [ジャンクで停止する] をオンにします。
- Android アプリを実行します。
- Android アプリがアクティブかつフォーカスされた状態で
Ctrl+Shift+G
キーを押します。
ジャンクが発生すると、ブラウザ ウィンドウがポップアップ表示されます。タイムラインを拡大、または縮小するには、それぞれ w
キーと s
キーを使用します。