Метрики — это основной тип информации, извлекаемой из бенчмарков. Они передаются в функцию 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}