アニメーションの不具合をデバッグする

アプリ デベロッパーにとって難しい問題の一つに、いかにしてスムーズで安定したアニメーションを実現するかという問題があります。特に、同じシステムでリソースを大量に消費するバックグラウンド タスクも実行されている場合、そのデバッグは困難です。グリッチの原因がアプリなのかシステムなのかを判断するのは難しい場合があります。しかし、プロファイラ ツールは、問題動作の原因の特定に役立ちます。

ChromeOS でレンダリングする

ゲームなどの細かな調整を要するアプリの場合、通常ダブル バッファリングを使用して、ユーザーへの応答時間を可能な限り短くします。それでもなお、パフォーマンスを低下させる要因はたくさんあります。たとえば、フレームのレンダリングに時間がかかりすぎると、次回のバッファ スワップに間に合わず、前回のフレームが繰り返し表示されます。

その後も、レンダラはその次のフレームのレンダリングを開始できないために、さらに多くの問題が発生します。このような状況は、Android モバイル デベロッパーにとってはおなじみのものです。アプリを ChromeOS で実行するとなれば、状況はさらに複雑になります。

デスクトップで実行されているアプリは、画面の表示フレームに直接レンダリングすることはありません。データはレンダリングされてテクスチャになります。通常はアプリが複数あり、それぞれによってグラフィックスがテクスチャにレンダリングされます。システムがコンポジタを使用して画面上にビューを構築し、すべてのテクスチャを 1 つのデスクトップ画像に統合します。

コンポジタはバックグラウンドで透過的に動作しますが、GPU パイプラインを最大限に活用するために、1 フレームの遅延が発生します。この遅延により、負荷の変動が吸収され、システムのパフォーマンスがある程度一定に保たれます。

OS が忙しく動作している場合、GPU が圧迫され、フレームがレンダリングされてから画面に表示されるまでに遅延が生じる可能性があります。これは、ハードウェアによっては 4 重バッファリングを使用することで緩和できる場合があります。しかし、バッファリングを深くしても、グラフィック パイプラインが問題になる可能性は完全には消えません。

ARC グラフィック トレーサー

ChromeOS には、ある時間におけるバッファの使用状況、メモリスワップの発生状況、CPU や GPU のビジー状況、アプリの実施内容を把握できるプロファイリング ツールが用意されています。次の図をご覧ください。

システム プロセスのタイムラインを示す ARC グラフィック トレーサーの UI。
図 1. システム プロセスのタイムラインを示す ARC グラフィック トレーサーの UI。

プロファイラを設定する

プロファイラを使用するには、M75 以降を実行する必要があります。また、Intel デバイスの使用が推奨されます。

プロファイラを使用する前に、アプリにトレースを設定します。トレースを追加するコードに、Trace.traceCounter(Trace.TRACE_TAG_GRAPHICS, "Event", <number>); を追加します。接頭辞 customTrace で始まる Event を使用します。接頭辞はトレース メッセージには表示されません。

プロファイラの設定手順は次のとおりです。

  1. デベロッパー モードをオンにします。
  2. Chrome の設定をオンにして、ARC グラフィック バッファ可視化ツールを有効にします。
  3. chrome://arc-graphics-tracing に移動します。

プロファイラを実行する

  1. [stop on glitch] を選択します。
  2. Android アプリを実行します。
  3. Android アプリがアクティブかつフォーカスされた状態で Control+Shift+G キーを押します。

グリッチが発生すると、ブラウザ ウィンドウがポップアップ表示されます。タイムラインを拡大、縮小するには、それぞれ W キー、S キーを使用します。