Бенчмарк
| Последнее обновление | Стабильный релиз | Кандидат на релиз | Бета-версия | Альфа-релиз |
|---|---|---|---|---|
| 10 сентября 2025 г. | 1.4.1 | - | - | - |
Объявление зависимостей
Чтобы добавить зависимость от Benchmark, необходимо добавить репозиторий Google Maven в свой проект. Подробнее см. в репозитории Google Maven .
Макробенчмарк
Чтобы использовать Macrobenchmark в своем проекте, добавьте следующие зависимости в файл build.gradle для вашего модуля macrobenchmark :
классный
dependencies { androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.4.1" }
Котлин
dependencies { androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.4.1") }
Микробенчмарк
Чтобы использовать Microbenchmark в своем проекте, добавьте следующие зависимости в файл build.gradle для вашего модуля microbenchmark :
классный
dependencies { androidTestImplementation "androidx.benchmark:benchmark-junit4:1.4.1" } android { ... defaultConfig { ... testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Котлин
dependencies { androidTestImplementation("androidx.benchmark:benchmark-junit4:1.4.1") } android { ... defaultConfig { ... testInstrumentationRunner = "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Библиотека Microbenchmark также предоставляет плагин Gradle для использования с вашим модулем microbenchmark. Этот плагин устанавливает настройки конфигурации сборки по умолчанию для модуля, настраивает копию выходных данных теста на хост и предоставляет задачу ./gradlew lockClocks .
Чтобы использовать плагин, включите следующую строку в блок `plugins` вашего файла build.gradle верхнего уровня:
классный
plugins { id 'androidx.benchmark' version '1.4.1' apply false }
Котлин
plugins { id("androidx.benchmark") version "1.4.1" apply false }
Затем примените плагин к файлу build.gradle вашего тестового модуля.
классный
plugins { id 'androidx.benchmark' }
Котлин
plugins { id("androidx.benchmark") }
Обратная связь
Ваши отзывы помогают улучшить Jetpack. Сообщите нам, если вы обнаружите новые проблемы или у вас есть идеи по улучшению этой библиотеки. Пожалуйста, ознакомьтесь с уже существующими проблемами в этой библиотеке, прежде чем создавать новую. Вы можете проголосовать за существующую проблему, нажав на кнопку со звёздочкой.
Более подробную информацию см. в документации по системе отслеживания проблем .
Версия 1.4
Версия 1.4.1
10 сентября 2025 г.
Выпущен androidx.benchmark:benchmark-*:1.4.1 . Версия 1.4.1 содержит следующие коммиты .
Исправления ошибок
- Исправлено:
perfettoSdkTracing=true(например, при трассировке Compose в микробенчмарке), приводившее к завершению целевого процесса, если он уже запущен, а StartupMode не указан. ( Ib2c1f )
Версия 1.4.0
30 июля 2025 г.
Выпущен androidx.benchmark:benchmark-*:1.4.0 . Версия 1.4.0 содержит следующие коммиты .
Важные изменения с версии 1.3.0
Микробенчмарк
- Задачи Gradle
lockClocksиunlockClocksперемещены на проектные тесты, а не на верхний уровень, чтобы обеспечить изоляцию проекта Gradle. - Переработанное
BenchmarkRuleтеперь строится на основе сопрограмм и поддерживает улучшенное поведениеyield(). Это должно значительно снизить риск возникновения ошибок ANR во время выполнения бенчмарков, особенно длительных CI-тестов. Примечание: бенчмарки пользовательского интерфейса следует запускать сmeasureRepeatedOnMainThread
Макробенчмарк
- Добавлено временное решение для API 34+ для
CompilationMode.None(), которое могло бы иметь нестабильную производительность из-за того, что проверка ART теперь частично компилирует приложения после первого запуска. - Экспериментальная функция — Startup Insights может выделить некоторые распространенные проблемы в Macrobenchmark запуска, передав
MacrobenchmarkRule(..., experimentalConfig = ExperimentalConfig(StartupInsightsConfig(isEnabled = true))). - Добавлен ArtMetric , который можно использовать для обнаружения JIT-компиляции и неоптимизированной загрузки классов — оба варианта полезны для проверки оптимизаций базового профиля.
Базовые профили
-
BaselineProfileRuleтеперь собирает профили для многопроцессных приложений.
Другие изменения
- TraceProcessor вынесен в отдельную библиотеку (
androidx.benchmark:benchmark-traceprocessor), чтобы его можно было использовать вне метрикMacrobenchmark, в других случаях. Его также можно запустить на десктопной JVM, определив собственный ServerLifecycleManager .
Версия 1.4.0-rc01
18 июня 2025 г.
Выпущен androidx.benchmark:benchmark-*:1.4.0-rc01 . Версия 1.4.0-rc01 содержит следующие коммиты .
Исправления ошибок
- Добавлено временное решение для образов среды выполнения, из-за которого
CompilationMode.None()не измеряет производительность в худшем случае после первой итерации. К сожалению, это временное решение требует 5-секундной задержки для намеренного повреждения образа среды выполнения в начале каждого набора макротестов ( I4a4f1 ).
Версия 1.4.0-beta02
4 июня 2025 г.
Выпущен androidx.benchmark:benchmark-*:1.4.0-beta02 . Версия 1.4.0-beta02 содержит следующие коммиты .
Изменения API
- Добавлен
BaselineProfileConfig.Builderдля упрощения вызоваBaselineProfileRule.collectWithResults()для разработчиков Java. ( I94905 )
Версия 1.4.0-beta01
7 мая 2025 г.
Выпущен androidx.benchmark:benchmark-*:1.4.0-beta01 . Версия 1.4.0-beta01 содержит следующие коммиты .
Изменения API
- Добавлен вариант конструктора
PerfettoTraceRule, который принимаетPerfettoConfig( Ie53ba ).
Исправления ошибок
- Обновлен формат ссылки
TraceProcessorStartup Insight для использования корректного плагина и более четкого разделителя (:короче%3A, и оба поддерживаются) ( Ie18ef ) - Всегда используйте функцию force-stop для завершения процессов, даже если у вас есть root-доступ и вы завершаете системные приложения. Исправляет исключения вида:
Expected no stdout/stderr from killall ... No such process. ( Idca2c )
Внешний вклад
- Добавлен обработчик исключений прокси для
TraceProcessorHttpServer( I480f5 )
Версия 1.4.0-альфа11
9 апреля 2025 г.
Выпущен androidx.benchmark:benchmark-*:1.4.0-alpha11 . Версия 1.4.0-alpha11 содержит следующие коммиты .
Изменения API
- Изменен аргумент timeout
TraceProcessor: Duration на timeoutMs long для удобства использования вызывающего Java-процессора. ( I9fbb5 ) - Пометить конструктор
TraceProcessorкак внутренний. Вызывающим функциям следует использоватьTraceProcessor.startServerилиTraceProcessor.runServer. ( Ia8c5b )
Исправления ошибок
- При завершении приложения с помощью
MacrobenchmarkScope.killProcessпроверьте результаты команды kill, чтобы предотвратить скрытое сбой и ошибку тайм-аута. ( I84555 )
Обновления зависимостей
- Эта библиотека теперь ориентирована на уровень языка Kotlin 2.0 и требует KGP 2.0.0 или более поздней версии. ( Idb6b5 )
Версия 1.4.0-альфа10
26 марта 2025 г.
Выпущен androidx.benchmark:benchmark-*:1.4.0-alpha10 . Версия 1.4.0-alpha10 содержит следующие коммиты .
Изменения API
- Увеличено время ожидания по умолчанию для загрузки сервера
TraceProcessorи выполнения запросов до 120 секунд (ранее было 60/30), и теперь оба параметра можно настраивать с помощью одного параметра времени ожидания. ( Ifec87 )
Исправления ошибок
- Исправлено несколько проблем, возникавших при бенчмаркинге или захвате профилей приложения без
profileinstaller, а также включенBroadcastReciever. Это касается только работы на устройствах с root-доступом. ( Ied308 )
Версия 1.4.0-альфа09
12 марта 2025 г.
Выпущен androidx.benchmark:benchmark-*:1.4.0-alpha09 . Версия 1.4.0-alpha09 содержит следующие коммиты .
Изменения API
- Добавлены API
TraceProcessorи Session с закрываемыми дескрипторами для упрощения использования с настраиваемыми жизненными циклами. Это также шаг к упрощению использования сопрограмм и API Java. Функции расширенияTraceProcessor.runServer {}теперь отмечены как экспериментальные, так как в будущем они, вероятно, будут перемещены и станут неэкспериментальными. ( I358b4 )
Исправления ошибок
- Исправлена ошибка, из-за которой захват бенчмарка и базового профиля не работал с API 36 из-за изменения в
pgreptoybox, который теперь требует-aдля вывода полной командной строки. ( Idc991 ) - Фильтрация конфигурации трассировки по умолчанию для снижения риска потери данных в трассировках на новых уровнях API. ( I54e8a )
- Добавлен экспериментальный аргумент инструментария
androidx.benchmark.killExistingPerfettoRecordings, которому можно присвоить значениеfalse, чтобы разрешить продолжение ранее созданного захвата трассировки Perfetto. По умолчанию ранее созданные захваты трассировки Perfetto на устройстве отключаются для предотвращения помех. ( I02a3c ) - Поле JSON
context.osCodenameAbbreviatedтеперь будет иметьRELдля выпущенных версий ОС на уровне API 35 и выше, поскольку нечисловые кодовые имена больше не поддерживаются базовой платформой. ( Ib17fd ) - Исправлен сбой в
FrameTimingMetricпри возникновении повторной синхронизации кадров. ( I7c6f4 , b/394610806 ) - Больше не предполагается, что
Choreographer#doFrameявляется вершиной стекового кадра в основном потоке дляFrameTimingQuery. ( Iee0e0 , b/340206285 )
Версия 1.4.0-альфа08
12 февраля 2025 г.
Выпущен androidx.benchmark:benchmark-*:1.4.0-alpha08 . Версия 1.4.0-alpha08 содержит следующие коммиты .
Изменения API
- API расширения
TraceProcessor.runSession()перемещены в экспериментальный режим, поскольку в конечном итоге на Android они, скорее всего, станут конкретными конструкторами. ( Ib0528 , b/393640753 ) - Большая часть реализаций Startup Insights теперь общедоступны/экспериментальны и перемещены в артефакт
TraceProcessor. См.StartupInsights. ( I0aa00 ) - Отменить
BenchmarkRule.runWithTimingDisabled {}в пользуBenchmarkRule.runWithMeasurementDisabled {}, который более чётко описывает поведение — все метрики приостанавливаются. Кроме того, предоставить доступ к суперклассуMicrobenchmarkScope, поскольку повторное объявление функцииrunWithMeasurementDisabledдля открытия доступа невозможно, так как она встроена. ( I9e23b , b/389149423 , b/149979716 ) - Библиотеки бенчмарков перешли на Kotlin 2.0. ( I9d1e0 )
- Удалён аргумент инструментария
androidx.benchmark.startupProfiles.enable. Он больше не нужен, так как им можно управлять с помощью аргументаincludeInStartupProfileвBaselineProfileRule.collect(). ( I39eb4 )
Исправления ошибок
- Уменьшено количество внутренних функций Microbenchmark, вызываемых во время профилирования, чтобы, например, сделать трассировки методов более понятными ( Ifaed8 )
- Предполагаемое исправление сбоев: «Не удалось остановить [
ProcessPid(processName=perfetto, pid=...)]». Теперь Benchmark будет регистрировать сообщение вместо сбоя, если фоновый процесс Perfetto не удаётся остановить перед запуском теста производительности. ( I37d3e , b/323601788 ) - Исправлены исключения
IllegalStateExceptionsс меткой «Ожидаемый stdoutpm dump-profiles», которые возникали из-за слишком строгой проверки формата вывода. ( I358dc )
Версия 1.4.0-альфа07
29 января 2025 г.
Выпущен androidx.benchmark:benchmark-*:1.4.0-alpha07 . Версия 1.4.0-alpha07 содержит следующие коммиты .
Новые функции
-
BaselineProfileRuleтеперь представляет APIcollectWithResults(...), который включает список путей к вычисляемым профилям. ( I056f8 ) - Добавлен аргумент инструментария
androidx.benchmark.measureRepeatedOnMainThread.throwOnDeadline, которому можно присвоить значение false, чтобы отключить функцию вызова исключения при достижении крайнего срока в функцииmeasureRepeatedOnMainThreadдля локального тестирования. В противном случае не рекомендуется, так как это увеличивает вероятность возникновения ошибок ANR во время тестирования. ( Idbeec , b/353226476 )
Изменения API
- Добавлен
@JvmOverloadsв конструкторMicrobenchmarkConfig. ( I13fd3 ) - Переработан
BenchmarkRule, который теперь строится на основе сопрограмм и поддерживает улучшенное поведениеyield(). В ходе рефакторинга было удалено несколько экспериментальных APIBenchmarkState, но при необходимости будут произведены замены. Кроме того, добавленrunWithMeasurementDisabledдля уточнения поведения (все измерения приостановлены). В будущемrunWithTimingDisabledбудет объявлен устаревшим. ( I19837 , b/389149423 , b/311242861 ) - Перенесите
PerfettoTraceProcessorвTraceProcessorв новом артефактеandroidx.benchmark:benchmark-traceprocessorи сделайте большую часть его API неэкспериментальным. Любые пользовательскиеTraceMetricили любые другие функции, считывающие данные из трассировок, необходимо обновить до нового импортаTraceProcessor. Новый APITraceProcessorработает точно так же, как и старый, но представляет собой отдельную интерфейсную библиотеку (в некоторой степени аналогичную уровнюandroidx.sqliteиз Room) со специфичной для Android реализацией, встроенной в macrobenchmark. Новый артефакт также можно использовать на JVM, но в настоящее время вам потребуется запустить собственную копию двоичного файлаTraceProcessorи предоставить порт для подключения к нему. ( I3a767 , I62563 , b/381134564 )
Исправления ошибок
- Выводить более понятное сообщение об ошибке, когда
MacrobenchmarkScope.startActivityAndWaitне может запустить целевой процесс (возможно, из-за сбоя в целевом процессе), вместо более неоднозначного сообщения «Невозможно подтвердить завершение запуска активности» ( I3539b ). - Исправлено несколько синтаксических ошибок в примерах Kotlin и подсветка синтаксиса в нескольких примерах Java / build.gradle. ( Ib3808 )
- Уточнена документация по параметрам
ArtMetricиCaptureInfo. ( I96e60 )
Версия 1.4.0-альфа06
11 декабря 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.4.0-alpha06 . Версия 1.4.0-alpha06 содержит следующие коммиты .
Изменения API
- Удалено использование
@Language("sql")вPerfettoTraceProcessor.Session.query(), поскольку подсветка/анализ Studio не работают. ( Idc2fa , b/377733398 )
Исправления ошибок
- Эта библиотека теперь использует аннотации JSpecify, определяющие значение null , которые являются типовыми. Разработчикам Kotlin следует использовать следующий аргумент компилятора для обеспечения корректного использования:
-Xjspecify-annotations=strict(это значение по умолчанию, начиная с версии 2.1.0 компилятора Kotlin). ( I46810 , b/326456246 ) - Исправлен
ArtMetricдля отображения загрузки класса (не инициализации) и улучшена документация для пояснения поведения во время выполнения. ( I9915c ) - В Android Multiuser команды можно выполнять только с правами root на устройствах с правами root. ( I88b44 )
Версия 1.4.0-альфа05
13 ноября 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.4.0-alpha05 . Версия 1.4.0-alpha05 содержит следующие коммиты .
Исправления ошибок
- Исправлена проблема в API 34+, из-за которой
CompilationMode.None()приводил к нестабильной производительности, не отражающей исходную производительность в худшем случае. Это позволяет обойти изменение платформы, которое позволяетverifyсостояния компиляции ART частично компилировать приложения (влияя только на загрузку классов) вскоре после первого запуска. ( Ie48d0 ) - Исправлена проблема, из-за которой могли быть получены (особенно короткие) трассировки, не содержащие измерений из встроенных метрик Macrobenchmark, из-за усечения имени процесса в трассировке Perfetto. Теперь Macrobenchmark обходит эту проблему, выполняя поиск усеченного имени пакета во всех встроенных запросах в дополнение к ожидаемому имени пакета. Обратите внимание, что пользовательские реализации
TraceMetricили другие прямые вызовыPerfettoSession.queryмогут реализовать то же самое поведение, изменивprocess.name LIKE "$packageName"в запросе Perfetto на(process.name LIKE "$packageName" OR process.name LIKE "$(packageName.takeLast(15))"). ( I5bf01 , b/377565760 )
Версия 1.4.0-альфа04
30 октября 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.4.0-alpha04 . Версия 1.4.0-alpha04 содержит следующие коммиты .
Новые функции
- (Экспериментальная функция) Включить генерацию базового профиля и бенчмаркинг приложений, установленных для второго пользователя, например, любых приложений на устройствах Android Auto без интерфейса. Эта поддержка была протестирована в некоторых сценариях, но если она не работает, сообщите нам об ошибке. ( I9fcbe , b/356684617 , b/373641155 )
Исправления ошибок
-
isProfileableтеперь всегда переопределяется в тестовых сборках, аisDebuggableтеперь также всегда переопределяется как в тестовых сборках, так и в сборкахnonMinified(с захватом базового профиля). ( I487fa , b/369213505 ) - Исправлено обнаружение компиляции на некоторых физических устройствах до API 28 — влияет на json
context.compilationMode, а также на поведениеandroidx.benchmark.requireAot=true(который больше не вызывает некорректных исключений) ( Ic3e08 , b/374362482 ) - В метриках
CpuEventCounterвыбрасывается, если наблюдаются недопустимые измерения (например, instructions/cpucycles==0) ( I8c503 )
Версия 1.4.0-альфа03
16 октября 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.4.0-alpha03 . Версия 1.4.0-alpha03 содержит следующие коммиты .
Изменения API
- Macrobenchmark : добавляет
ArtMetric, который можно использовать для проверки покрытия профиля или общей производительности среды выполнения Android. Отслеживает количество и общую продолжительность JIT-компиляции, инициализацию классов (при наличии) и проверку классов. Кроме того,CaptureInfoизменяет функцию, добавляя опциональную версию ART mainline по умолчанию. ( I930f7 ) - Добавьте
coefficientOfVariationк выходным данным JSON-теста, чтобы продемонстрировать стабильность в рамках заданного прогона теста. ( Ib14ea )
Исправления ошибок
- Исправлена ошибка
CollectBaselineProfileTask, когда в устройстве AVD есть пробелы. ( Ia0225 , b/371642809 ) - Предполагаемое исправление ошибок, связанных с исключениями
StartupMode.COLD:Package <packagename> must not be running prior to cold start!ТеперьMacrobenchmarkScope.killProcess()(включая один запуск перед каждой итерацией, используемый для реализации поведенияStartupMode.COLD) будет ожидать, чтобы убедиться, что все процессы приложения остановлены. ( I60aa6 , b/351582215 ) - Исправлена ошибка, из-за которой на некоторых эмуляторах с root-доступом возникала ошибка UNLOCKED_. ( Ic5117 )
- Эта библиотека теперь использует аннотации JSpecify, определяющие значение null , которые являются типовыми. Разработчикам Kotlin следует использовать следующий аргумент компилятора для обеспечения корректного использования:
-Xjspecify-annotations=strict(это значение по умолчанию, начиная с версии 2.1.0 компилятора Kotlin). ( I7104f , b/326456246 )
Версия 1.4.0-альфа02
2 октября 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.4.0-alpha02 . Версия 1.4.0-alpha02 содержит следующие коммиты .
Изменения API
- Задачи Gradle
lockClocksиunlockClocksперемещены в бенчмарк-проекты, а не на верхний уровень. Это изменение было необходимо, поскольку, к сожалению, невозможно зарегистрировать их как действия верхнего уровня, не нарушив изоляцию проекта. ( I02b8f , b/363325823 )
Исправления ошибок
-
BaselineProfileRuleтеперь собирает профили для многопроцессных приложений, отправляя каждому запущенному процессу в конце блока сигнал о необходимости выгрузить профили. Если компиляция на основе профилей не находит процесс для трансляции, компиляция завершается ошибкой, поскольку наличие данных профиля в данных неожиданно. Кроме того, добавлен аргумент инструментирования для управления длительностью ожидания выгрузки:androidx.benchmark.saveProfileWaitMillis( I0f519 , b/366231469 ). - Начиная с Benchmark
1.3.2: исправлена ошибка, из-за которой Firebase Test Lab (FTL) не могла извлечь файлы результатов Baseline Profile или Macrobenchmark из плагина Gradle Baseline Profile. ( I2f678 , b/285187547 )
Чтобы использовать FTL, примените плагин к модулю базового профиля в блоке плагинов с помощью:
plugins {
...
id("com.google.firebase.testlab")
}
и затем настройте тестовую лабораторию Firebase с помощью:
firebaseTestLab {
// Credentials for FTL service
serviceAccountCredentials.set(file("credentials.json"))
// Creates one or more managed devices to run the tests on.
managedDevices {
"ftlDeviceShiba34" {
device = "shiba"
apiLevel = 34
}
}
// Ensures the baseline profile is pulled from the device.
// Note that this will be automated as well later with aosp/3272935.
testOptions {
results {
directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
}
}
}
Также созданное устройство FTL необходимо добавить в расширение базового профиля:
baselineProfile {
managedDevices += "ftlDeviceShiba34"
useConnectedDevices = false
}
Версия 1.4.0-альфа01
18 сентября 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.4.0-alpha01 . Версия 1.4.0-alpha01 содержит следующие коммиты .
Новая функция — аналитика запуска приложений
- Первоначальную версию аналитики запуска приложений можно включить в Macrobenchmark. ( 09fae38 )
Чтобы включить в тест производительности при запуске:
@Test
fun startup {
macrobenchmarkRule.measureRepeated(
…
packageName = "com.example.my.application.id"
metrics = listOf(StartupTimingMetric()),
iterations = 5,
startupMode = StartupMode.COLD,
compilationMode = CompilationMode.None(),
experimentalConfig = ExperimentalConfig(startupInsightsConfig = StartupInsightsConfig(isEnabled = true))
) {
scope.startActivityAndWait(...)
}
}
Затем запуск вашего стартового бенчмарка проанализирует трассировку для поиска распространенных проблем и выведет их после метрик в выходные данные теста Studio на вкладке бенчмарка, например:
StartupBenchmark_startup[startup=COLD,compilationMode=None]
├── Metrics
│ ├── timeToFullDisplayMs min 1,147.2, median 1,208.8, max 1,307.4
│ └── timeToInitialDisplayMs min 1,147.2, median 1,208.8, max 1,307.4
├── App Startup Insights
│ ├── App in debuggable mode (expected: false)
│ │ └── seen in iterations: 0(true) 1(true) 2(true) 3(true) 4(true) 5(true) 6(true) 7(true) 8(true) 9(true)
│ ├── Potential CPU contention with another process (expected: < 100000000ns)
│ │ └── seen in iterations: 4(105022546ns)
│ └── Main Thread - Binder transactions blocked (expected: false)
│ └── seen in iterations: 7(true)
└── Traces
└── Iteration 0 1 2 3 4 5 6 7 8 9
Эта функция все еще находится в стадии разработки, в дальнейшем планируется внести улучшения в документацию и расширить возможности расширения, но мы будем рады любым отзывам.
Новые функции
- Добавлено свойство gradle
androidx.baselineprofile.suppressWarningsдля подавления всех предупреждений базового профиля. ( 314153a ) - Показатели Microbench теперь отображаются в трассировках Perfetto в виде счетчиков. ( 3214854 )
- Добавлены экспериментальные скрипты для отключения JIT (требуются права root и перезапуск среды выполнения) и сброса состояния производительности/тестирования устройства. В настоящее время они не опубликованы в виде задач Gradle. ( 7c3732b )
- Добавлен аргумент бенчмарка для пропуска тестов при запуске на эмуляторе. При включении
automaticGenerationDuringсборки бенчмарки также запускают генерацию базового профиля. При использовании эмуляторов это не сработает. Новый аргументskipBenchmarksOnEmulatorпозволяет пропустить тест. ( 0c2ddcd ) - Изменение события perf позволяет запустить логику на API 23+ ( 2550048 )
Изменения API
- Существующий экспериментальный аргумент
PerfettoConfigдляMacrobenchmarkRule.measureRepeated()перенесен в новый объектExperimentalConfig.
Исправления ошибок
- Увеличьте количество повторных попыток
lockClocks.sh( 99e9dac ) - Не создавайте
nonMinifiedи бенчмарковые типы сборки, если они существуют. Из-за ошибки, даже еслиnonMinifiedтипы сборки существовали, они создавались заново. ( e75f0a5 ) - Игнорировать неконечные фрагменты из результатов
TraceSectionMetric. ( a927d20 ) - Улучшена проверка эмулятора с учетом префикса
sdk_. ( 1587de8 ) - Обрабатывать неработающие пакеты как очищенные в
FrameTimingGfxInfoMetric. ( 35cc79c ) - Исправлена ошибка
androidx.benchmark.cpuEventCounter, приводившая к повреждению значений для событий, не являющихся инструкциями. ( 06edd59 ) - Исправлена ошибка
resumeTiming/runWithTimingDisabledдля соответствия приоритету метрик и значительного снижения влияния приостановки/возобновления метрик с низким приоритетом на результаты метрик с высоким приоритетом. Например, при использовании счётчиков производительности процессора через аргумент инструментированияcpuEventCounter.enableзначение timeNs больше не будет значительно уменьшаться при приостановке/возобновлении. ( 5de0968 )
Версия 1.3
Версия 1.3.4
26 марта 2025 г.
Выпущен androidx.benchmark:benchmark-*:1.3.4 . Версия 1.3.4 содержит следующие коммиты .
Исправления ошибок
- Исправлены несовместимости Gradle Project Isolation в плагине Benchmark Baseline Gradle. ( b/404523257 )
Версия 1.3.3
16 октября 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.3.3 . Версия 1.3.3 содержит следующие коммиты .
Исправления ошибок
- Исправлена ошибка
CollectBaselineProfileTask, когда в устройстве AVD есть пробелы ( Ia0225 , b/371642809 )
Версия 1.3.2
2 октября 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.3.2 . Версия 1.3.2 содержит следующие коммиты .
Исправления ошибок
- Исправлена ошибка, из-за которой Firebase Test Lab (FTL) не могла извлечь файлы результатов Baseline Profile или Macrobenchmark из плагина Gradle Baseline Profile. ( I2f678 , b/285187547 )
Чтобы использовать FTL, примените плагин к модулю базового профиля в блоке плагинов с помощью:
plugins {
...
id("com.google.firebase.testlab")
}
и затем настройте тестовую лабораторию Firebase с помощью:
firebaseTestLab {
// Credentials for FTL service
serviceAccountCredentials.set(file("credentials.json"))
// Creates one or more managed devices to run the tests on.
managedDevices {
"ftlDeviceShiba34" {
device = "shiba"
apiLevel = 34
}
}
// Ensures the baseline profile is pulled from the device.
// Note that this will be automated as well later with aosp/3272935.
testOptions {
results {
directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
}
}
}
Также созданное устройство FTL необходимо добавить в расширение базового профиля:
baselineProfile {
managedDevices += "ftlDeviceShiba34"
useConnectedDevices = false
}
Версия 1.3.1
18 сентября 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.3.1 . Версия 1.3.1 содержит следующие коммиты .
Исправления ошибок
- Добавлено свойство gradle
androidx.baselineprofile.suppressWarningsдля подавления всех предупреждений базового профиля ( I7c36e , b/349646646 ). - Исправлен плагин Gradle Baseline Profile для использования уже существующих
nonMinified…иbenchmark…если они созданы приложением вместо создания оболочек. ( Ia8934 , b/361370179 ) - Исправлена ошибка
java.lang.AssertionError: ERRORS (not suppressed): EMULATORпри включенииautomaticGenerationDuringBuildна эмуляторах. Для пропуска теста используется новый аргумент. ( If3f51 , b/355515798 ) - Минификация микробенчмарка — сохранение подклассов
org.junit.runner.notification.RunListenerв библиотеке бенчмарка proguard ( Ic8ed5 , b/354264743 ) - Исправлена
TraceSectionMetricдля игнорирования неконечных срезов. Ранее считалось, что их длительность равна -1, например, при суммировании или поиске минимальной длительности. ( If74b7 ) - Исправлена проблема в
FrameTimingGfxInfoMetric, из-за которой запуск метрики приводил к сбою, если процесс еще не был запущен. ( I6e412 )
Версия 1.3.0
21 августа 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.3.0 . Версия 1.3.0 содержит следующие коммиты .
Изменения в микробенчмарках с версии 1.2.0
- Трассировка методов включена по умолчанию в микробенчмарках при запуске на большинстве устройств.
- Отслеживание метода выполняется как отдельная фаза после измерений — это позволяет выводить как точные измерения, так и отслеживание метода в ходе одного эталонного запуска.
- Отслеживание методов в некоторых версиях ОС Android и ART повлияет на более поздние этапы измерений. В этих версиях отслеживание методов по умолчанию отключено, а в выходных данных Studio выводится предупреждение.
- Основные потоковые тесты и ANR
- Добавлен
measureRepeatedOnMainThreadдля тестов потоков пользовательского интерфейса (например, тех, которые взаимодействуют с пользовательскими интерфейсами Compose/View), чтобы избежать ошибок ANR при работе в течение многих секунд. - Трассировки методов пропускаются, если ожидается превышение крайнего срока предотвращения ошибок ANR. Чтобы отключить это поведение, установите для
androidx.benchmark.profiling.skipWhenDurationRisksAnrзначение false (не рекомендуется для CI-запусков, так как ошибки ANR могут вызывать проблемы при длительных CI-запусках).
- Добавлен
- Минификация
- Встроенные правила Proguard для улучшения микробенчмаркинга с включенной минимизацией
- Minification/R8 в модуле библиотеки требует AGP 8.3 и может быть включен с помощью
android.buildTypes.release.androidTest.enableMinificationв вашемbuild.gradle - Добавлен экспериментальный API
BlackHole.consume()для предотвращения удаления мертвого кода ( If6812 , b/286091643 )
- Метрики
- Экспериментальная функция счётчика событий процессора (метрики из
perf_event_open, для которой требуются права root в большинстве версий платформы), доступ черезInstrumentationArgumentandroidx.benchmark.cpuEventCounter.enable(можно установить в значениеtrue), аandroidx.benchmark.cpuEventCounter.eventsможно установить, например, в значение (Instructions,CpuCycles). Поддержка должна поддерживаться некоторыми эмуляторами отладки пользователя, но тестирование на всех доступных эмуляторах не проводилось.
- Экспериментальная функция счётчика событий процессора (метрики из
Изменения MACRObenchmark с версии 1.2.0
- Пересмотр метода отслеживания для макробенчмарков.
- Теперь трассировки методов ограничены длительностью
measureBlockи могут захватывать несколько сеансов, если процесс запускается несколько раз. - Ранее трассировка методов работала только для тестов
StartupMode.COLDи не регистрировала ничего дляmeasureBlocks, которые не перезапускали целевой процесс. - Исправлена ошибка с очисткой трассировок методов в макробенчмарке, так что теперь трассировки методов полностью фиксируются и являются действительными даже на более медленных устройствах. ( I6349a , b/329904950 )
- Теперь трассировки методов ограничены длительностью
- Корректно выводить профиль ART во время отдельных итераций
warmUp, когда процесс завершается, чтобы измеренияCompilationMode.Partial(warmup=N)были более точными. ( I17923 ) - Сообщение об ошибке трансляции Drop Shader
- Добавлены рекомендации по отладке для удаления сообщения об ошибке трансляции шейдера.
- Добавьте два аргумента инструментирования для переопределения поведения отбрасывания шейдеров, чтобы обойти сбои при тестировании приложений без
ProfileInstaller1.3:-
androidx.benchmark.dropShaders.enable=true/false: можно использовать, чтобы пропустить отбрасывание всех шейдеров (включая те, которые выполняются вStartupMode.Coldзапусках), особенно при тестировании приложений, которые еще не используют profileinstaller 1.3 -
androidx.benchmark.dropShaders.throwOnFailure=true/false: может использоваться для устранения сбоев при попытке удаления шейдеров, например при тестировании приложений без profileinstaller 1.3 ( I4f573 )
-
- Добавлен экспериментальный вариант
MacrobenchmarkRule#measureRepeated, который использует пользовательскуюPerfettoConfigдля полностью настраиваемой записи трассировки Perfetto. Обратите внимание, что неправильно настроенные конфигурации могут привести к сбою встроенных классов метрик. ( Idfd3d , b/309841164 , b/304038384 ) - Отмените фоновые задания dexopt перед запуском Macrobenchmark, чтобы уменьшить помехи. ( I989ed )
- Macrobenchmark теперь ждет 1 секунду, пока целевое приложение очистит профиль ART (ранее требовалось 500 мс). ( I85a50 , b/316082056 )
- Переработка TraceSectionMetric
- Примечание : изменения
TraceSectionMetricуказанные ниже, могут повлиять на выходные данные при использовании CI и привести к разрывам или нарушить синтаксический анализ. - Сумма теперь является значением по умолчанию, поскольку чаще всего эта метрика используется для повторяющихся событий, и в таких случаях first будет отбрасывать данные.
- Изменен для большей настраиваемости и с большим количеством доступных режимов.
- Имена режимов теперь встроены в имя выходных данных метрики (в Studio и JSON)
- Теперь поддерживает срезы, созданные с помощью
Trace.{begin|end}AsyncSection.
- Примечание : изменения
- Метрики
- Питание — добавлены
PowerMetric.deviceSupportsHighPrecisionTracking,PowerMetric.deviceBatteryHasMinimumCharge()иPowerMetric.deviceSupportsPowerEnergy() -
Metric.getResultпереименован вgetMeasurementsдля соответствия возвращаемому типу. - Добавлены метки log.w/exceptions для всех ошибок обнаружения запуска. Это не меняет текущего поведения (поэтому некоторые ошибки возникают, а другие молча не обнаруживают запуск), просто делает его более понятным. Как правило,
Log.w()и не сообщают метрики запуска, когда отсутствуют нефреймовые события; исключения генерируются при обнаружении запуска, за исключением информации о синхронизации кадров (из фрагментов пользовательского интерфейса/режима реального времени). ( Id240f , b/329145809 ) - Добавлено измерение
frameCountвFrameTimingMetricдля облегчения обнаружения сценариев, в которых измерения изменяются из-за изменения количества созданных кадров (добавлены новые анимации, исправлены проблемы с аннулированием). ( I1e5aa ) - Уточнено, что
frameOverrunMsявляется предпочтительной метрикой для отслеживания, если она доступна в документах, и почему. ( I18749 , b/329478323 ) - Исправлена ошибка, из-за которой незавершенные кадры в начале и конце трассировки могли быть объединены вместе, что приводило к ошибочному отчету о том, что это один очень длинный кадр. ( I39353 , b/322232828 )
- Исправлена ошибка
FrameTimingMetric, когда кадры не создаются, и всегда выводилась ссылка на трассировку при сбое анализа метрики для облегчения диагностики проблемы. ( I956b9 ) - Исправлен сбой в
FrameTimingMetric, из-за которого не удавалось проанализировать идентификатор кадра, особенно на некоторых OEM-устройствах. ( Ia24bc , b/303823815 , b/306235276 ) - Снижена строгость проверок в
FrameMetricsи добавлена дополнительная детализация сообщений об ошибках. ( Iadede )
- Питание — добавлены
Изменения в базовом профиле захвата / плагине Gradle с версии 1.2.0
- Максимальная рекомендуемая версия AGP увеличена до 9.0.0-alpha01.
- Убедитесь, что задачи
mergeArtProfileиmergeStartupProfileвсегда ждут создания базового профиля. ( I623d6 , b/343086054 ) - Успешное создание базового профиля выведет сводку изменений ( I824c8 , b/269484510 ).
- Добавлен DSL для отключения предупреждений ( Ic4deb , b/331237001 )
- Исправление, гарантирующее, что бенчмарки используют сгенерированные базовые профили, когда
automaticGenerationDuringBuildотключен ( Ic144f , b/333024280 ) - Исправлено переопределение свойств плагина Gradle
BaselineProfileдля включения генерации базового профиля и бенчмаркинга при настройкеnonMinifiedили бенчмаркового типа сборки. ( Ib8f05 , b/324837887 ) - Исправление для включения базовых профилей библиотеки в AAR до версии AGP 8.3.0-alpha15. ( I1d2af , b/313992099 )
- Исправлен URL-адрес выходного базового уровня и профиля запуска в конце задачи генерации. ( I802e5 , b/313976958 )
Другие существенные изменения по сравнению с версией 1.2.0
- Захват трассировки
- Ошибка EXITCODE 2 при запуске Perfetto уменьшена с ошибки до регистрируемого предупреждения.
- Включить трассировку AIDL по умолчанию в бенчмарках (требуется API 28) ( Ia0af2 , b/341852305 )
- Включить трассировку тегов Porter по умолчанию в бенчмарках. Это позволяет, например, отслеживать точки трассировки wakelock. ( Icfe44 , b/286551983 )
- Увеличено время ожидания начала захвата трассировки, чтобы избежать сбоев при запуске трассировки на более медленных устройствах ( I98841 , b/329145808 )
- Добавлены публичные API
PerfettoTraceProcessor.Session.queryMetricsс вариантами JSON, textproto и proto binary (недекодированными). Они позволяют запрашивать метрики, встроенные вTraceProcessor( I54d7f , b/304038382 ). - Включить блокировку начала записи трассировки Perfetto, чтобы снизить риск пропуска данных в начале трассировки. Поддерживается только в API 33+. ( Ie6e41 , b/310760059 )
- JSON-вывод
- Добавлена дополнительная информация в контексте бенчмарка в выводе JSON:
-
context.artMainlineVersion— целочисленная версия основного модуля Art (если присутствует на устройстве, в противном случае-1) -
context.build.id— эквивалентно android.os.Build.ID -
context.build.version.codename— эквивалентно android.os.Build.VERSION.CODENAME -
context.build.version.abbreviatedCodename— соответствует первой букве кодового имени предварительной версии (включая релизные сборки) ( Ie5020 )
-
- Добавлен список
profilerOutputв вывод JSON для упрощения работы с трассировками профилирования (например, Perfetto, трассировки методов) ( I05ddd , b/332604449 ) - Добавлено предупреждение при использовании Android Test Orchestrator в модулях тестирования, поскольку это приведет к многократной перезаписи выходных JSON-файлов для каждого модуля. ( Ia1af6 , b/286899049 )
- Вызвать исключение, если длина имени файла превышает 200 символов, чтобы избежать неясных сбоев при записи или постобработке файлов. ( I4a5ab )
- Добавлена дополнительная информация в контексте бенчмарка в выводе JSON:
Версия 1.3.0-rc01
7 августа 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.3.0-rc01 . Версия 1.3.0-rc01 содержит следующие коммиты .
Исправления ошибок
- Исправлена ошибка
androidx.benchmark.cpuEventCounter, приводившая к повреждению значений для событий, не связанных с инструкциями ( I7386a , b/286306579 ). - Исправлены ошибки
resumeTiming/runWithTimingDisabledдля соблюдения приоритета метрик и значительного снижения влияния приостановки/возобновления метрик с низким приоритетом на результаты метрик с высоким приоритетом. Например, при использовании счётчиков производительности процессора через аргумент инструментарияcpuEventCounter.enable, timeNs больше не будет значительно уменьшаться при приостановке/возобновлении. ( I39c2e , b/286306579 , b/307445225 ) - Уменьшена вероятность того, что выборка стека приведет к достижению
measureRepeatedOnMainThreadжесткого тайм-аута основного потока за счет перемещения преобразования выборки стека за пределы основного потока. ( I487a8 , b/342237318 ) - Удалено ручное описание доступа к новым API платформы, поскольку это происходит автоматически посредством моделирования API при использовании R8 с AGP 7.3 или более поздней версии (например, R8 версии 3.3) и для всех сборок с использованием AGP 8.1 или более поздней версии (например, D8 версии 8.1). Клиентам, не использующим AGP, рекомендуется обновиться до D8 версии 8.1 или более поздней. Подробнее см. в этой статье ( I9496c , b/345472586 ).
- Добавлена проверка версии agp для отправки имени пакета в качестве аргумента instr. До версии AGP 8.4.0 имя пакета целевого приложения не могло быть передано в приложение инструментирования через аргументы инструментирования. ( 0c72a3f )
Версия 1.3.0-beta02
10 июля 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.3.0-beta02 . Версия 1.3.0-beta02 содержит следующие коммиты .
Исправления ошибок
- Корректно обработайте EXITCODE
2при запуске Perfetto, чтобы зарегистрировать предупреждение, но продолжите работу.
Версия 1.3.0-beta01
12 июня 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.3.0-beta01 . Версия 1.3.0-beta01 содержит следующие коммиты .
Изменения API
-
MethodTracing.affectsMeasurementOnThisDeviceпереименован вAFFECTS_MEASUREMENT_ON_THIS_DEVICEдля обеспечения согласованности. ( I1bdfa ) - Добавлен экспериментальный API
BlackHole.consume()для предотвращения исключения мертвого кода в микробенчмарках. ( If6812 , b/286091643 ) - Microbenchmark теперь корректно выдаёт ошибку, предотвращая вмешательство трассировки методов в измерения. Это происходит на некоторых устройствах при принудительном включении трассировки методов (через аргументы инструментария или
MicrobenchmarkConfig), а также при попытке измерения после трассировки метода. Затронутые устройства работают с API 26-30 или определёнными версиями основных модулей ART, подверженными этому вмешательству, и могут быть обнаружены во время выполнения с помощьюProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice. ( Iafb92 , b/303660864 )
Исправления ошибок
- Максимальная рекомендуемая версия agp увеличена до 9.0.0-alpha01. ( I5bbb0 )
- Добавлен режим компиляции в контекст бенчмарка ( If5612 , b/325512900 )
- Включить трассировку AIDL по умолчанию (требуется API 28) ( Ia0af2 , b/341852305 )
- Добавлена дополнительная информация в контексте бенчмарка в выводе JSON:
-
context.artMainlineVersion— целочисленная версия основного модуля Art (если присутствует на устройстве, в противном случае -1) -
context.build.id— эквивалентноandroid.os.Build.ID -
context.build.version.codename— эквивалентноandroid.os.Build.VERSION.CODENAME -
context.build.version.abbreviatedCodename— соответствует первой букве кодового имени предварительной версии (даже в релизных сборках) ( Ie5020 )
-
- Исправлен
StackSamplingдля соответствияandroidx.benchmark.profiling.sampleDurationSeconds( Ib1d53 ). - Измените зависимость macro->common на
api(), чтобы ее было проще использовать, например,PerfettoTraceиPerfettoConfig. ( Icdae3 , б/341851833 ) - Убедитесь, что задачи
mergeArtProfileиmergeStartupProfileвсегда ожидают создания базового профиля. ( I623d6 , б/343086054 ) - Учитывайте состояние включения варианта при принятии решения о том, следует ли включать вариант. ( I5d19e , б/343249144 )
- Увеличено время ожидания запуска по умолчанию для процессора трассировки perfetto. ( I87e8c , б/329145808 )
Версия 1.3.0-альфа05
14 мая 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.3.0-alpha05 . Версия 1.3.0-alpha05 содержит эти коммиты .
Исправления ошибок
- Выдавать более четкое исключение, когда метрика Macrobench возвращает нулевые значения для всех итераций ( Iab58f , b/314931695 )
- В правила proguard microbench добавлены дополнительные правила обхода, включая поддержку правил прослушивателя и других наблюдаемых предупреждений/ошибок. ( I14d8f , б / 329126308 , б / 339085669 )
- Трассировка метода выполняется как отдельный этап макротестирования и больше не влияет на измерения. ( If9a50 , б/285912360 , б/336588271 )
- Добавлены дополнительные предложения по отладке для удаления сообщения об ошибке трансляции шейдера. ( I5efa6 , б/325502725 )
Версия 1.3.0-альфа04
1 мая 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.3.0-alpha04 . Версия 1.3.0-alpha04 содержит эти коммиты .
Изменения API
- Добавлен экспериментальный вариант
MacrobenchmarkRule#measureRepeated, который использует специальныйPerfettoConfigдля полностью настраиваемой записи трассировки Perfetto. Обратите внимание, что неправильно настроенные конфигурации могут привести к сбою встроенных классов метрик. ( Idfd3d , б/309841164 , б/304038384 ) - Переименуйте
PowerMetric.deviceSupportsPowerEnergyвPowerMetric.deviceSupportsHighPrecisionTrackingдля ясности ( I5b82f ). - Добавлены
PowerMetric.deviceBatteryHasMinimumCharge()иPowerMetric.deviceSupportsPowerEnergy()позволяющие изменять или пропускать тесты на основе возможностей измерения мощности устройства. ( I6a591 , б/322121218 )
Исправления ошибок
- Добавлено сравнение с предыдущим базовым профилем ( I824c8 , b/269484510 ).
- Добавлен DSL для отключения предупреждений ( Ic4deb , b/331237001 ).
- Изменено исключение в журнале информации, когда варианты тестов отключены ( I8a517 , b/332772491 ).
- Упростите сбор трассировок методов для макробенчмарка, ограниченного продолжительностью фактического
measureBlock(). Раньше он запускался при запуске целевого процесса и поддерживал только холодный запуск ( Iee85a , b/300651094 ). - Избегайте сбоев, когда процессор трассировки perfetto запускается медленно ( I98841 , b/329145808 ).
Версия 1.3.0-альфа03
17 апреля 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.3.0-alpha03 . Версия 1.3.0-alpha03 содержит эти коммиты .
Новые функции
- Добавляет общедоступные API
PerfettoTraceProcessor.Session.queryMetricsс вариантами JSON, textproto и proto двоичными (некодированными) вариантами. Они позволяют запрашивать метрики, встроенные в TraceProcessor ( I54d7f , b/304038382 ). - Добавлен
profilerOutputв выходные данные JSON для упрощения работы с трассировками профилирования (например, трассировки perfetto, трассировки методов). ( I05ddd , б/332604449 ) - Добавлен тег питания для тестирования Perfetto Config. Это фиксирует, например, точки трассировки блокировки. ( Icfe44 , р/286551983 )
- Добавлен аргумент inst
androidx.benchmark.profiling.skipWhenDurationRisksAnr, для которого можно установить значение false, чтобы избежать пропуска трассировок метода, когда ожидаемая продолжительность может вызвать ANR — настоятельно рекомендуется избегать при запусках CI. - Добавлен экспериментальный аргумент inst
androidx.benchmark.profiling.perfCompare.enable. Установите для него значение true, чтобы запустить сравнение времени между этапами измерения и профилирования. Полезно, например, для оценки накладных расходов на трассировку метода. ( I61fb4 , б/329146942 )
Изменения API
- Изменен
TraceSectionMetric.Modeна запечатанный класс, чтобы обеспечить возможность дальнейшего расширения без нарушения исчерпывающих операторов if ( I71f7b ). - Добавлены
TraceSectionMetric.Mode.Averageи.Count, а также изменен порядок аргументов, чтобы более распространенный аргумент (режим) находился раньше в списке аргументов, что уменьшило необходимость указания имен параметров. ( Ibf0b0 , б/315830077 , б/322167531 ) -
Metric.getResultпереименован вgetMeasurementsв соответствии с типом возвращаемого значения ( I42595 ).
Исправления ошибок
- Исправлено, чтобы гарантировать, что тесты используют сгенерированные базовые профили, когда
automaticGenerationDuringBuildотключен ( Ic144f , b/333024280 ). - Исправьте переопределения свойств плагина Gradle
BaselineProfile, чтобы включить генерацию базового профиля и тестирование при настройке типа сборкиnonMinifiedили эталонного теста. ( Ib8f05 , b/324837887 ) - Исправлена очистка трассировок методов в макробенчмарке, поэтому трассировки методов должны быть полностью записаны и действительны даже на более медленных устройствах. ( I6349a , б/329904950 )
- Включите блокировку запуска записи трассировки Perfetto, чтобы снизить риск потери данных в начале трассировки. Поддерживается только в API 33+. ( Ie6e41 , b/310760059 )
- Добавлено предупреждение при использовании Android Test Orchestrator в модулях тестирования, так как это приведет к многократной перезаписи выходных файлов JSON для каждого модуля. ( Ia1af6 , б/286899049 )
- Принудительно использовать разделители тысяч ',' (запятая) для согласованности вывода Studio, игнорируя локаль устройства ( I3e921 , b/313496656 )
-
TraceSectionMetricтеперь поддерживает срезы, созданные с помощьюTrace.{begin|end}AsyncSection. ( I91b32 , б/300434906 ) - Добавлены метки log.w/Exception для всех ошибок обнаружения запуска. Это не меняет текущего поведения (поэтому некоторые ошибки выдаются, а другие молча не обнаруживают запуск), просто делает его более понятным. Обычно те, которые
Log.w()не сообщают о показателях запуска, — это те, в которых отсутствуют события, не связанные с кадрами, исключения выдаются при обнаружении запуска, за исключением информации о синхронизации кадра (из срезов UI/RT). ( Id240f , б/329145809 ) - Отмените фоновые задания dexopt перед запуском Macrobenchmark, чтобы уменьшить помехи. ( I989ed )
- В
FrameTimingMetricдобавленоframeCount, чтобы помочь обнаружить сценарии, в которых измерения изменяются из-за изменения количества созданных кадров (добавлены новые анимации, исправлены проблемы с недействительностью). ( I1e5aa ) - Уточнено, что
frameOverrunMsявляется предпочтительной метрикой для отслеживания, когда она доступна в документах, и почему. ( I18749 , б/329478323 )
Версия 1.3.0-альфа02
20 марта 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.3.0-alpha02 . Версия 1.3.0-alpha02 содержит эти коммиты .
Новые функции
Экспериментальная поддержка R8 в microbench с помощью встроенных правил proguard. Обратите внимание, что эта поддержка является экспериментальной и требует AGP 8.3 для минимизации тестов модулей библиотеки. Используйте следующее, чтобы включить минификацию/оптимизацию R8 в
build.gradleвашего тестового модуля, что должно привести к значительному увеличению производительности, в зависимости от рабочей нагрузки. ( I738a3 , б/184378053 )android { buildTypes.release.androidTest.enableMinification = true }
Исправления ошибок
- Исправлена ошибка, из-за которой предупреждение о трассировке метода выводилось на отдельной строке от вывода микротеста. ( I0455c , б/328308833 )
Версия 1.3.0-альфа01
21 февраля 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.3.0-alpha01 . Версия 1.3.0-alpha01 содержит эти коммиты.
Изменения API
- Переименованы логические параметры
MicrobenchmarkConfig, чтобы избежать ненужного слова «следует» ( Ia8f00 , b/303387299 ). - Добавлен
BenchmarkRule.measureRepeatedOnMainThread, чтобы тесты основных потоков (например, связанные с представлениями или пользовательскими интерфейсами создания) могли избежать срабатывания ошибок ANR, особенно в больших пакетах CI. ( I5c86d ) - Добавлен
FrameTimingGfxInfoMetric, экспериментальная альтернативная реализацияFrameTimingMetricс измерениями, поступающими непосредственно с платформы, а не извлеченными из трассировки Perfetto. ( I457cb , б/322232828 ) - Добавьте возможность сохранять профиль ART во время отдельных итераций
warmUp. ( I17923 ) - Несколько изменений в API
TraceSectionMetric:- Добавить
Mode.Min,Mode.Max - Добавьте аргумент метки, чтобы переопределить имя раздела как метку метрики.
- Добавлено название режима для вывода, чтобы уточнить значение метрики.
- Изменено значение по умолчанию для суммы, поскольку большая часть этой метрики используется для повторяющихся событий. Имейте в виду, что эти изменения в использовании CI могут привести к разрывам или нарушению анализа. ( Ic1e82 , б/301892382 , б/301955938 )
- Добавить
Исправления ошибок
- Улучшено сообщение об ошибке в плагине gradle базового профиля, когда указанное управляемое устройство не существует ( Idea2b , b/313803289 ).
- Исправление включения базовых профилей библиотеки в AAR до AGP 8.3.0-alpha15 ( I1d2af , b/313992099 ).
- Исправлен исходный URL-адрес базового и стартового профиля в конце задачи генерации ( I802e5 , b/313976958 ).
- Скорректированы таймауты источника данных для попытки исправить
java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)]( I8dc7d , b/323601788 ) - Добавьте два аргумента инструментария для переопределения поведения отбрасывания шейдера для обхода сбоев при тестировании приложений без
ProfileInstaller1.3:-
androidx.benchmark.dropShaders.enable=true/false: можно использовать для пропуска всех отбрасываний шейдеров (включая то, что происходит вStartupMode.Coldзапусках), особенно при тестировании приложений, которые еще не используют Profileinstaller 1.3. -
androidx.benchmark.dropShaders.throwOnFailure=true/false: может использоваться для допуска сбоев при попытке отбросить шейдеры, например, при тестировании приложений без Profileinstaller 1.3 ( I4f573 ).
-
- Пропустить трассировку метода в потоке пользовательского интерфейса, если ожидается, что она займет больше нескольких секунд, и очистить трассировку метода при выдаче. ( I6e768 )
- Выдавайте, когда имена файлов длиннее 200 символов, чтобы избежать неясных сбоев при записи или постобработке файлов. ( I4a5ab )
- Устранена проблема, из-за которой незавершенные кадры в начале и конце трассировки могли быть объединены в пары, что ошибочно регистрировалось как один очень длинный кадр. ( I39353 , б/322232828 )
- Используйте
--skip verificationна API 30+ при переустановке пакета на API 30-33, чтобы очистить профили ART в пользовательских сборках. Это помогает обойти предупреждения Play Protect, которые вызывают сбои на некоторых классах устройств. ( Ic9e36 ) - Используйте
am force-stop, чтобы закрыть приложения, которые не являются системными, например System UI или Launcher. ( I5e028 ) - Macrobenchmark теперь ожидает
1 second, пока целевое приложение сбросит профиль ART (ранее оно ждало500 ms). ( И85а50 , б/316082056 ) - Устраните ошибку
FrameTimingMetric, когда кадры не создаются, и всегда выводите ссылку для отслеживания в случае сбоя анализа метрики, чтобы помочь в диагностике проблемы. ( I956b9 ) - Исправлен сбой в
FrameTimingMetric, из-за которого не удавалось проанализировать идентификатор кадра, особенно на некоторых OEM-устройствах. ( Ia24bc , б/303823815 , б/306235276 ) - Ослаблена строгость проверок в
FrameMetricsи добавлена более подробная информация в сообщения об ошибках. ( Иадеде )
Версия 1.2
Версия 1.2.4
17 апреля 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.2.4 . Версия 1.2.4 содержит эти коммиты .
Исправления ошибок
- Исправлена ошибка, из-за которой базовый профиль srcset не настраивался в вариантах тестирования. Также исправлено
automaticGenerationDuringBuildв библиотеках, вызывающее циклическую зависимость. ( I28ab7 , б/333024280 ) - Используйте
am force-stop, чтобы закрыть приложения, которые не являются системными, например System UI или Launcher. Это исправляет сбой тестовStartupMode.COLDиз-за «Пакет $package не должен быть запущен до холодного запуска!» из-за того, что процесс kill не удался полностью. ( I5e028 )
Версия 1.2.3
24 января 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.2.3 . Версия 1.2.3 содержит эти коммиты.
Исправления ошибок
- Удалено исключение из подключаемого модуля Gradle базового профиля, если версия AGP 8.3.0 или выше.
- Исправлено включение базовых профилей библиотеки в AAR до AGP 8.3.0-alpha15.
Версия 1.2.2
1 декабря 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.2 . Версия 1.2.2 содержит эти коммиты.
Базовые профили
- В журналах выполнения путь к выходному файлу базового профиля будет отображаться как URI локального файла ( aosp/2843918 , aosp/2853665 , b/313976958 ).
Версия 1.2.1
15 ноября 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.1 . Версия 1.2.1 содержит эти коммиты.
Новые функции
- Улучшено сообщение об ошибке, когда пользователь отключает варианты тестирования ( b/307478189 ).
- Добавлены свойства для поддержки интеграции тестового запуска AS ( b/309805233 ), ( b/309116324 ).
Версия 1.2.0
18 октября 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0 . Версия 1.2.0 содержит эти коммиты.
Важные изменения с версии 1.1.0
Базовые профили
- Новый плагин Gradle Baseline Profile автоматизирует сбор и включение базовых профилей в рабочий процесс тестирования и сборки.
-
BaselineProfileRule.collectтеперь стабильная версия, оптимизированная и упрощенная версия предыдущего экспериментального APIBaselineProfileRule.collectBaselineProfile- Просто укажите
packageNameи управляйте своим приложением.
- Просто укажите
- Для библиотек, генерирующих базовые профили, теперь вы можете фильтровать правила, сгенерированные либо в коде (аргумент
BaselineProfileRule.collect), либо, что еще проще, в плагине gradle. - Исправления
- Исправлен сбор базовых профилей на Android U+ ( Id1392 , b/277645214 ).
Макробенчмарк
- Компиляция
- Macrobenchmark теперь корректно полностью сбрасывает состояние компиляции для каждой компиляции — для этого требуется переустановить APK до Android 14, поэтому настоятельно рекомендуется проводить тестирование на Android 14+, если вы хотите сохранить состояние (например, вход пользователя) в измеряемые данные.
- Вы также можете обойти эту проблему, управляя компиляцией приложения отдельно и пропуская компиляцию с помощью
CompilationMode.Ignore()или аргумента инструментария.
Инструментальные аргументы
- Поддержка аргумента инструментария
androidx.benchmark.dryRunMode.enable(уже доступен в микробенчмарке) для более быстрого запуска проверки (например, при создании теста или при предварительной отправке) - Поддержка
androidx.benchmark.profiling.mode=StackSamplingиMethodTracing. - Добавлен
androidx.benchmark.enabledRules, позволяющий фильтровать базовый профиль во время выполнения по сравнению с тестами правил макробенчмарка. - Добавлен аргумент
androidx.benchmark.perfettoSdkTracing.enable, позволяющий включить трассировку с помощью tracing-perfetto, например, трассировку рекомпозиции Compose. Обратите внимание, что при использовании сStartupMode.COLDна время будет существенное влияние, поскольку библиотека трассировки загружается и включается во время запуска приложения.
- Поддержка аргумента инструментария
Требования
- Macrobenchmark теперь требует
ProfileInstaller1.3.0 или более поздней версии в целевом приложении, чтобы включить захват/сброс профиля и очистку кэша шейдеров.
- Macrobenchmark теперь требует
Новые экспериментальные API метрик
- Добавлен экспериментальный
TraceSectionMetric, который позволяет извлекать простое время из блоковtrace("") {}в вашем приложении, или TraceMetric для использования всех возможностей запросов PerfettoTraceProcessor. - Добавлен экспериментальный
PowerMetricдля сбора информации об энергопотреблении. - Добавлен экспериментальный
MemoryCountersMetricдля подсчета ошибок страниц. - Добавлен экспериментальный API
PerfettoTraceProcessor, который используется внутри компании для извлечения метрик из системных трассировок (также известных как трассировки Perfetto).
- Добавлен экспериментальный
Исправления
- Исправлены сбои при установке или извлечении профилей из приложения, установленного из нескольких APK (например, из пакета приложений).
- Исправлено
FrameTimingMetric, игнорировавшее кадры с несогласованными идентификаторами кадров (как правило, кадры во время пульсаций в API 31+) ( I747d2 , b/279088460 ). - Исправлены ошибки анализа трассировок > 64 МБ ( Ief831 , b/269949822 )
- Уточнены ошибки, когда образ ОС устройства (особенно эмулятора) неправильно настроен для трассировки или компиляции.
- Пропустить проверку уровня заряда батареи для устройств без батареи (микро и макро)
- Улучшен вывод файлов с более четкими ошибками для недопустимых выходных каталогов и более безопасными настройками по умолчанию.
- Повышена стабильность
StartupMode.COLDза счет последовательного удаления кэша шейдеров (также предоставляется черезMacrobenchmarkScope.dropShaderCache). - Исправлен резервный вариант для
startActivityAndWait.
Микробенчмарк
- Функции
- Профилирование было перенесено в отдельный этап после других показателей, поэтому один тестовый запуск может отображать как точное время , так и результаты профилирования.
- Экспериментальные API
- Добавлен экспериментальный API
MicrobenchmarkConfigдля определения пользовательских метрик и настройки трассировки и профилирования. Может использоваться для захвата трассировок методов или точек трассировки (но помните о накладных расходах на трассировку). - Добавлены экспериментальные API для управления
BenchmarkStateотдельно отBenchmarkRule, без JUnit. - Добавлена экспериментальная запись
PerfettoTrace, позволяющая собирать трассировки Perfetto с настраиваемой конфигурацией отдельно от API-интерфейсов тестирования.
- Добавлен экспериментальный API
- Исправления
- Обходной путь: отсутствие ведущих пробелов в результатах тестирования Android Studio.
- Устранена проблема, из-за которой предупреждения не отображались в результатах тестирования Android Studio.
- Исправлен сбой
SampledProfilingна Android 13 (API 33) и выше. - Значительно улучшена производительность
dryRunModeза счет пропуска трассировкиIsolationActivityи Perfetto (режим пробного запуска до 10 раз быстрее в старых версиях ОС).
Версия 1.2.0-rc02
6 октября 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-rc02 . Версия 1.2.0-rc02 содержит эти коммиты.
Исправления ошибок
- Исправлен вывод файла Benchmark, чтобы он больше не прерывал копирование файлов подключаемого модуля
BaselineProfile. Файлы были созданы и скопированы с устройства, но были переименованы так, что плагин gradle их не увидел. ( I8dbcc , б / 303034735 , б / 296453339 ) - Уточнены сообщения об ошибках загрузки
tracing-perfettoпри внедрении из модуля макротестирования в целевое приложение.
Версия 1.2.0-rc01
20 сентября 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-rc01 . Версия 1.2.0-rc01 содержит эти коммиты.
Исправления ошибок
- Исключение (с инструкциями по устранению) теперь выдается, когда трассировка Perfetto SDK не может инициализироваться в тесте производительности. ( I6c878 , б / 286228781 )
- Исправлен сбой OOM при преобразовании трассировки метода ART -> формат perfetto. ( I106бд , б/296905344 )
- (Macrobenchmark) Уточнена метка трассировки метода при связывании с выходными данными теста Studio, а также исправлены имена файлов трассировки методов, которые стали уникальными на устройстве/хосте, чтобы они не перезаписывались при запуске более одного теста. ( I08e65 , б / 285912360 )
- Гарантирует, что устройство активизируется при захвате базового профиля. ( I503FC )
Версия 1.2.0-бета05
30 августа 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-beta05 . Версия 1.2.0-beta05 содержит эти коммиты.
Новые функции
- Плагин Gradle Baseline Profile теперь поддерживает плагин Android Gradle 8.3. ( аосп/2715214 )
Версия 1.2.0-бета04
23 августа 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-beta04 . Версия 1.2.0-beta04 содержит эти коммиты.
Новые функции
- Плагин Baseline Profiles Gradle теперь поддерживает плагин Android Gradle 8.3. ( аосп/2715214 )
Исправления ошибок
- Исправьте сбои при записи/перемещении и извлечении файлов (особенно из параметризованных тестов), дополнительно очищая имена выходных файлов, избегая знаков «=» и «:» в именах выходных файлов. ( I759d8 )
Версия 1.2.0-бета03
9 августа 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-beta03 . Версия 1.2.0-beta03 содержит эти коммиты.
Изменения API
- Добавлен аргумент для фильтрации
TraceSectionMetricтолько для целевого пакета по умолчанию ( Ia219b , b/292208786 ).
Исправления ошибок
- Аргумент инструментария
fullTracing.enableпереименован вperfettoSdkTracing.enableдля обеспечения соответствия имени артефакта и другим ссылкам.fullTracing.enableпродолжит работать в качестве резервного варианта. ( I7cc00 ) - Внутренние точки трассировки библиотеки тестов (включая трассировку цикла/фазы микробенчмарка) теперь будут отображаться в средстве просмотра системной трассировки Studio и вкладываться в правильный процесс в Perfetto. ( I6b2e7 , б/293510459 )
- Удалена ошибка макротеста NOT-PROFILEABLE в API 31+ и пропущена профилируемая проверка на корневых устройствах eng/userdebug. ( I2abac , б / 291722507 )
- При использовании оптимизации макета Dex правила профиля запуска теперь также считаются правилами базового профиля. ( аосп/2684246 , б/293889189 )
Версия 1.2.0-beta02
26 июля 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-beta02 . Версия 1.2.0-beta02 содержит эти коммиты.
Изменения API
- Добавлены экспериментальные API для пользовательских метрик и конфигураций microbench (например, профилировщик и трассировка). ( I86101 , б / 291820856 )
Исправления ошибок
- Сообщайте об ошибке в макросборке, когда ОС неправильно настроена для трассировки, как это было недавно исправлено в эмуляторах API 26/28 ARM64. ( I0a328 , б/282191686 )
- Добавлена информация об ошибке сброса компиляции, предлагающая обновить эмулятор, поскольку некоторые эмуляторы недавно устранили эту проблему. ( I8c815 , б / 282191686 )
- Сделайте
androidx.test.uiautomator:uiautomator:2.2.0apiвместо зависимостиimplementation. ( I1981e )
Версия 1.2.0-beta01
18 июля 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-beta01 . Версия 1.2.0-beta01 содержит эти коммиты.
Исправления ошибок
- Исправлена ошибка, из-за которой предупреждения иногда подавлялись в выходных данных Benchmark в Studio, а также временное решение проблемы, когда ведущие пробелы в выходных данных Benchmark не отображались в Studio ( Ia61d0 , b/227205461 , b/286306579 , b/285912360 ).
- Исправлен комментарий для
FrameTimingMetric. Субметрика называетсяframeDurationCpuMs. (frameDurationCpuMs, b/288830934 ) .
Версия 1.2.0-альфа16
21 июня 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-alpha16 . Версия 1.2.0-alpha16 содержит эти коммиты.
Изменения API
- API
BaselineProfileRule.collectBaselineProfile()переименован вBaselineProfileRule.collect(). ( I4b665 )
Исправления ошибок
- Поддержка Macrobenchmark для
androidx.benchmark.profiling.mode = MethodTracing. ( I7ad37 , б/285912360 ) - Профилирование микробенчмарков перенесено в отдельный этап, поэтому оно происходит последовательно после измерения, а не заменяет его. Разделы трассировки
MethodTracingтеперь также включаются в записанную трассировку Perfetto, если таковая имеется. ( I9f657 , б / 285014599 ) - Добавьте измерение количества в
TraceSectionMetricс помощьюMode.Sum. ( Ic121a , б/264398606 )
Версия 1.2.0-альфа15
7 июня 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-alpha15 . Версия 1.2.0-alpha15 содержит эти коммиты.
Новые функции
- Добавлен экспериментальный
MemoryUsageMetricдля отслеживания использования памяти целевым приложением. ( I56453 , б / 133147125 , б / 281749311 ) - Добавьте поддержку полностью пользовательских конфигураций Perfetto с помощью
PerfettoTrace.record( If9d75 , b/280460183 ). - Добавлено свойство, позволяющее пропустить создание базового профиля. Использование:
./gradlew assemble -Pandroidx.baselineprofile.skipgeneration. ( I37fda , б/283447020 )
Изменения API
- API
collectBaselineProfileвсегда создает стабильные базовые профили. APIcollectStableBaselineProfileбыл удален, и вместо него следует использоватьcollectBaselineProfile. ( I17262 , б / 281078707 ) - Аргумент
filterPredicateвBaselineProfileRuleизменен на ненулевое значение с эквивалентным значением по умолчанию, чтобы поведение фильтра по умолчанию было более понятно в документации. ( I3816e )
Исправления ошибок
- Отключите трассировку
IsolationActivityи Perfetto вdryRunMode, чтобы значительно повысить производительность, поскольку они занимали большую часть времени выполнения. ( Ie4f7d ) - Поддержка выборки стека вызовов в Macrobenchmarks с использованием аргументов инструментального теста
androidx.benchmark.profiling.mode=StackSamplingиandroidx.benchmark.profiling.sampleFrequency. ( I1d13b , б/282188489 ) - Исправлен сбой при сбросе шейдеров на Android U (API 34), а также на эмуляторах. ( I031ca , б/274314544 )
Версия 1.2.0-альфа14
3 мая 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-alpha14 . Версия 1.2.0-alpha14 содержит эти коммиты.
Исправления ошибок
- Исправлена ошибка, из-за которой
FrameTimingMetricигнорировал кадры с несовместимыми идентификаторами кадров. Это привело бы к тому, что некоторые анимации в последних версиях платформы (API 31+) игнорировали многие кадры во время анимацииRenderThread(например, во время пульсации). ( I747d2 , б / 279088460 ) - Исправлен анализ трассировочного процессора для трасс размером более 64 МБ. ( Ief831 , б/269949822 )
- Исправлен сбой при создании базового профиля на Android U из-за другого вывода команды
pm dump-profiles. ( Id1392 , б/277645214 ) - Исправлен сценарий блокировки тактовой частоты графического процессора для правильного сравнения строк ( I53e54 , b/213935715 ).
Версия 1.2.0-альфа13
5 апреля 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-alpha13 . Версия 1.2.0-alpha13 содержит эти коммиты.
Изменения API
- Добавлен параметр типа профиля при создании базовых профилей для поддержки предстоящей функции профиля запуска ( Ie20d7 , b/275093123 ).
- Добавлен новый экспериментальный API
TraceMetricдля определения полностью настраиваемых метрик на основе содержимого трассировки Perfetto. ( I4ce31 , б/219851406 ) - Добавьте экспериментальную метрику, чтобы определить количество ошибок страниц во время тестирования. ( I48db0 )
Версия 1.2.0-альфа12
22 марта 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-alpha12 . Версия 1.2.0-alpha12 содержит эти коммиты.
Новые функции
- Новый плагин gradle базового профиля выпущен в альфа-версии, что упрощает создание базового профиля и упрощает рабочий процесс разработчика.
Изменения API
- Удалена поддержка трассировки Perfetto в API 21 и 22, которая включает как Microbenchmarks, так и экспериментальные API
PerfettoTrace. До этой версии соединенияUiAutomationна некоторых устройствах были ненадежными. ( I78e8c ) - Добавлен общедоступный экспериментальный API для
PerfettoTraceProcessor, позволяющий анализировать содержимое трассировки. Это шаг к полностью настраиваемым метрикам, основанным на данных трассировки Perfetto. ( I2659e , б / 219851406 )
Версия 1.2.0-альфа11
8 марта 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-alpha11 . Версия 1.2.0-alpha11 содержит эти коммиты.
Исправления ошибок
- Исправлены сбои в
MacrobenchmarkRuleиBaselineProfileRuleпри переустановке или извлечении профилей из пакета приложений с несколькими APK. ( I0d8c8 , б/270587281 )
Версия 1.2.0-альфа10
22 февраля 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-alpha10 . Версия 1.2.0-alpha10 содержит эти коммиты.
Новые функции
- В Android 14+ Macrobenchmark больше не переустанавливает целевые приложения для сброса состояния компиляции благодаря новой функции платформы. Раньше необходимо было иметь рутированное устройство или иметь дело с удалением всего состояния приложения (например, входа пользователя) перед запуском каждого теста. ( I9b08c , б/249143766 )
Исправления ошибок
- Исправьте
DryRunMode, чтобы он больше не аварийно завершал работу с пустым профилем из-за пропуска компиляции. Вместо этого он запускает одну итерацию и извлекает профиль, чтобы что-то зафиксировать. ( I2f05d , б/266403227 ) - Исправлен сбой
PowerMetricпри проверке наличия powerstats на старых уровнях API. ( 5faaf9 , б/268253898 )
Версия 1.2.0-альфа09
11 января 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-alpha09 . Версия 1.2.0-alpha09 содержит эти коммиты.
Исправления ошибок
- Включена передача
Noneв аргумент инструментарияandroidx.benchmark.enabledRules, чтобы отключить все тесты/генерацию базового профиля. ( I3d7fd , б/258671856 ) - Исправлен захват
PerfettoTraceв модулях приложения (т. е. тестовых APK без самоинструмента) ( I12cfc ). - Исправлен порядок аргументов извлечения adb базового профиля в выходных данных Studio ( I958d1 , b/261781624 ).
- API-интерфейс 33 эмулятора руки теперь правильно распознается как таковой при попытке запустить макротест и правильно выводит предупреждение. ( 69133б , б/262209591 )
- Пропустить проверку уровня заряда батареи на устройствах без батареи в Macrobenchmark ( fe4114 , b/232448937 )
Версия 1.2.0-альфа08
7 декабря 2022 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-alpha08 . Версия 1.2.0-alpha08 содержит эти коммиты.
Изменения API
- Добавлены новые экспериментальные API
PerfettoTrace.record {}иPerfettoTraceRuleдля захвата трассировок Perfetto (также известных как системные трассировки) в рамках теста для проверки поведения и производительности теста. ( I3ba16 ) -
BaselineProfileRuleтеперь принимает предикат фильтра вместо списка префиксов пакетов. Это дает тесту полный контроль над фильтрацией. ( I93240 ) - Добавьте экспериментальный API
BaselineProfileRule.collectStableBaselineProfile, который ожидает, пока базовый профиль не станет стабильным в течение N итераций. ( I923f3 ) - Добавьте возможность указывать префикс имени выходного файла при создании базовых профилей с помощью
BaselineProfileRule. ( I7b59f , б / 260318655 )
Исправления ошибок
- Повысить безопасность записи выходных файлов, что должно препятствовать скрытой записи/добавлению выходных файлов, особенно в API 21/22. ( If8c44 , б/227510293 )
- Исправьте вывод трассировки
simpleperf, чтобы правильно создать и разместить файл. В более общем плане это также должно решить проблемы, когда файл безуспешно извлекается gradle. ( I12a1c , б / 259424099 ) - Улучшено сообщение об ошибке Profileinstaller, выводящееся, когда ProfileInstaller слишком старый. Теперь вам предлагается обновить версию Profileinstaller (1.2.1) для измерения базовых профилей API с 31 по 33, вместо того, чтобы говорить, что это не поддерживается. ( Я517ф , б/253519888 )
- Исправлено несколько сбоев команд оболочки при сообщении об ошибке. Печать необходимого API <=23, включая сбой двоичной настройки захвата perfetto и сбои захвата трассировки ( Ib6b87 , b/258863685 ).
- Автоматически сортируйте созданные правила профиля, чтобы минимизировать количество изменений по мере их изменения с течением времени (при возврате правил профиля в систему контроля версий). ( Ie2509 )
- Исправлен сбой в нерутированных сборках ниже Android 13 (API 33) с сообщением
Expected no stderr from echo 3 > /proc/sys/vm/drop_caches( I6c245 , b/259508183 ).
Известные проблемы : MacrobenchmarkScope.dropShaderCache() может привести к сбою из-за отсутствия реестра широковещательной рассылки в манифесте Profileinstaller, который еще не выпущен. ( I5c728 , b/258619948 ) Чтобы обойти проблему в profileinstaller:1.3.0-alpha02 , добавьте следующее в AndroidManifest.xml вашего приложения (не вашего теста):
<!-- workaround bug in profileinstaller 1.3.0-alpha02, remove when updating to alpha03+ -->
<receiver
android:name="androidx.profileinstaller.ProfileInstallReceiver"
android:permission="android.permission.DUMP"
android:exported="true">
<intent-filter>
<action android:name="androidx.profileinstaller.action.BENCHMARK_OPERATION" />
</intent-filter>
</receiver>
Версия 1.2.0-альфа07
9 ноября 2022 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-alpha07 . Версия 1.2.0-alpha07 содержит эти коммиты.
Изменения API
- Добавляет
PowerMetricAPI для измерения энергии и мощности в Macrobenchmarks. ( Ифе601 , б/220183779 ) - Исправлен
MacrobenchmarkScope.dropShaderCache(), который фактически удалял кэш шейдеров. Это устраняет примерно 20 мс шума в тестахStartupMode.COLD, поскольку шейдеры теперь последовательно очищаются на каждой итерации. РаньшеPartialкомпиляция с использованием итераций прогрева сообщала некорректно быстрые числа, поскольку во время прогрева с большей вероятностью происходило кэширование шейдера. Для этого исправления требуется либо рутированное устройство, либо использованиеprofileinstaller:1.3.0-alpha02в целевом приложении. Информацию об изменениях API библиотекиProfileInstallerможно найти на странице ProfileInstaller 1.30-alpha02 . ( Я5171 , б/231455742 ) - Добавлен
TraceSectionMode("label", Mode.Sum), позволяющий измерять общее время, затраченное на несколько участков трассировки с одной и той же меткой. Например,TraceSectionMetric("inflate", Mode.Sum)сообщит метрикуinflateMsза общее время макротеста, затраченное на инфляцию. Также удалено требование API 29, посколькуTraceSectionMetricработает вместе сandroidx.tracing.Traceобратно на более низкие уровни API с использованиемforceEnableAppTracingв целевом приложении. ( Id7b68 , б/231455742 )
Исправления ошибок
- Повышена безопасность всех внутренних команд оболочки за счет проверки всех выходных данных/ошибок. ( I5984d , б / 255402908 , б / 253094958 )
- Укажите устройство в базовом профиле команды
adb pull, чтобы команду pull можно было просто скопировать, если подключено несколько устройств (до одного эмулятора) ( I6ac6c , b/223359380 ) - Добавьте ошибку, если APK-файл теста макротеста не настроен как самоинструментируемый. Эта ошибка препятствует проведению макросравнительного тестирования внутри процесса целевого приложения. В процессе макробенч не сможет скомпилировать/завершить/холодный запуск приложения или контролировать свои собственные разрешения ( I4279b ).
- Исправлена проблема в
measureRepeated(), из-за которойStartupMode.COLDне убивал целевой процесс послеsetupBlock. ТеперьsetupBlock, взаимодействующий с приложением, не оставит процесс приложения запущенным и приведет к недопустимому измерению холодного запуска. ( I8ebb7 )
Версия 1.2.0-альфа06
24 октября 2022 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-alpha06 . Версия 1.2.0-alpha06 содержит эти коммиты.
Изменения API
-
BaselineProfileRuleбольше не требует root-доступа на Android 13 (API 33) и больше не является экспериментальным. ( Ie0a7d , б/250083467 , б/253094958 )- Это изменение также исправляет то, как профили из приложения сбрасываются на диск на нерутированных устройствах, но требует обновления зависимости установщика профиля целевого приложения.
- Чтобы использовать
BaselineProfileRuleилиCompilationMode.Partial(warmupIterations)на нерутированном устройстве, вам также необходимо обновить целевое приложение, чтобы оно использовалоandroidx.profileinstaller.profileinstaller:1.3.0-alpha01. Это позволяет правильно записать профиль на диск, чтобы его можно было скомпилировать/извлечь.
Исправления ошибок
- Исправляет сбой
SampledProfilingв API 33+. ( I40743 , б / 236109374 )
Версия 1.2.0-альфа05
5 октября 2022 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-alpha05 . Версия 1.2.0-alpha05 содержит эти коммиты.
Исправления ошибок
- Исправление разбивки кадров в средстве просмотра системной трассировки Studio для трассировок, захваченных тестами ( I3f3ae , b/239677443 ).
- Исправьте
FrameTimingMetric, чтобы указатьFrameOverrunкак требующий API 31 вместо 29 ( I716dd , b/220702554 ). - Установите итерацию в
BaselineProfileRuleи четко выдавайте исключение, если целевой пакет не установлен (это уже было сделано для MacrobenchmarkRule). ( Ic09a3 , б/227991471 )
Версия 1.2.0-альфа04
21 сентября 2022 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-alpha04 . Версия 1.2.0-alpha04 содержит эти коммиты.
Новые функции
Добавьте поддержку аргумента инструмента
dryRunMode.enableв макротест (уже доступен в микро) для ускорения локальной разработки и проверки автоматизации приложений (например, при предварительной отправке). Это заменяет итерации на 1, пропускает компиляцию, подавляет все ошибки конфигурации и отключает вывод файла измерений .json. ( Ib51b4 , б/175149857 )В командной строке Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.dryRunMode.enable=trueВ build.gradle:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.dryRunMode.enable', 'true' } }
Исправления ошибок
- Исправлена ошибка
StartupTimingMetric, которая больше не требует запуска измеряемых действий черезMacrobenchmarkScope.startActivityAndWait(). Это означает, что метрика может отслеживать запуски, например, из уведомлений,Context.startActivity(), навигации на основе активности в приложении или команд оболочки. ( Ia2de6 , б/245414235 ) - Исправлена ошибка, из-за которой
startActivityAndWaitистекал тайм-аут при попытке дождаться завершения запуска на эмуляторах, путем снижения строгости обнаружения кадров. ( Ibe2c6 , б/244594339 , б/228946895 )
Версия 1.2.0-альфа03
7 сентября 2022 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-alpha03 . Версия 1.2.0-alpha03 содержит эти коммиты.
Новые функции
- Добавлены экспериментальные API для независимого использования
BenchmarkState, отдельно отBenchmarkRule/JUnit4. ( Id478f , б/228489614 )
Исправления ошибок
- Добавлен резервный вариант Leanback для
startActivityAndWait. ( 01ed77 , б/242899915 )
Версия 1.2.0-альфа02
24 августа 2022 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-alpha02 . Версия 1.2.0-alpha02 содержит эти коммиты.
Изменения API
- По умолчанию для
MacrobenchmarkScope.killProcess()am force stop, даже при наличии root-прав, за исключением периода создания базового профиля. Это можно переопределить с помощью необязательного логического аргумента. ( 02cce9 , б/241214097 )
Исправления ошибок
- Поддержка создания базового профиля для системных приложений. ( I900b8 , б/241214097 )
- Поддержка проверки показателей мощности ODPM на нерутированных устройствах. ( а38с78 , б/229623230 )
Версия 1.2.0-альфа01
27 июля 2022 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-alpha01 . Версия 1.2.0-alpha01 содержит эти коммиты.
Новые функции
- Новый компонент tracing-perfetto-common, позволяющий включить трассировку Perfetto SDK в приложении, которое ее предоставляет ( I2cc7f ).
Added
androidx.benchmark.enabledRulesinstrumentation argument to enable filtering macrobenchmark runs to just benchmarks, or just baseline profile generation. Pass in 'Macrobenchmark', or 'BaselineProfile' to just run one type of test, eg when just generatingBaselineProfileson an emulator. Comma-separated list also Supported. ( I756b7 , b/230371561 )Eg in Your macrobenchmark's build.gradle:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile' } }Or from the Gradle command line:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
Изменения API
- Added new
PowerMetricfor measuring energy and power tasks in benchmarks. ( I9f39b , b/220183779 ) - Added a new compilation mode
CompilationMode.Ignoreto skip profile reset and compilation. ( Ibbcf8 , b/230453509 ) - Added a new parameter to
BaselineProfileRule#collectBaselineProfileto filter output file by package names ( If7338 , b/220146561 ) - Enables developer to discharge device to measure power drain. ( I6a6cb )
- Added the ability to clear shader cache in
MacrobenchmarkScope. ( I32122 ) - Enables developer to configure display of metric type and detail desired subsystem categories. ( I810c9 )
- Previously an
UnsupportedOperationExceptionwas thrown in the benchmark if run on an unsupported device. Now UOE only occurs if the metric is used on the unsupported device (ie:PowerMetric.configure). ( I5cf20 , b/227229375 ) - Added
TotalPowerMetricandTotalEnergyMetricfor measuring total power and energy in each system category in macrobenchmarks. ( I3b26b , b/224557371 )
Исправления ошибок
- Fixed an issue where compiled methods were not correctly being reset between each macrobenchmark on unrooted builds. This unfortunately requires reinstalling the apk each iteration, which will clear application data for each macrobenchmark. ( I31c74 , b/230665435 )
- Fix trace recording crash on API 21/22 ( If7fd6 , b/227509388 , b/227510293 , b/227512788 )
- Overhaul activity launch completion detection to fix 'Unable to read any metrics' exception in startup macrobenchmarks. ( Ia517c )
Версия 1.1.1
Версия 1.1.1
9 ноября 2022 г.
androidx.benchmark:benchmark-*:1.1.1 is released. Версия 1.1.1 содержит эти коммиты.
Исправления ошибок
- Fixes
android.system.ErrnoException: open failed: EACCESwhich would occur on some Android11 (API 30)+ devices. This is a cherry-pick of a fix from1.2.0-alpha01. ( aosp/2072249 )
Версия 1.1.0
Версия 1.1.0
15 июня 2022 г.
androidx.benchmark:benchmark-*:1.1.0 is released. Версия 1.1.0 содержит эти коммиты.
- This version is identical to
androidx.benchmark:benchmark-*:1.1.0-rc03.
Важные изменения с версии 1.0.0
Support for Jetpack Macrobenchmarks, which allows you to measure whole-app interactions like startup and scrolling , provides the ability to capture traces & measure trace sections .
Support for Baseline Profiles
-
CompilationMode.Partialto measure the effectiveness of Baseline Profiles. -
@BaselineProfileRuleto automatically generate Baseline profiles for a given critical user journey.
-
Support for Allocation metrics & profiling during Microbenchmark runs.
Version 1.1.0-rc03
1 июня 2022 г.
androidx.benchmark:benchmark-*:1.1.0-rc03 is released. Версия 1.1.0-rc03 содержит эти коммиты.
Исправления ошибок
Avoid reinstalling the target package on every benchmark iteration. ( aosp/2093027 , b/231976084 )
Remove the
300msdelay frompressHome(). ( aosp/2086030 , b/231322975 )Improve Macrobenchmark iteration speed by optimizing Shell commands used under the hood. ( aosp/2086023 , b/231323582 )
Support for Managed Gradle Devices when generating Baseline Profiles with Macrobenchmarks. ( aosp/2062228 , b/228926421 )
Version 1.1.0-rc02
11 мая 2022 г.
androidx.benchmark:benchmark-*:1.1.0-rc02 is released. Version 1.1.0-rc02 contains these commits.
- Note that this release includes a behavior change, as apps are now fully reinstalled in between each benchmark to ensure accurate measurements.
Bug Fixes/Behavior Changes
Fixed an issue where app compilation was not correctly reset between macrobenchmarks, and not reset at all on unrooted builds. This fixes many cases where running multiple tests would result in
CompilationModehaving little to no effect on measurements. To workaround this problem, the target app is now fully reinstalling each test method, which will clear application data between each macrobenchmark. ( I31c74 , b/230665435 )As this prevents apps from setting up state before tests, it is now possible to skip compilation / reinstallation to enable working around this. You can for example fully compile the target with a shell command
cmd package compile -f -m speed <package>, and then bypass macrobenchmark's compilation step.Eg in Your macrobenchmark's build.gradle:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.compilation.enabled, 'false' } }Or from the Gradle command line:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.compilation.enabled=falseMade it possible to share a module between macrobenchmarks and baseline profile generating tests by adding
androidx.benchmark.enabledRulesinstrumentation argument. Pass in 'Macrobenchmark', or 'BaselineProfile' to just run one type of test, eg when generatingBaselineProfileson an emulator. ( I756b7 , b/230371561 )Eg in Your macrobenchmark's build.gradle:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile' } }Or from the Gradle command line:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
Версия 1.1.0-rc01
20 апреля 2022 г.
androidx.benchmark:benchmark-*:1.1.0-rc01 is released. Версия 1.1.0-rc01 содержит эти коммиты.
Исправления ошибок
- Baseline profile output links in Android Studio now use a unique file name. This way the output always reflects the latest results of using a
BaselineProfileRule. ( aosp/2057008 , b/228203086 )
Version 1.1.0-beta06
6 апреля 2022 г.
androidx.benchmark:benchmark-*:1.1.0-beta06 is released. Version 1.1.0-beta06 contains these commits.
Исправления ошибок
- Fix trace recording crash on API 21/22 ( If7fd6 , b/227509388 )
- Overhaul activity launch completion detection to fix 'Unable to read any metrics' exception in startup macrobenchmarks. ( Ia517c )
- Fix startup metrics for Macrobenchmarks when
CompilationMode.None()is used. Before this change,CompilationMode.Partial()would appear to be slower thanCompilation.None(). ( 611ac9 ).
Version 1.1.0-beta05
23 марта 2022 г.
androidx.benchmark:benchmark-*:1.1.0-beta05 is released. Version 1.1.0-beta05 contains these commits.
Исправления ошибок
- Kill package after skipping profile installation when using
CompilationMode.None. ( aosp/1991373 ) - Fixed an issue where Macrobenchmarks is unable to collect startup metrics when using
StartupMode.COLD. ( aosp/2012227 b/218668335 )
Version 1.1.0-beta04
23 февраля 2022 г.
androidx.benchmark:benchmark-*:1.1.0-beta04 is released. Version 1.1.0-beta04 contains these commits.
Исправления ошибок
Fix missing metrics on Android 10, and
NoSuchElementExceptioncaused by process names not being captured correctly in traces. ( Ib4c17 , b/218668335 )Use
PowerManagerfor thermal throttling detection on Q (API 29) and higher. This significantly reduces frequency of false positives in thermal throttling detection (benchmark retry after 90 second cooldown), and speeds up benchmarks significantly on user builds. It also provides throttle detection even when clocks are locked (if they're locked too high for the device's physical environment). ( I9c027 , b/217497678 , b/131755853 )Filter simpleperf sampled profiling to
measureRepeatedthread only to simplify inspection ( Ic3e12 , b/217501939 )Support metrics from named UI subprocesses in multi-process apps ( Ice6c0 , b/215988434 )
Filter Baseline Profile rules to target Android 9 (SDK 28). aosp/1980331 b/216508418
Skip Profile Installation when using
Compilation.None(). Additionally, report warnings when the app is using an older version ofandroidx.profileinstallerand Android Gradle Plugin. aosp/1977029
Версия 1.1.0-beta03
9 февраля 2022 г.
androidx.benchmark:benchmark-*:1.1.0-beta03 is released. Версия 1.1.0-beta03 содержит эти коммиты.
Изменения API
- Added
AudioUnderrunMetricinto macrobenchmark library under experimental flag to allow detection of audio underruns ( Ib5972 ) BaselineProfileRuleno longer accepts asetupblock as this functioned the same as theprofileBlock. ( Ic7dfe , b/215536447 )Например
@Test fun collectBaselineProfile() { baselineRule.collectBaselineProfile( packageName = PACKAGE_NAME, setupBlock = { startActivityAndWait() }, profileBlock = { // ... } ) }@Test fun collectBaselineProfile() { baselineRule.collectBaselineProfile( packageName = PACKAGE_NAME, profileBlock = { startActivityAndWait() // ... } ) }
Исправления ошибок
- Fixed issue where microbench profiler traces would fail to be updated in subsequent runs when linked in Studio output ( I5ae4d , b/214917025 )
- Prevent compilation shell commands on API 23 ( Ice380 )
- Renamed
FrameCpuTime->FrameDurationCpu,FrameUiTime->FrameDurationUito clarify these are durations, not timestamps, and to match prefixes. ( I0eba3 , b/216337830 )
Версия 1.1.0-beta02
26 января 2022 г.
androidx.benchmark:benchmark-*:1.1.0-beta02 is released. Версия 1.1.0-beta02 содержит эти коммиты.
Исправления ошибок
- Microbenchmark Stack Sampling / Method Tracing Profile results are now linked in Studio output, similar to other profiling outputs, and do not suppress the allocation metric. ( Idcb65 , b/214440748 , b/214253245 )
- BaselineProfileRule now prints the
adb pullcommand in logcat and Studio output for pulling generated BaselineProfile text file. ( f08811 )
Версия 1.1.0-бета01
12 января 2022 г.
androidx.benchmark:benchmark-*:1.1.0-beta01 is released. Версия 1.1.0-beta01 содержит эти коммиты.
Исправления ошибок
- Fixes profiler argument enable being ignored. ( I37373 , b/210619998 )
- Removed deprecated
CompliationModes( I98186 , b/213467659 ) - Switched baseline profile arg of
CompilationMode.Partialto enum for clarity. ( Id67ea )
Version 1.1.0-alpha13
15 декабря 2021 г.
androidx.benchmark:benchmark-*:1.1.0-alpha13 is released. Version 1.1.0-alpha13 contains these commits.
Изменения API
- Add low-overhead System Tracing to microbench output on Android Q (API 29+). Note that this does not currently capture custom tracing (via
android.os.Traceorandroidx.tracingJetpack APIs) to avoid affecting results. This tracing should be useful in diagnosing instability, especially from sources outside the benchmark. ( I298be , b/205636583 , b/145598917 ) - Clarify
CompilationModesinto three classes - Full, None, Partial. Previously they were inconsistently named after compilation arguments (which we now treat as implementation details) and features. This makes the tradeoffs, potential combinations, and behavior across platform versions more clear. ( I3d7bf , b/207132597 ) - Setup and measure are now always in pairs, in order. You can now query the package name and iteration (though the iteration may be
nullin certain warmup scenarios). ( Id3b68 , b/208357448 , b/208369635 )
Исправления ошибок
- Fixed
CompilationMode.Speedincorrectly treated asNone( I01137 )
Версия 1.1.0-альфа12
17 ноября 2021 г.
androidx.benchmark:benchmark-*:1.1.0-alpha12 is released. Version 1.1.0-alpha12 contains these commits.
Новые функции
- Add experimental TraceSectionMetric for custom trace-based timing measurements. ( I99db1 , b/204572664 )
Исправления ошибок
- Wake device each iteration, to ensure UI can be tested - requires lockscreen is disabled. ( Ibfa28 , b/180963442 )
- Fixes multiple crashes in StackSampling profiling mode on emulators and non-rooted devices ( Icdbda , b/202719335 )
- Removed 0.5 second sleep at the end of each iteration - if you see missing metrics with this change, please file a bug. ( Iff6aa )
- Reduce chances of dropped data, and lower memory overhead from tracing ( Id2544 , b/199324831 , b/204448861 )
- Reduce trace size by ~40% by switching to compact sched storage format. ( Id5fb6 , b/199324831 )
- Updated implementations of startup metrics to always end at end of renderthread. This will be more contistent across platform versions, and more closely map to in-app measurements. ( Ic6b55 )
Версия 1.1.0-альфа11
3 ноября 2021 г.
androidx.benchmark:benchmark-*:1.1.0-alpha11 is released. Version 1.1.0-alpha11 contains these commits.
Изменения API
- Macrobenchmark now has a
minSdkVersionof23. ( If2655 ) - Adds a new experimental
BaselineProfileRulewhich is capable of generating baseline profiles for app's critical user journey. Detailed documentation to follow. ( Ibbefa , b/203692160 ) - Removes measureRepeated interface variant, which was added for java callers, as it caused ambiguity in completing/resolving the method. Java callers will again need to return Unit.Instance from measureRepeated. If this is an inconvenience, please file a bug, we can revisit this in a future version. ( Ifb23e , b/204331495 )
Версия 1.1.0-альфа10
27 октября 2021 г.
androidx.benchmark:benchmark-*:1.1.0-alpha10 is released. Version 1.1.0-alpha10 contains these commits.
Изменения API
- Backport StartupTimingMetric to work back to API 23. This new implementation also better handles reportFullyDrawn() to wait until corresponding content has been rendered. ( If3ac9 , b/183129298 )
- Added JvmOverloads to multiple MacrobenchmarkScope methods for Java callers. ( I644fe , b/184546459 )
- Provide alternative MacrobenchmarkRule.measureRepeated function that uses a
Consumer<MacrobenchmarkScope>for idiomatic usage in Java language. ( If74ab , b/184546459 )
Исправления ошибок
- Fix for traces not starting early enough, and missing metric data. This is expected to fix "Unable to read any metrics during benchmark" exceptions that were caused by the library itself. ( I6dfcb , b/193827052 , b/200302931 )
- FrameNegativeSlack has been renamed to FrameOverrun to clarify its meaning - how much the frame went over its time budget. ( I6c2aa , b/203008701 )
Версия 1.1.0-альфа09
13 октября 2021 г.
androidx.benchmark:benchmark-*:1.1.0-alpha09 is released. Version 1.1.0-alpha09 contains these commits.
Исправления ошибок
- Support dropping Kernel page cache without root on API 31/S+, which will increase accuracy of StartupMode.COLD launches. ( Iecfdb , b/200160030 )
Версия 1.1.0-альфа08
29 сентября 2021 г.
androidx.benchmark:benchmark-*:1.1.0-alpha08 is released. Version 1.1.0-alpha08 contains these commits.
Изменения API
- Enable scrolling macrobenchmarks to run back to API 23 ( If39c2 , b/183129298 )
- Add new type of sampled metric to UI and JSON output, focused on percentiles of multiple samples per iteration. ( I56247 , b/199940612 )
- Switch to floating point metrics throughout the benchmark libraries (truncated in the Studio UI). ( I69249 , b/197008210 )
Версия 1.1.0-альфа07
1 сентября 2021 г.
androidx.benchmark:benchmark-*:1.1.0-alpha07 is released. Version 1.1.0-alpha07 contains these commits.
Изменения API
- Raised min API to 21 to reflect the intended lowest API level to be supported in the future. Current min API supported continues to be conveyed via RequiredApi(), and is currently 29 ( I440d6 , b/183129298 )
Исправления ошибок
- Fixes
ProfileInstallerto make it easier for apps using baseline profiles to run MacroBenchmarks usingCompilationMode.BaselineProfile. ( I42657 , b/196074999 ) NOTE: requires also updating toandroidx.profileinstaller:profileinstaller:1.1.0-alpha04or greater. -
StartupMode.COLD+CompilationMode.Nonebenchmarks are now more stable. ( I770cd , b/196074999 )
Версия 1.1.0-альфа06
18 августа 2021 г.
androidx.benchmark:benchmark-*:1.1.0-alpha06 is released. Версия 1.1.0-alpha06 содержит эти коммиты.
Изменения API
- Added
androidx.benchmark.iterationsinstrumentation argument to allow manual overriding of iteration count when testing/profiling locally. ( 6188be , b/194137879 )
Исправления ошибок
- Switched to Simpleperf as default sampling profiler on API 29+. ( Ic4b34 , b/158303822 )
Известные проблемы
-
CompilationMode.BaselineProfileis a work in progress. Avoid using it to determine how good a profile is for now.
Версия 1.1.0-альфа05
4 августа 2021 г.
androidx.benchmark:benchmark-*:1.1.0-alpha05 is released. Версия 1.1.0-alpha05 содержит эти коммиты.
1.1.0-alpha04 was cancelled before release due to a sporatic crash. b/193827052
Изменения API
- Switched startActivityAndWait to invoke launch via
am start, which reduces the time of each measurement iteration by approximately 5 seconds, at the cost of no longer supporting intent parcelables. ( I5a6f5 , b/192009149
Исправления ошибок
- Reduce aggressiveness of thermal throttle detection, and recompute baseline if throttles are detected frequently. ( I7327b )
- Fixes FrameTimingMetric to work on Android S beta ( Ib60cc , b/193260119 )
- Use an
EmptyActivityto bring the target app out of a force-stopped state to better supportCompilationMode.BaselineProfile. ( Id7cac , b/192084204 ) - Changed trace file extension to
.perfetto-traceto match platform standard. ( I4c236 , b/174663039 ) - StartupTimingMetric now outputs the "fullyDrawnMs" metric to measure time until your application has completed rendering. To define this metric for your app, call Activity.reportFullyDrawn when your initial content is ready, such as when your initial list items are loaded from DB or network. (reportFullyDrawn method available without build version checks on ComponentActivity). Note that your test must run long enough to capture the metric (startActivityAndWait doesn't wait for reportFullyDrawn). ( If1141 , b/179176560 )
- Reduce cost of appending Ui metadata to traces by 50+ ms ( Ic8390 , b/193923003 )
- Drastically increased polling frequency when stopping tracing, which can reduce eg startup benchmark runtime by 30+% ( Idfbc1 , b/193723768 )
Версия 1.1.0-альфа03
16 июня 2021 г.
androidx.benchmark:benchmark-*:1.1.0-alpha03 is released. Версия 1.1.0-alpha03 содержит эти коммиты.
Новые функции
- Added a new
CompilationMode.BaselineProfileto support profiles installed using the Jetpack ProfileInstaller library . ( aosp/1720930 )
Исправления ошибок
The sample Gradle code for suppressing benchmark errors has been updated to use a non-deprecated API with a syntax that also supports .gradle.kts users.
Например,
testInstrumentationRunnerArguments["androidx.benchmark.suppressErrors"] = "EMULATOR,LOW-BATTERY"
Версия 1.1.0-альфа02
18 мая 2021 г.
Benchmark version 1.1.0-alpha02 brings a big component to benchmarking - Macrobenchmark. In addition to benchmark allowing you to measure CPU loops, macrobenchmark allows you to measure whole-app interactions like startup and scrolling, and capture traces. For more information see the library documentation .
androidx.benchmark:benchmark-*:1.1.0-alpha02 is released. Версия 1.1.0-alpha02 содержит эти коммиты.
Новые функции
Macrobenchmark artifacts added ( androidx.benchmark:benchmark-macro-junit4 and androidx.benchmark:benchmark-macro )
- Capture startup, scrolling/animation performance metrics from your app, locally or in CI
- Capture and inspect traces from within Android Studio
Исправления ошибок
- Workaround shell permissions issue with output directory on Android 12 (Note - may require updating Android Gradle Plugin to 7.0.0 canary and Android Studio to Arctic Fox (2020.3.1), to continue capturing output files on affected devices). ( Icb039 )
- Support configuration caching in BenchmarkPlugin ( 6be1c1 , b/159804788 )
- Simplified file output - on by default, in a directory that doesn't require
requestLegacyExternalStorage=true( 8b5a4d , b/172376362 ) - Fixes library printing logcat warnings about not finding JIT thread on platform versions where it is not present. ( I9cc63 , b/161847393 )
- Fix for reading device max frequency. ( I55c7a )
Версия 1.1.0-альфа01
10 июня 2020 г.
androidx.benchmark:benchmark-common:1.1.0-alpha01 , androidx.benchmark:benchmark-gradle-plugin:1.1.0-alpha01 , and androidx.benchmark:benchmark-junit4:1.1.0-alpha01 are released. Версия 1.1.0-alpha01 содержит эти коммиты.
New Features of 1.1
- Allocation Metric - Benchmarks now run an additional phase after warmup and timing, capturing allocation counts. Allocations can cause performance problems on older versions of the platform (140ns in O became 8ns in M - measured on Nexus5X, with locked clocks). This metric is displayed in Android Studio console output, as well as in the
- Profiling support - You can now capture profiling data for a benchmark run, to inspect why your code may be running slowly. Benchmark supports capturing either method tracing, or method sampling from ART. These files can be inspected with the Profiler inside Android Studio using File > Open .
- The Benchmark Gradle plugin now provides defaults for simpler setup:
-
testBuildTypeis set to release by default, to avoid using dependencies with code coverage built-in. The release buildType is also configured as the default buildType, which allows Android Studio to automatically select the correct build variant when opening a project for the first time. ( b/138808399 ) -
signingConfig.debugis used as the default signing config ( b/153583269 )
-
** Bug Fixes **
- Significantly reduced the warmup transition overhead, where the first measurement for each benchmark was artificially higher than others. This issue was more pronounced in very small benchmarks (1 microsecond or less). ( b/142058671 )
- Fixed
InstrumentationResultParsererror printed for each benchmark when running from command line. ( I64988 , b/154248456 )
Известные проблемы
- Command line, gradle invocations of Benchmark do not print out results directly. You can work around this by either running through Studio, or parsing the JSON output file for results.
- Benchmark reporting fails to pull the report from devices that have an app installed with an applicationId ending with either “android” or “download” (case insensitive). Users hitting this issue should upgrade the Android Gradle Plugin to 4.2-alpha01 or later.
Версия 1.0.0
Benchmark Version 1.0.0
20 ноября 2019 г.
androidx.benchmark:benchmark-common:1.0.0 , androidx.benchmark:benchmark-gradle-plugin:1.0.0 , and androidx.benchmark:benchmark-junit4:1.0.0 are released with no changes from 1.0.0-rc01. Version 1.0.0 contains these commits .
Основные особенности версии 1.0.0
The Benchmark library allows you to write performance benchmarks of app code and get results quickly.
It prevents build and runtime configuration issues and stabilizes device performance to ensure that measurements are accurate and consistent. Run the benchmarks directly in Android Studio , or in Continuous Integration to observe code performance over time, and to prevent regressions.
Основные особенности включают в себя:
- Clock stabilization
- Automatic thread prioritization
- Support for UI performance testing, such as in the RecyclerView Sample
- JIT-aware warmup and looping
- JSON benchmark output for post-processing
Версия 1.0.0-rc01
23 октября 2019 г.
androidx.benchmark:benchmark-common:1.0.0-rc01 , androidx.benchmark:benchmark-gradle-plugin:1.0.0-rc01 , and androidx.benchmark:benchmark-junit4:1.0.0-rc01 are released. Version 1.0.0-rc01 contains these commits .
Новые функции
- Added systrace tracing to benchmarks
Исправления ошибок
- Fixed metric instability issue where JIT wouldn't finish before warm up due to deprioritization ( b/140773023 )
- Unified JSON output directory across Android Gradle Plugin 3.5 and 3.6
Версия 1.0.0-бета01
9 октября 2019 г.
androidx.benchmark:benchmark-common:1.0.0-beta01 , androidx.benchmark:benchmark-gradle-plugin:1.0.0-beta01 , and androidx.benchmark:benchmark-junit4:1.0.0-beta01 are released. Version 1.0.0-beta01 contains these commits .
Новые функции
- Run garbage collection before each warmup to reduce memory pressure from one benchmark to leak to the next ( b/140895105 )
Исправления ошибок
- Added
androidx.annotation:android-experimental-lintdependency, so that Java code will correctly produce lint errors when experimental API is not used, similar to what is provided by the Kotlin experimental annotation for Kotlin callers. - Now correctly detects usage of
additionalTestOutputDirinstrumentation argument for output in Android Gradle Plugin 3.6, to know when AGP will handle data copy. - Fix undetected clock frequency in JSON to correctly print
-1( b/141945670 ).
Версия 1.0.0-альфа06
18 сентября 2019 г.
androidx.benchmark:benchmark-common:1.0.0-alpha06 , androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha06 , and androidx.benchmark:benchmark-junit4:1.0.0-alpha06 are released. Version 1.0.0-alpha06 contains these commits .
Новые функции
- Added a check for incorrectly using the old package for the test runner, which now provides a more-helpful error message
Изменения API
- The experimental annotation
ExperimentalAnnotationReportis now correctly public. Usage of the experimental BenchmarkState#report API now requires this annotation
Версия 1.0.0-альфа05
5 сентября 2019 г.
androidx.benchmark:benchmark-common:1.0.0-alpha05 , androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05 , and androidx.benchmark:benchmark-junit4:1.0.0-alpha05 are released. The commits included in this version can be found here .
Изменения API
-
BenchmarkState.reportDataAPI is now marked experimental
Исправления ошибок
- Fix for the clock-locking script, which would fail on devices that were either missing the
cutorexprshell utilities. - Fixed an issue with
./gradlew lockClockstask that would hang on devices that were rooted with an older version of the su utility, which did not support the-cflag.
Версия 1.0.0-альфа04
7 августа 2019 г.
androidx.benchmark:benchmark-common:1.0.0-alpha04 , androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04 , and androidx.benchmark:benchmark-junit4:1.0.0-alpha04 are released. The commits included in this version can be found here .
New documentation has also been added for how to use the Benchmark library without Gradle, both for usage with different build systems (such as Bazel or Buck), and when running in CI. For more information, see Build benchmarks without Gradle and Run benchmarks in Continuous Integration .
Новые функции
- плагин Gradle
- Now automatically disables test coverage, and sets the
AndroidBenchmarkRunnerby default ( b/138374050 ) - Added support for new AGP-based data copy, when running benchmarks and when using AGP 3.6+
- Now automatically disables test coverage, and sets the
- JSON format additions
- Output total benchmark test run time ( b/133147694 )
-
@Parameterizedbenchmarks that use a name string (for example@Parameters(name = "size={0},depth={1}")) now output parameter names and values per benchmark in the JSON output ( b/132578772 )
- Dry Run mode ( b/138785848 )
- Added a "dry run" mode for running each benchmark loop only once, to check for errors/crashes without capturing measurements. This can be useful eg for, for example, quickly running benchmarks in presubmit to check that they're not broken.
Изменения API
- Module structure has changed, splitting the library ( b/138451391 )
-
benchmark:benchmark-junit4contains classes with JUnit dependency:AndroidBenchmarkRunner, andBenchmarkRule, both of which have moved into theandroidx.benchmark.junit4package -
benchmark:benchmark-commoncontains the rest of the logic, including the BenchmarkState API - This split will allow the library to support benchmarking without JUnit4 APIs in the future
-
- Configuration warnings are now treated as errors, and will crash the test ( b/137653596 )
- This is done to further encourage accurate measurements, especially in CI
- These errors can be reduced back to warnings with an instrumentation argument. For example:
-e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"
Исправления ошибок
- Errors when writing to external storage on Q devices provide more-descriptive messages, with suggestions of how to resolve the issue
- Screens are automatically turned on during benchmark runs, instead of failing when the screen is off
Внешние взносы
- Thanks to Sergey Zakharov for contributing JSON output improvements and the fix for screen off issues!
Версия 1.0.0-альфа03
2 июля 2019 г.
androidx.benchmark:benchmark:1.0.0-alpha03 and androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha03 are released. The commits included in this version can be found here .
Новые функции
- Expose sleep duration due to thermal throttling per benchmark in the full JSON report
Исправления ошибок
- The Gradle plugin should no longer be required to be applied after Android plugins and the Android block
- Adds support for benchmark reports on Android 10 devices using scoped storage
Версия 1.0.0-альфа02
6 июня 2019 г.
androidx.benchmark:1.0.0-alpha02 and androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02 are released. The commits included in this version can be found here .
Note that we are treating the JSON schema as an API. We plan to follow the same stability constraints as other APIs: stable (with very rare exceptions) once in beta, and fixed in final release, with only additions in minor releases and changes/removals in major releases.
Изменения API
Overhauled JSON schema. Further changes to the JSON schema are likely to be limited to additions:
- Reorganized the result object structure to support additional metric groups in the future ( b/132713021 )
- Added test run context information, such as device and build info and whether clocks are locked, to the top-level object ( b/132711920 )
- Time metric names now have 'ns' in their name ( b/132714527 )
- Additional stats added per reported metric (maximum, median, minimum), and removed simplified 'nanos' summary stat ( b/132713851 )
Removed XML output ( b/132714414 )
Thermal throttle detection removed from
BenchmarkState.reportDataAPI ( b/132887006 )
Исправления ошибок
- Fixed
./gradlew lockClocksnot sticking on some recent OS devices ( b/133424037 ) - Throttling detection disabled for emulator ( b/132880807 )
Версия 1.0.0-альфа01
7 мая 2019 г.
androidx.benchmark:benchmark:1.0.0-alpha01 is released. The commits included in this version are available here .