Android Eclipse: Traceview, я просто не понимаю - PullRequest
39 голосов
/ 25 июня 2011

Я просто не получаю различные элементы вывода traceview и не могу найти учебник.Может ли кто-нибудь объяснить следующее со ссылкой на диаграмму ниже:

enter image description here

  1. Ширина столбцов соответствует времени, которое занимает функция.Какая высота соответствует?
  2. В чем разница между Inclusive и Exclusive.Я предположил, что включительно включает в себя вызовы всех дочерних функций?
  3. Было бы это верно: сумма (время на вызовы раз звонки) = время выполнения программы (как насчет асинхронных задач?)
  4. Можно ли игнорировать асинхронные задачи при замедлении отладки в главном потоке?
  5. Если сумма всех процентов в Excl% равна 100%?
  6. Что происходит при наличии пробелов (белые впосреди черного)?Это когда другие процессы Android работают или только ваши собственные асинхронные задачи (похоже, что пробелы в одной выровнены с заполненной частью в другой, если это так, то есть ли смысл перемещать интенсивные задачи в AsyncTask?)?

Ответы [ 4 ]

17 голосов
/ 19 апреля 2012

(я бы добавил это как комментарий к ответу @ ron, но моя репутация все еще недостаточно высока, чтобы я мог комментировать;)).

С июля 2011 года вы можете получить traceview и VMDebug, которые дадут вам время настенных часов, а также время использования процессора, благодаря изменению кода Джеффом Брауном. Я боюсь, что необходимые разрешения требуют рутированного устройства как бы то ни было. Это также приводит к немного отличному окну трассировки, чем сообщение от tjb выше.

http://git.insignal.co.kr/?p=mirror/aosp/platform/dalvik.git;a=commitdiff;h=9f640af99bebc6e96f6e1e9903557e2c8f567483

TLDR; adb shell setprop dalvik.vm.extra-opts -Xprofile:dualclock и перезагрузите устройство.

HRM, так как технически я должен помочь ответить на вопрос:

  1. Я понимаю, что высота столбцов связана с родительскими функциями. Предположим, что a () вызывает b (). Затем выполняется a (), а b () также выполняется. Пока b () работает, traceview покажет цвет b; но когда работает а (то есть без времени), он нарисует цвет а и нарисует брусок немного выше, чем б. По крайней мере, именно так все и работает, когда вы увеличиваете масштаб; Если вы нажмете на функцию, соответствующую более высокому столбцу, он поместит скобки под маленькими столбиками рядом с ним, показывая, что за все это отвечает родитель; и родитель всегда отображается как более высокая полоса.

  2. да :). Включает время, потраченное на выполнение функции или любой вещи, вызываемой этой функцией; Exclusive - это «исключение из вызываемых функций», и это просто время, потраченное на саму функцию (или переключение в нее / из нее).

  3. Только для верхнего уровня, который, я думаю, вы подразумевали; и даже тогда смотрите ответ @ ron - это время использования процессора, а не время настенных часов. AsyncTasks запускаются в основном потоке, и поэтому будут включены где-то в разбивке верхнего уровня. То же самое для обработчиков

  4. ответил Eric

  5. Нет, из-за округления вверх / вниз (т.е. 1.87% будет отображаться как 1.9%); но сумма записей в «Эксклюзив» должна составлять общее время, указанное в правом верхнем углу, которое совпадает с числом, рассчитанным для вашего вопроса (3)

  6. ответил Eric

10 голосов
/ 25 июня 2011

Я не могу ответить на все ваши вопросы, но могу сказать ...

для # 4 нет, вы используете одноядерный процессор (или, по крайней мере, эмулируете один), поэтому асинхронные задачи выполняются в собственном потокенужно прервать основной поток, чтобы получить время обработки.Каждый раз, когда исполняется другой поток, в основном потоке происходит «замедление», так что вы должны следить за этим.

для # 6, эти пробелы, которые вы видите в трассировке выполнения основных потоков, точно соответствуют времени, когда ваша асинхронная задача получает процессорное время.Опять же, одно ядро, может сделать только 1 поток за один раз.В этом временном интервале не похоже, чтобы какой-либо другой процесс вообще имел какое-либо процессорное время, но эти потоки все еще спали в фоновом режиме.Поскольку это был (скорее всего) эмулятор, это обычное дело.На живом телефоне вы увидите гораздо больше:)

Я также совершенно уверен для # 1, что высота каждого пика при выполнении потока - это% загрузки процессора.Например, «черная» область основного потока является системной.Редактировать: Хорошо, я сейчас точно.Вот что это такое.Таким образом, в вашем основном потоке та область, которая является сплошным розовым цветом, имеет 100% загрузку процессора.

1 голос
/ 11 ноября 2011

Другое важное ноу-хау о графике трассировки (как упомянуто здесь ): время, отображаемое в трассировке, не является временем настенных часов реального времени, но использует время ЦП.

Например, при уменьшении FPS форма графика трассировки может не измениться, поскольку он не включает рабочие циклы холостого хода. Поэтому при измерении производительности также рекомендуется запускать приложение в течение фиксированного промежутка времени (10 секунд, 60 секунд и т. Д.) И проверять, меньше ли время, затрачиваемое на 100% включительно, чем раньше.

0 голосов
/ 26 апреля 2015

Google только что выпустил удивительный курс по Udacity по производительности Android. Есть этот модуль, который предоставляет пошаговое руководство по Traceview , а также ссылку под видеомодулем на руководство к ним, в котором подробно рассматривается использование Traceview. Просмотр этих ответов ответит на большинство ваших вопросов. Я настоятельно рекомендую вам проверить это!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...