在 systrace 中获取 BufferQueue 状态
Getting BufferQueue state in systrace
我试图更好地了解我的应用程序如何与 Android 的缓冲系统交互。具体来说,我想优化我的帧何时被添加到 SurfaceFlinger 的 BufferQueue,与 Vsync 信号相关。
我了解到在使用 SurfaceView 时,BufferQueue 信息包含在其中:
Binder_1-276 ( 171) [001] ...1 34110.301903: tracing_mark_write: C|171|SurfaceView|1
surfaceflinger-171 ( 171) [001] ...1 34110.314233: tracing_mark_write: C|171|SurfaceView|0
如果我使用的是 TextureView 怎么办?在这些情况下没有 SurfaceView 计数器。不使用 SurfaceView 时是否还有其他缓冲区状态指示器?应用程序计数器是否也表示 BufferQueue 状态?
Binder_2-279 ( 171) [000] ...1 34169.029234: tracing_mark_write: C|171|com.android.grafika/com.android.grafika.PlayMovieActivity|1
BufferQueueProducer.cpp 和 BufferQueueConsumer.cpp 中的以下行似乎暗示了这一点,但如果可能的话,我可以投下信任票:
ATRACE_INT(mCore->mConsumerName.string(), mCore->mQueue.size());
BufferQueue 信息在 systrace/atrace/ftrace 中可用,但有一些注意事项。
在跟踪中,您可能会看到 SurfaceView 调试信息;这将向您显示 BufferQueue 状态(但仅当使用 SurfaceView 时!)。
Binder_4-1188 ( 171) [000] ...1 12563.059605: tracing_mark_write: C|171|SurfaceView|1
在这种情况下,BufferQueue = 1
如果您在非 SurfaceView 应用程序(例如 TextureView)中需要此信息,数据仍可在包名下获得:
Binder_2-279 ( 171) [000] ...1 12668.678680: tracing_mark_write: C|171|com.google.android.youtube/com.google.android.apps.youtube.app.WatchWhileActivity|1
此外,有多个 BufferQueue,这只是告诉您该 BufferQueue 的状态。
我试图更好地了解我的应用程序如何与 Android 的缓冲系统交互。具体来说,我想优化我的帧何时被添加到 SurfaceFlinger 的 BufferQueue,与 Vsync 信号相关。
我了解到在使用 SurfaceView 时,BufferQueue 信息包含在其中:
Binder_1-276 ( 171) [001] ...1 34110.301903: tracing_mark_write: C|171|SurfaceView|1
surfaceflinger-171 ( 171) [001] ...1 34110.314233: tracing_mark_write: C|171|SurfaceView|0
如果我使用的是 TextureView 怎么办?在这些情况下没有 SurfaceView 计数器。不使用 SurfaceView 时是否还有其他缓冲区状态指示器?应用程序计数器是否也表示 BufferQueue 状态?
Binder_2-279 ( 171) [000] ...1 34169.029234: tracing_mark_write: C|171|com.android.grafika/com.android.grafika.PlayMovieActivity|1
BufferQueueProducer.cpp 和 BufferQueueConsumer.cpp 中的以下行似乎暗示了这一点,但如果可能的话,我可以投下信任票:
ATRACE_INT(mCore->mConsumerName.string(), mCore->mQueue.size());
BufferQueue 信息在 systrace/atrace/ftrace 中可用,但有一些注意事项。
在跟踪中,您可能会看到 SurfaceView 调试信息;这将向您显示 BufferQueue 状态(但仅当使用 SurfaceView 时!)。
Binder_4-1188 ( 171) [000] ...1 12563.059605: tracing_mark_write: C|171|SurfaceView|1
在这种情况下,BufferQueue = 1
如果您在非 SurfaceView 应用程序(例如 TextureView)中需要此信息,数据仍可在包名下获得:
Binder_2-279 ( 171) [000] ...1 12668.678680: tracing_mark_write: C|171|com.google.android.youtube/com.google.android.apps.youtube.app.WatchWhileActivity|1
此外,有多个 BufferQueue,这只是告诉您该 BufferQueue 的状态。