Метрики — это основной тип информации, извлекаемой из ваших бенчмарков. Они передаются в функцию measureRepeated в виде List , что позволяет указывать несколько измеряемых метрик одновременно. Для запуска бенчмарка требуется как минимум один тип метрики.
Приведенный ниже фрагмент кода позволяет получить метрики времени отрисовки кадра и пользовательских разделов трассировки:
Котлин
benchmarkRule.measureRepeated( packageName = TARGET_PACKAGE, metrics = listOf( FrameTimingMetric(), TraceSectionMetric("RV CreateView"), TraceSectionMetric("RV OnBindView"), ), iterations = 5, // ... )
Java
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}