Причина выполнения рекурсии переходов, длинных периодов замены буфера egl

Я измеряю производительность своего приложения с помощью бездействия Nexus 4 на Android 4.2.2. Я вижу несколько вещей в отчетах, которые не имеют смысла для меня, и мне интересно, могут ли они быть ошибками systrace или кто-нибудь может знать о возможных возможных причинах этих симптомов.

1- Большая рекурсия в режиме исполненияТервералы в конце прогона

Ссылка на отчет - Посмотрите большую кривую в конце прогона (~ 18 с). Мое понимание заключалось в том, что performTraversals находится на уровне структуры, где он рисует один кадр пользовательского интерфейса. Поэтому для меня не имело смысла, что под ним могут быть рекурсивные звонки. Кроме того, поскольку я получаю такую ​​экспоненциальную стеклизацию в конце прогона, я предположил, что это действительно просто дефект в systrace для данных в конце прогона. Возможно ли такое рекурсия? Что это значит?

2- выполнить рекурсию перекоса в середине прогона с длительным временем замены буфера

Ссылка на отчет - Интересное поведение, начинающееся с отметки 12 секунд. Когда я увидел что-то подобное в середине пробега, это заставило меня подумать, может быть, я не должен писать это. Кроме того, я потратил много времени на то, чтобы выяснить, что может объяснить такой длинный eglSwapBuffers/queueBuffer (мое приложение не использует openGL и просто использует фреймворк напрямую), когда коллега сказал мне просто игнорировать его потому что обменные буферы всегда будут мгновенными. Может ли быть больше? Есть ли что-то для расследования здесь?

Ответ 1

В отчете № 1 буфер трассировки для CPU 0 заполняется примерно на 5 секунд (обратите внимание на отсутствие данных в строке "CPU 0" ). Вы начнете видеть материал, который начинается и никогда не заканчивается, потому что конечная запись не записывается. Вот почему вы получаете большие "performTraversals (Did not Finish)" blobs.

Та же история в отчете № 2 - закончилась около 10 секунд.

Вы можете увеличить размер буфера с помощью флага "-b", например. -b 8192 предоставит вам буфер 8 МБ. Размер по умолчанию - 2 МБ.