Причина выполнения рекурсии переходов, длинных периодов замены буфера 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 МБ.