0

現在、Android で atrace を使用して、ビデオ ワークロード中の OS の状態を記録および分析しています。具体的には、実行中にシステムの BufferQueue のサイズを監視しています。atrace は、時間の経過とともにキューに入れられる/取得されるこれらのバッファーのサイズをログに記録します。

ただし、私のトレースの一部では、これは不可能な状況につながります。C|171|SurfaceView|x の行は、'x' がバッファ内にキューに入れられたテクスチャの数であることを示します。たとえば、1 回の取得中に、1 つではなく 2 つのバッファーが削除されることがあります (これは不可能なはずです)。

     Binder_5-4526   (  171) [002] ...1  1621.656462: tracing_mark_write: B|171|queueBuffer
     Binder_5-4526   (  171) [002] ...1  1621.656493: tracing_mark_write: C|171|SurfaceView|2
surfaceflinger-171   (  171) [002] ...1  1621.664886: tracing_mark_write: B|171|acquireBuffer
surfaceflinger-171   (  171) [002] ...1  1621.664978: tracing_mark_write: C|171|SurfaceView|0
4

1 に答える 1

1

Android のプラットフォーム コード (例: https://android.googlesource.com/platform/frameworks/native/+/android-5.0.1_r1/libs/gui/BufferQueueConsumer.cpp ) の BufferQueueConsumer.cpp ファイルで、 acquireBuffer を確認します。関数。

特定の状況 (たとえば、バッファーが古くなっている) では、関数はキューからバッファーを削除することを決定する場合があります。このイベントが発生したことを示すトレースはありません。バッファのサイズが 2 から 0 にジャンプするだけです。

また、キューバッファ/acquireBuffer コマンドが密接にインターリーブされ、予期しないバッファ サイズの遷移が出力される可能性もあります。

于 2015-02-18T22:02:39.737 に答える