2015-01-09 29 views
0

내 응용 프로그램이 Android의 버퍼링 시스템과 상호 작용하는 방식을 더 잘 이해하려고합니다. 특히 Vsync 신호와 관련하여 내 프레임이 SurfaceFlinger의 BufferQueue에 추가 될 때 최적화하고 싶습니다.systrace에서 BufferQueue 상태 가져 오기

내가 그들을 사용하는 경우 BufferQueue 정보가 SurfaceViews 내부에 포함되어 있는지 이해 :

 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()); 
+0

https://source.android.com/devices/graphics/architecture.html#tracking을 참조하십시오. – fadden

+0

이전에 읽었지만 찾고있는 흔적에 SurfaceView가 표시되지 않습니다 ... 나는 모든 systrace 카테고리를 사용할 수있게했습니다. – Shookit

+0

실제로, 나는 더 큰 흔적을 통해 그냥 덮쳤다. youtube는 SurfaceView를 가지고 있지는 않지만 VLC *는 *; 왜 이것이 될 수 있는지 아십니까? – Shookit

답변

0

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 

또한, BufferQueues가 여러 개 있는데, 이는 해당 BufferQueue 상태에 대해서만 알려줍니다.