Страница разработчика Android: понимание примера профилирования трассировки - PullRequest
8 голосов
/ 22 февраля 2012

Я смотрю на эту страницу: Профилирование с Traceview и dmtracedump

В разделе «Панель профилей» имеется следующий текст, который относится к примеру результата профилирования под текстом:

В последнем столбце таблицы показано количество вызовов этого метода плюс количество рекурсивных вызовов.В последнем столбце показано количество вызовов из общего числа вызовов, сделанных для этого метода.В этом представлении мы можем видеть, что было 14 вызовов LoadListener.nativeFinished ();просмотр панели времени показывает, что один из этих вызовов занял необычно много времени.

Меня смущает это описание.Во-первых, первые два предложения в этой цитате относятся к одному и тому же столбцу.Так что же на самом деле содержит этот последний столбец?Во-вторых, я не понимаю, где именно на «панели шкалы времени» я должен посмотреть, чтобы увидеть, что «это показывает, что один из этих вызовов занял необычно много времени».

Не могли бы вы помочь мне разобратьсяэтого текста.

1 Ответ

10 голосов
/ 09 июня 2012

Во-первых, в той же статье говорится, что:

Родители отображаются с фиолетовым фоном, а дети с желтым фоном

Так что LoadListener.nativeFinished является родительская функция и все строки с отступами под ней children или функции, вызванные родителем.

Панель профиля

Вот клиппанели профиля из статьи:

Clip of the Profile Panel

В последнем столбце таблицы показано количество вызовов этого метода плюс количество рекурсивных вызовов.

В последнем столбце первой строки (родительского) указывается количество вызовов и рекурсивных вызовов, выполненных этой функции: 14 итеративных и 0 рекурсивных вызовов, разделенных символом плюса ( 14 + 14 * 1025).*).

Я думаю, что автор статьи случайно произнес несколько слов и в результате следующая строка немного сбивает с толку:

В последнем столбце показано количество звонковиз общего числаКоличество вызовов, сделанных этому методу.

В дочерних строках с желтым фоном под родительским элементом последний столбец фактически не указывает Calls + Rec.Обратите внимание на изменение в нотации - используется дробь по сравнению с синтаксисом символа плюс.В случае LoadListener.tearDown 14/14 указывает, что LoadListener.tearDown был вызван родительской функцией 14 раз.Функция LoadListener.tearDown была вызвана 14 в общей сложности в этой трассировке, следовательно, LoadListener.nativeFinished - единственная функция, которая вызвала LoadListener.tearDown в этой трассировке.

Давайте посмотрим на другуюстрока.Последний столбец (дочерней) функции View.invalidate имеет значение 2413/2853.Это не означает, что View.invalidate вызывался 2413 раз итеративно и 2853 раза рекурсивно.Вместо этого это означает, что родительская функция LoadListener.nativeFinished вызывала View.invalidate 2413 раз.

Теперь взгляните на строку № 6, и вы увидите, что View.invalidate вызывался 2853 раза итеративно и 0 разрекурсивно.Поэтому родительская функция LoadListener.nativeFinished является единственной функцией, которая когда-либо вызывала LoadListener.tearDown в этой трассировке.

Панель временной шкалы

Вот фрагмент панели временной шкалы из статьи:

Clip of the Timeline Panel

Из той же статьи,

Тонкие линии под первым рядом показывают экстент (вход в выход) всех вызовов на выбранныйmethod

Обратите внимание на тонкие, похожие на скобки розовые линии, которые проходят горизонтально непосредственно под выделенным участком главной нити.Крайние левые розовые скобки очень короткие;они представляют 13/14 вызовов LoadListener.nativeFinished, которые завершаются относительно быстро.Последняя скоба - самая дальняя справа - значительно длиннее, чем любая другая.Это вызов LoadListener.nativeFinished, который «занял необычайно много времени».

...