Сбор показателей макробенчмарка

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

Результаты теста выводятся в Android Studio, как показано на рисунке 1. Если определено несколько метрик, все они объединяются в выходных данных.

Результаты TraceSectionMetric и FrameTimingMetric.
Рисунок 1. Результаты TraceSectionMetric и FrameTimingMetric .

StartupTimingMetric

StartupTimingMetric собирает метрики времени запуска приложения со следующими значениями:

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

StartupTimingMetric выводит минимальное, среднее и максимальное значения из итераций запуска. Чтобы оценить улучшение запуска, следует сосредоточиться на средних значениях, поскольку они дают наилучшую оценку типичного времени запуска. Для получения дополнительной информации о том, что влияет на время запуска приложения, см. Время запуска приложения .

Результаты StartupTimingMetric
Рисунок 2. Результаты StartupTimingMetric .

FrameTimingMetric

FrameTimingMetric собирает информацию о времени из кадров, созданных в ходе теста, например, прокрутки или анимации, и выводит следующие значения:

  • frameOverrunMs : количество времени, на которое данный кадр не достигает своего крайнего срока. Положительные числа указывают на пропущенный кадр и видимые рывки или заикания. Отрицательные числа указывают, насколько кадр быстрее крайнего срока. Примечание: доступно только на Android 12 (уровень API 31) и выше.
  • frameDurationCpuMs : время, необходимое для создания кадра на ЦП как в потоке пользовательского интерфейса, так и в потоке RenderThread .

Эти измерения собираются в распределении 50-го, 90-го, 95-го и 99-го процентилей.

Дополнительную информацию о том, как определить и улучшить медленные кадры, см. в разделе Медленная визуализация .

Результаты FrameTimingMetric
Рисунок 3. Результаты FrameTimingMetric .

TraceSectionMetric

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

Дополнительную информацию о трассировке см. в разделах Обзор системной трассировки и Определение пользовательских событий .

TraceSectionMetric
Рисунок 4. Результаты 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
Рисунок 5. Результаты PowerMetric .
{% дословно %} {% endverbatim %} {% дословно %} {% endverbatim %} ,

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

Результаты теста выводятся в Android Studio, как показано на рисунке 1. Если определено несколько метрик, все они объединяются в выходных данных.

Результаты TraceSectionMetric и FrameTimingMetric.
Рисунок 1. Результаты TraceSectionMetric и FrameTimingMetric .

StartupTimingMetric

StartupTimingMetric собирает метрики времени запуска приложения со следующими значениями:

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

StartupTimingMetric выводит минимальное, среднее и максимальное значения из итераций запуска. Чтобы оценить улучшение запуска, следует сосредоточиться на средних значениях, поскольку они дают наилучшую оценку типичного времени запуска. Для получения дополнительной информации о том, что влияет на время запуска приложения, см. Время запуска приложения .

Результаты StartupTimingMetric
Рисунок 2. Результаты StartupTimingMetric .

FrameTimingMetric

FrameTimingMetric собирает информацию о времени из кадров, созданных в ходе теста, например, прокрутки или анимации, и выводит следующие значения:

  • frameOverrunMs : количество времени, на которое данный кадр не достигает своего крайнего срока. Положительные числа указывают на пропущенный кадр и видимые рывки или заикания. Отрицательные числа указывают, насколько кадр быстрее крайнего срока. Примечание: доступно только на Android 12 (уровень API 31) и выше.
  • frameDurationCpuMs : время, необходимое для создания кадра на ЦП как в потоке пользовательского интерфейса, так и в потоке RenderThread .

Эти измерения собираются в распределении 50-го, 90-го, 95-го и 99-го процентилей.

Дополнительную информацию о том, как определить и улучшить медленные кадры, см. в разделе Медленная визуализация .

Результаты FrameTimingMetric
Рисунок 3. Результаты FrameTimingMetric .

TraceSectionMetric

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

Дополнительную информацию о трассировке см. в разделах Обзор системной трассировки и Определение пользовательских событий .

TraceSectionMetric
Рисунок 4. Результаты 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
Рисунок 5. Результаты PowerMetric .
{% дословно %} {% endverbatim %} {% дословно %} {% endverbatim %} ,

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

