Android Eclipse: Traceview, я просто не понимаю

39

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

Изображение 15770

  • Ширина полос соответствует времени, которое выполняет функция. Какая высота соответствует?
  • Что такое конкретная разница между Inclusive и Exclusive. Я предположил, что включительно включает вызовы всех дочерних функций?
  • Будет ли это так: сумма (время на вызов раз вызывает) = время запуска программы (что касается асинхронных задач?)
  • Можно ли игнорировать задачи async при замедлении отладки основного потока?
  • Если сумма всех процентов в Excl% равна 100%?
  • Что происходит, когда есть пробелы (белый в середине черного)? Это происходит, когда выполняются другие процессы андроида или только ваши собственные задачи async (похоже, что пробелы в одном совпадают с заполненной частью в другой, если это случай, тогда есть какая-то точка в перемещении интенсивных задач в AsyncTask )?
  • 4
    Прочитайте Traceview War Story . Он отвечает на ваши вопросы о столбцах Inclusive и Exclusive. @Eric's Ответы Эрика касаются всего остального.
Теги:
profiling

4 ответа

10
Лучший ответ

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

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

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

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

  • 0
    Спасибо Эрик, на самом деле это было на реальном телефоне
  • 0
    +1 Спасибо за ответ, Эрик. У вас есть точная ссылка где-нибудь для вашего ответа № 1? Это тоже моя догадка, но я нигде не могу найти ссылку.
17

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

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

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

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

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

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

  • да:). Inclusive - это время, затраченное на выполнение функции или любой функции, вызываемой этой функцией; Эксклюзив - это "исключение вызываемых функций", и это просто время, проведенное в самой функции (или переключение в/из нее).

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

  • ответил Эрик

  • Нет, из-за округления/округления вниз (т.е. 1,87% будут отображаться как 1,9%); но сумма записей в "Эксклюзив" должна складываться до общего времени, показанного в верхнем правом углу, что совпадает с числом, вычисленным для вашего вопроса (3)

  • ответил Эрик

1

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

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

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню