Метрики — это основной тип информации, извлекаемой из бенчмарков. Они передаются в функцию measureRepeated в виде List , что позволяет указать сразу несколько измеряемых метрик. Для запуска бенчмарка требуется хотя бы один тип метрики.
Следующий фрагмент кода фиксирует синхронизацию кадров и метрики пользовательского раздела трассировки:
Котлин
benchmarkRule.measureRepeated( packageName = TARGET_PACKAGE, metrics = listOf( FrameTimingMetric(), TraceSectionMetric("RV CreateView"), TraceSectionMetric("RV OnBindView"), ), iterations = 5, // ... )
Ява
benchmarkRule.measureRepeated( TARGET_PACKAGE, // packageName Arrays.asList( // metrics new StartupTimingMetric(), new TraceSectionMetric("RV CreateView"), new TraceSectionMetric("RV OnBindView"), ), 5, // Iterations // ... );
В этом примере RV CreateView и RV OnBindView — это идентификаторы отслеживаемых блоков, определённых в RecyclerView . Исходный код метода createViewHolder() — пример того, как можно определить отслеживаемые блоки в собственном коде.
StartupTimingMetric , TraceSectionMetric , FrameTimingMetric и PowerMetric подробно рассматриваются далее в этом документе. Полный список метрик см. в подклассах Metric .
Результаты теста выводятся в Android Studio, как показано на рисунке 1. Если определено несколько показателей, все они объединяются в выходных данных.

TraceSectionMetric и FrameTimingMetric .StartupTimingMetric
StartupTimingMetric собирает метрики времени запуска приложения со следующими значениями:
-
timeToInitialDisplayMs: время с момента получения системой намерения запуска до момента отображения первого кадра целевогоActivity. -
timeToFullDisplayMs: время с момента получения системой намерения о запуске до момента, когда приложение сообщает о полной отрисовке с помощью методаreportFullyDrawn(). Измерение останавливается по завершении отрисовки первого кадра после вызоваreportFullyDrawn()(или содержащего его). Этот показатель может быть недоступен в Android 10 (API уровня 29) и более ранних версиях.
StartupTimingMetric выводит минимальное, медианное и максимальное значения для итераций запуска. Для оценки улучшения времени запуска следует ориентироваться на медианные значения, поскольку они дают наилучшую оценку типичного времени запуска. Подробнее о факторах, влияющих на время запуска приложения, см. в разделе Время запуска приложения .

StartupTimingMetric .FrameTimingMetric
FrameTimingMetric собирает информацию о времени из кадров, создаваемых бенчмарком, например, при прокрутке или анимации, и выводит следующие значения:
-
frameOverrunMs: время, на которое кадр отстаёт от крайнего срока. Положительные числа указывают на пропущенный кадр и видимые подтормаживания или задержки. Отрицательные числа указывают, насколько кадр быстрее крайнего срока. Примечание: эта функция доступна только на Android 12 (уровень API 31) и выше. -
frameDurationCpuMs: время, необходимое для создания кадра на ЦП как в потоке пользовательского интерфейса, так и в потокеRenderThread.
Эти измерения собираются в распределении 50-го, 90-го, 95-го и 99-го процентилей.
Дополнительную информацию о том, как определить и улучшить медленные кадры, см. в разделе Медленный рендеринг .

FrameTimingMetric .TraceSectionMetric
TraceSectionMetric фиксирует количество появлений раздела трассировки, соответствующего указанному sectionName , и время, затраченное на это. Для времени выводятся минимальное, медианное и максимальное время в миллисекундах. Раздел трассировки определяется либо вызовом функции trace(sectionName) , либо кодом между Trace.beginSection(sectionName) и Trace.endSection() или их асинхронными вариантами. Функция всегда выбирает первый экземпляр раздела трассировки, полученного во время измерения. По умолчанию функция выводит только разделы трассировки из вашего пакета; чтобы включить процессы вне вашего пакета, установите targetPackageOnly = false .
Дополнительные сведения о трассировке см. в разделах Обзор трассировки системы и Определение пользовательских событий .

TraceSectionMetric .PowerMetric
PowerMetric фиксирует изменение мощности или энергии в течение всего теста по указанным категориям мощности . Каждая выбранная категория разбивается на измеряемые подкомпоненты, а невыбранные категории добавляются к «невыбранной» метрике.
Эти показатели измеряют потребление в масштабах всей системы, а не потребление по отдельности для каждого приложения, и ограничены устройствами Pixel 6, Pixel 6 Pro и более поздними моделями:
-
power<category>Uw: количество энергии, потребленной за время вашего теста в этой категории. -
energy<category>Uws: количество энергии, переданное за единицу времени в течение вашего теста в этой категории.
Категории включают в себя следующее:
-
CPU -
DISPLAY -
GPU -
GPS -
MEMORY -
MACHINE_LEARNING -
NETWORK -
UNCATEGORIZED
В некоторых категориях, таких как CPU , может быть сложно отделить работу других процессов от работы вашего приложения. Чтобы минимизировать помехи, удалите или ограничьте доступ к ненужным приложениям и учётным записям.

PowerMetric .Рекомендовано для вас
- Примечание: текст ссылки отображается, когда JavaScript отключен.
- Создать базовые профили {:#creating-profile-rules}
- Написание макробенчмарка
- Анализ и оптимизация запуска приложения {:#app-startup-analysis-optimization}