24

Galaxy Nexus を 4.3 にアップデートし、新しいオンスクリーン GPU プロファイリング機能を有効にしました。Android セットアップ画面で次の結果が表示されます。

ここに画像の説明を入力

プラットフォームのハイライトによると:

[With] colors indicating time spent creating drawing commands (blue), issuing the commands (orange), and waiting for the commands to complete (yellow).

非常に単純な画面でも、画面のリフレッシュ時間が滑らかな 60 fps のしきい値 (緑色の線) を超える場合が多くあります。これは主に、リフレッシュにコマンドの待機にかなりの時間がかかる場合が多いためです。完了するまで (黄色の線*)、このステップがほぼ瞬時に完了する場合もあります。これは設定アプリに固有のものでもありませんが、これまでにテストしたすべてのアプリに存在するようです. ※私には黄色というよりオレンジに見えます

私が知りたいのは:

  1. この「コマンドが完了するのを待つ」のに費やされた時間は、画面コマンドがアクティブに処理されていることを意味し、したがって、時間は画面の描画に費やされた時間を正確に表します。または、この時間にはビデオ同期の待機時間が含まれていますか (ただし、この要件を削除するためにトリプル バッファーが使用されると思います)。
  2. 「コマンドが完了するのを待つ」のに費やされる時間は、同じ画面を描画している場合でも大きく変動します (同じ ScrollView でわずかに上下にスクロールします)。この変動を減らす方法についてのガイダンスはありますか (または、全て)?

[編集:]

Nexus 7も更新しましたが、さらに悪いです:

ここに画像の説明を入力

「コマンドが完了するのを待っている」ために 5 フレームもスキップされており、実際の使用状況では、アプリが非常に途切れ途切れで応答しませんでした。

[編集 2:] TRIM を 3 日間トリガーするために、この記事 に従ってこれらを実行したので、N7 は工場出荷時設定へのリセットが不足するのと同じくらい「手付かずの状態」である必要があります。

  • デバイスが 1 時間以上アイドル状態になっている
  • 過去 24 時間に実行されたアイドル メンテナンス ウィンドウ イベントはありません
  • デバイスは 30% のバッテリーで充電されているか、80% のバッテリーを持っています

現在、Google マップの動作が少し改善されているようです (以下を参照)。そのため、方法はわかりませんが、いくつかの問題はフラッシュ アクセス速度に関連している可能性があります。

ここに画像の説明を入力

それでも、Galaxy Nexus は出荷時設定にリセットされているため、「コマンドが完了するのを待つ」時間が長いことは、TRIM コマンドの欠如とは関係がなく、上記の手順に従っても実際には改善されませんでした. 振り出しに戻りました...

4

1 に答える 1

3

「コマンドが完了するのを待っています」は、レンダリングされたフレームに依存関係があることを示します。たとえば、アプリはglReadPixels、レンダリングされたフレームから読み取るために を使用している可能性があります。これは、レンダリングのためにフレームが GPU に送信された後、そのフレームのレンダリングが完了するまでアプリがブロックされることを意味します (通常はすぐに続行できます)。Android は、アプリができるだけ多くのレンダリング コマンドをキューに入れられるようにしようとするため、突然待機が導入されると、実際には、アプリが待機しているフレームがレンダリングされる前に、以前にキューに入れられたいくつかのフレームが描画されるまで待機する必要があることを意味する場合があります。

glReadPixelsこの種の依存関係を引き起こす唯一のコマンドではありません。アプリが現在使用されているテクスチャに書き込みたい場合、テクスチャに依存するすべてのフレームが終了するまで待機する必要があります。これはおそらく、Google マップで起こっていることです。各マップ タイルがテクスチャである場合、表示できるように新しいタイルを書き込むことで、古いオフスクリーン タイルを再利用している可能性があります。アプリは、古いタイルを使用しないフレームをキューに入れると、そのテクスチャに書き込もうとしますが、実際には、以前にキューに入れられたフレームをレンダリングするためにテクスチャがまだ使用されています。アプリは、それらのフレームが終了するまで (そして GPU が「未使用」のテクスチャから読み取らなくなるまで)、書き込む前に待機する必要があります。

理論的には、ワーカー スレッドがテクスチャに書き込むことが可能であり、メイン スレッドが新しいフレームをスムーズにキューイングし続けることができます。しかし、GL の複雑なスレッド モデルにより、このようなものを正しく処理するのは非常に難しく、メイン スレッドは最終的にテクスチャのアップロードが完了するまで待たなければなりません。

設定アプリに関しては、Android の GL バックエンドがアイコンに対して同じテクスチャ再利用トリックを行っている可能性がありますが、それは単なる推測です。おそらく、Galaxy Nexus は 2D コンポジターを使用してフレーム構成を行っているため、電力は節約されますが、ドライバーに待機が発生するという犠牲が伴います。そのような依存関係がチャートで測定されるかどうかはわかりません。

于 2013-08-12T11:32:04.683 に答える