Микробенчмарк

Библиотека Jetpack Microbenchmark позволяет тестировать собственный код Android — Kotlin или Java — прямо из Android Studio. Библиотека выполняет прогрев, измеряет производительность вашего кода и количество выделенных ресурсов, а также выводит результаты сравнительного тестирования как на консоль Android Studio , так и в файл JSON с более подробной информацией.

Мы рекомендуем вам профилировать свой код перед написанием теста. Это поможет вам найти дорогостоящие операции, которые стоит оптимизировать. Он также может показать, почему операции выполняются медленно, показывая, что происходит во время их выполнения, например, выполнение в потоке с низким приоритетом, спящий режим из-за доступа к диску или неожиданный вызов дорогостоящей функции, такой как декодирование растрового изображения.

Микротесты наиболее полезны для работы ЦП, которая выполняется много раз в вашем приложении, что также известно как пути горячего кода . Хорошими примерами являются прокрутка RecyclerView с отображением одного элемента за раз, преобразование или обработка данных, а также другие фрагменты кода, которые используются неоднократно.

Другие типы кода сложнее измерить с помощью библиотеки Microbenchmark. Поскольку тесты выполняются в цикле, любой код, который запускается нечасто или работает по-разному при многократном вызове, может не подходить для тестирования.

Чтобы узнать, как использовать библиотеку в среде непрерывной интеграции (CI), см. раздел «Выполнение тестов в непрерывной интеграции» .

Избегайте измерения кеша

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

Получите последовательные ориентиры

Часы на мобильных устройствах динамически переключаются с высокого состояния (для повышения производительности) на низкое состояние, чтобы экономить электроэнергию или когда устройство нагревается. Эти разные частоты могут сильно различаться в результатах тестов, поэтому библиотека предлагает способы решения этой проблемы.

Блокировка часов (требуется рутированное устройство)

Блокировка тактовой частоты — лучший способ добиться стабильной производительности. Это помогает гарантировать, что тактовая частота никогда не станет достаточно высокой, чтобы нагреть устройство, или низкой, если тест не полностью использует процессор. Его можно применить с помощью задачи Gradle ( gradlew lockClocks ) или вручную в CI . Хотя это лучший способ обеспечить стабильную работу, он не поддерживается на большинстве устройств, поскольку требуется рутованное устройство под управлением Android.

Режим устойчивой производительности

Window.setSustainedPerformanceMode() — это функция, поддерживаемая устройствами, которая позволяет приложению выбирать более низкую максимальную частоту процессора. При работе на поддерживаемых устройствах библиотека Microbenchmark использует комбинацию этого API и запуска собственной активности для предотвращения теплового регулирования и стабилизации результатов.

Эта функция включена по умолчанию с помощью testInstrumentationRunner , установленного плагином Android Gradle. Если вы хотите использовать собственный бегун, вы можете создать подкласс AndroidBenchmarkRunner и использовать его в качестве testInstrumentationRunner .

Средство запуска запускает непрозрачное полноэкранное действие, чтобы гарантировать, что тест выполняется на переднем плане и без каких-либо других приложений.

Автоматическая приостановка выполнения

Если вы не используете блокировку тактовой частоты или устойчивую производительность, библиотека выполняет автоматическое обнаружение теплового регулирования. Если этот параметр включен, внутренний тест периодически запускается, чтобы определить, когда температура устройства становится достаточно высокой, чтобы снизить производительность процессора. Когда библиотека обнаруживает снижение производительности процессора, она приостанавливает выполнение, чтобы дать устройству остыть, а затем повторяет текущий тест.

Подборка АОТ

Стабилизация сложных микробенчмарков может занять много времени, и стабилизацию будет очень трудно обнаружить. Поскольку последовательные измерения и высокая скорость итерации являются главными приоритетами, плагин androidx.benchmark по умолчанию полностью компилирует ваш APK-файл микробенчмарка, аналогично CompilationMode.Full в Macrobenchmarks. Для этого поведения требуется Benchmark 1.3.0-beta01+ и плагин Android Gradle 8.4.0+ . Вы можете отказаться от этого поведения, установив androidx.benchmark.forceaotcompilation=false в файле gradle.properties .

Образцы

См. следующие примеры в репозитории GitHub:

Дополнительные ресурсы

Оставьте отзыв

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

{% дословно %} {% дословно %} {% дословно %} {% дословно %}