Skip to content

Latest commit

 

History

History
61 lines (48 loc) · 6.34 KB

comparison.ru.md

File metadata and controls

61 lines (48 loc) · 6.34 KB

FrameHUD и другие инструменты Android

English · Русский

FrameHUD нужен для первого разбора: открыть экран и сразу увидеть jank, p95 и медленную стадию кадра. Остальные инструменты отвечают на другие вопросы: подтверждают регрессию, находят точную причину или показывают масштаб проблемы после релиза.

Что использовать и когда

Инструмент Когда полезен
FrameHUD Ручная разработка и QA. Показывает FPS, jank, перцентили и стадии кадра прямо поверх приложения.
JankStats Нужен собственный сбор per-frame данных. Даёт длительность, признак jank и состояние UI; хранение и агрегацию приложение делает само.
Macrobenchmark Проверка регрессий на CI. Повторяет сценарий в близкой к release сборке и выдаёт P50/P90/P95/P99, overrun и trace каждой итерации.
Perfetto Точный разбор плохого кадра. Показывает потоки, scheduler, Binder, GC, RenderThread, GPU и SurfaceFlinger на одной временной шкале.
Play Vitals Статистика после релиза: slow и frozen frames, перцентили и затронутые сессии на реальных устройствах.

FrameHUD ещё и сравнивает прогон с базлайном прошлых прогонов на том же устройстве, так что регрессию видно уже на QA-проходе. Macrobenchmark это не заменяет: он повторяет фиксированный сценарий на сборке, близкой к релизной, а FrameHUD меряет то, что в прогоне и происходило.

JankStats ближе всего к FrameHUD: на API 24+ оба используют FrameMetrics. Разница в готовности. JankStats отдаёт события каждого кадра, а FrameHUD сразу собирает из них панель, статистику экрана и сессии, события и jank gate для instrumentation-тестов. framehud-metrics убирает панель и оставляет всё остальное. Это самый близкий к JankStats вариант FrameHUD.

Почему цифры не обязаны совпадать

  • FrameHUD сравнивает кадр с системным deadline, JankStats использует свою эвристику, а Perfetto смотрит на фактическое время показа.
  • CPU duration Macrobenchmark, полный кадр FrameHUD и время показа Perfetto — разные величины.
  • FrameHUD измеряет ручной проход, Macrobenchmark — повторяемые итерации, Play Vitals — множество устройств и сессий.
  • Бюджет кадра зависит от герцовки: 16.7 мс на 60 Гц и 8.3 мс на 120 Гц. frameBudgetsMs ставит на его место число, которое выбрали вы, и о нём не знает ни один другой инструмент.
  • Первый кадр тоже означает разное: Macrobenchmark измеряет запуск процесса, FrameHUD — новый экземпляр Activity, включая пересоздание экрана.
  • Ближе всего совпадает время до полезного кадра: на запуске оно заканчивается по тому же сигналу reportFullyDrawn, что и time to full display у Macrobenchmark, но на ручном проходе, а не на повторяемом холодном старте. На остальных экранах его закрывает вызов FrameHud.reportUsable(), и где его поставить — решает приложение.

Поэтому P95 из FrameHUD не стоит напрямую сравнивать с P95 из Macrobenchmark. Надёжнее смотреть, как одна метрика меняется в одном инструменте при одинаковых условиях.

Как они работают вместе

  1. FrameHUD быстро показывает проблему и подозрительную стадию.
  2. Macrobenchmark подтверждает регрессию на повторяемом сценарии.
  3. Perfetto находит конкретную причину; записанный trace уже несёт экраны и метки FrameHUD как секции framehud:* — рядом с его собственными счётчиками и теми, что вело приложение. И кольцевой trace не нужно останавливать руками в нужный момент: инцидент сам просит его сохранить секунды вокруг себя.
  4. Play Vitals показывает, затрагивает ли проблема пользователей.

JankStats стоит отдельно: он нужен, если приложение собирает собственную performance-телеметрию.

FrameHUD не изобретает тайминги: большую часть отдаёт Android через FrameMetrics, а FrameHUD кладёт их туда, куда вы и так смотрите во время работы. Для точного benchmark, системного расследования и production-статистики остаются отдельные инструменты.