我目前在 Android 上使用 atrace 来记录和分析视频工作负载期间操作系统的状态。具体来说,我在整个执行过程中监控系统的 BufferQueue 大小。atrace 记录这些缓冲区的大小,因为它们随着时间的推移排队/获取。
然而,在我的一些痕迹中,这导致了不可能的情况。C|171|SurfaceView|x 行将“x”表示为缓冲区中排队的纹理数量。例如,有时在一次获取期间,会删除两个缓冲区而不是一个(这应该是不可能的):
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