Что представляет SurfaceView в результате systrace?

При исследовании проблемы с заиканием игры я обнаружил, что между eglSwapBuffer() из игры и postFramebuffer() в Surfaceflinger всегда есть задержка в «SurfaceView», которая длится от 0,5 мс до 10 мс, что кажется довольно случайным и не имеет отношения к загрузке ЦП. Что это на самом деле представляет? Это как-то связано с точкой отображения VSYNC?

http://i.stack.imgur.com/n8MvG.png


person xiay    schedule 27.03.2014    source источник


Ответы (1)


Эта строка представляет BufferQueue. Высота элемента (0 или 1 в видимой части вашей трассировки) указывает, сколько буферов присутствует в очереди.

В данном случае это очередь графических буферов, представленных на поверхности SurfaceView. Когда ваше приложение вызывает eglSwapBuffers(), оно отправляет буфер в очередь. Когда SurfaceFlinger просыпается по сигналу VSYNC, он фиксирует буфер из очереди, если он доступен, и объединяет его для следующего обновления.

Обновление: BufferQueues и их использование подробно описаны здесь. Приложение C упоминает их появление в systrace.

person fadden    schedule 27.03.2014