3

SurfaceViewハンドルが表示領域の外側にどのように描画されるかを自問していました。私はいくつかのオンライン調査を行いましたが、質問する人や質問に答える人を見つけることができませんでした。そこで、いくつかのテストを行いました。テストのセットアップは次のようになります。

SurfaceViewx軸のオフセットが-100で、1000個の円ごとに-100のオフセットが追加された5000個の円を描画します。オフセットはMatrix変換としてに保存され、を使用して描画する前にキャンバスに適用されますCanvas.concat()。その結果SurfaceView、5000個の円が描画されますが、最初はすべて表示領域の外側にあり、画面には表示されません。テストアプリケーションを実行し、に変換を適用しCanvasて、円のスタックが次々に表示されるようにし、1秒あたりのフレーム数を測定しました。すべての更新と描画は、可能な限り頻繁にループする単純なスレッドを使用して行われます。

測定結果は次のとおりです。

  • 0個の表示された円->〜40 FPS
  • 1000個の可視円->〜30 FPS
  • 2000個の可視円->〜20 FPS
  • 3000個の可視円->〜15 FPS
  • 4000個の可視円->〜12 FPS
  • 5000個の可視円->〜10 FPS

これはすべて私自身の2Dエンジンを使用して行われていることを言及する必要があります。要素がない場合は、60FPSで動作します。最初の「欠落した」20FPSは、5000要素を反復するレンダリングパイプラインが原因である可能性があると思います。

誰かがSurfaceViewまたはについてもっと知っていて、Canvasこの振る舞いを説明できますか?

前もって感謝します!

テストセットアップ:Nexus 10、Android 4.2.1、最小SDK:14、ターゲットSDK:17

4

1 に答える 1

1

WarrenFaithが投稿したグラフィックハードウェアの説明に基づいて、すべての円を描くことの違いを測定し、描く前に確認しました。まったく違いはありません!確かに、サークル数を50000に増やし、両方のテストを約4〜5 FPSで実行し、サークルは表示されませんでした。

于 2013-01-09T10:48:09.960 に答える