Результаты теста выводятся в Android Studio, как показано на рисунке 1. Если определено несколько метрик, все они объединяются в выходных данных.

Результаты TraceSectionMetric и FrameTimingMetric.
Рисунок 1. Результаты TraceSectionMetric и FrameTimingMetric .

StartupTimingMetric

StartupTimingMetric собирает метрики времени запуска приложения со следующими значениями:

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

StartupTimingMetric выводит минимальное, среднее и максимальное значения из итераций запуска. Чтобы оценить улучшение запуска, следует сосредоточиться на средних значениях, поскольку они дают наилучшую оценку типичного времени запуска. Для получения дополнительной информации о том, что влияет на время запуска приложения, см. Время запуска приложения .

Результаты StartupTimingMetric
Рисунок 2. Результаты StartupTimingMetric .

FrameTimingMetric

FrameTimingMetric собирает информацию о времени из кадров, созданных в ходе теста, например, прокрутки или анимации, и выводит следующие значения:

  • frameOverrunMs : количество времени, на которое данный кадр не достигает своего крайнего срока. Положительные числа указывают на пропущенный кадр и видимые рывки или заикания. Отрицательные числа указывают, насколько кадр быстрее крайнего срока. Примечание: доступно только на Android 12 (уровень API 31) и выше.
  • frameDurationCpuMs : время, необходимое для создания кадра на ЦП как в потоке пользовательского интерфейса, так и в потоке RenderThread .

Эти измерения собираются в распределении 50-го, 90-го, 95-го и 99-го процентилей.

Дополнительную информацию о том, как определить и улучшить медленные кадры, см. в разделе Медленная визуализация .

Результаты FrameTimingMetric
Рисунок 3. Результаты FrameTimingMetric .

TraceSectionMetric

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

Дополнительную информацию о трассировке см. в разделах Обзор системной трассировки и Определение пользовательских событий .

TraceSectionMetric
Рисунок 4. Результаты 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
Рисунок 5. Результаты PowerMetric .
{% дословно %} {% endverbatim %} {% дословно %} {% endverbatim %} ,

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

Результаты теста выводятся в Android Studio, как показано на рисунке 1. Если определено несколько метрик, все они объединяются в выходных данных.

Результаты TraceSectionMetric и FrameTimingMetric.
Рисунок 1. Результаты TraceSectionMetric и FrameTimingMetric .

StartupTimingMetric

StartupTimingMetric собирает метрики времени запуска приложения со следующими значениями:

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

StartupTimingMetric выводит минимальное, среднее и максимальное значения из итераций запуска. Чтобы оценить улучшение запуска, следует сосредоточиться на средних значениях, поскольку они дают наилучшую оценку типичного времени запуска. Для получения дополнительной информации о том, что влияет на время запуска приложения, см. Время запуска приложения .

Результаты StartupTimingMetric
Рисунок 2. Результаты StartupTimingMetric .

FrameTimingMetric

FrameTimingMetric собирает информацию о времени из кадров, созданных в ходе теста, например, прокрутки или анимации, и выводит следующие значения:

  • frameOverrunMs : количество времени, на которое данный кадр не достигает своего крайнего срока. Положительные числа указывают на пропущенный кадр и видимые рывки или заикания. Отрицательные числа указывают, насколько кадр быстрее крайнего срока. Примечание: доступно только на Android 12 (уровень API 31) и выше.
  • frameDurationCpuMs : время, необходимое для создания кадра на ЦП как в потоке пользовательского интерфейса, так и в потоке RenderThread .

Эти измерения собираются в распределении 50-го, 90-го, 95-го и 99-го процентилей.

Дополнительную информацию о том, как определить и улучшить медленные кадры, см. в разделе Медленная визуализация .

Результаты FrameTimingMetric
Рисунок 3. Результаты FrameTimingMetric .

TraceSectionMetric

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

Дополнительную информацию о трассировке см. в разделах Обзор системной трассировки и Определение пользовательских событий .

TraceSectionMetric
Рисунок 4. Результаты 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
Рисунок 5. Результаты PowerMetric .
{% дословно %} {% endverbatim %} {% дословно %} {% endverbatim %}