Контрольный показатель
Последнее обновление | Стабильный выпуск | Кандидат на выпуск | Бета-версия | Альфа-релиз |
---|---|---|---|---|
26 марта 2025 г. | 1.3.4 | - | - | 1.4.0-альфа10 |
Объявление зависимостей
Чтобы добавить зависимость от Benchmark, вам необходимо добавить в свой проект репозиторий Google Maven. Для получения дополнительной информации прочтите репозиторий Google Maven .
Макробенчмарк
Чтобы использовать Macrobenchmark в своем проекте, добавьте следующие зависимости в файл build.gradle
для вашего модуля макробенчмарка :
классный
dependencies { androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.3.4" }
Котлин
dependencies { androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.3.4") }
Микробенчмарк
Чтобы использовать Microbenchmark в своем проекте, добавьте следующие зависимости в файл build.gradle
для вашего модуля microbenchmark :
классный
dependencies { androidTestImplementation "androidx.benchmark:benchmark-junit4:1.3.4" } android { ... defaultConfig { ... testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Котлин
dependencies { androidTestImplementation("androidx.benchmark:benchmark-junit4:1.3.4") } android { ... defaultConfig { ... testInstrumentationRunner = "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Библиотека Microbenchmark также предоставляет плагин Gradle для использования с вашим модулем microbenchmark. Этот плагин устанавливает настройки конфигурации сборки по умолчанию для модуля, настраивает копию выходных данных теста на хост и предоставляет задачу ./gradlew lockClocks
.
Чтобы использовать плагин, включите следующую строку в блок `plugins` вашего файла build.gradle
верхнего уровня:
классный
plugins { id 'androidx.benchmark' version '1.3.4' apply false }
Котлин
plugins { id("androidx.benchmark") version "1.3.4" apply false }
Затем примените плагин к файлу build.gradle
вашего тестового модуля.
классный
plugins { id 'androidx.benchmark' }
Котлин
plugins { id("androidx.benchmark") }
Обратная связь
Ваши отзывы помогают сделать Jetpack лучше. Дайте нам знать, если вы обнаружите новые проблемы или у вас есть идеи по улучшению этой библиотеки. Пожалуйста, ознакомьтесь с существующими проблемами в этой библиотеке, прежде чем создавать новую. Вы можете добавить свой голос к существующей проблеме, нажав кнопку со звездочкой.
Дополнительную информацию см. в документации по системе отслеживания проблем .
Версия 1.4
Версия 1.4.0-альфа10
26 марта 2025 г.
Выпущен androidx.benchmark:benchmark-*:1.4.0-alpha10
. Версия 1.4.0-alpha10 содержит эти коммиты .
Изменения API
- Увеличено время ожидания по умолчанию для загрузки и выполнения запросов сервера
TraceProcessor
до 120 секунд (с 60/30 ранее), а также сделано возможность настройки обоих параметров с помощью одного параметра времени ожидания. ( Ифек87 )
Исправления ошибок
- Исправлено несколько проблем, возникавших при тестировании или захвате профилей приложения без
profileinstaller
, включаяBroadcastReciever
. Это влияет только на запуск на корневых устройствах. ( Ied308 )
Версия 1.4.0-альфа09
12 марта 2025 г.
Выпущен androidx.benchmark:benchmark-*:1.4.0-alpha09
. Версия 1.4.0-alpha09 содержит эти коммиты .
Изменения API
- Добавлен
TraceProcessor
и Session API с закрывающимися дескрипторами для упрощения использования с настраиваемыми жизненными циклами. Это также шаг к упрощению использования Coroutine и Java API. Функции расширенияTraceProcessor.runServer {}
теперь помечены как экспериментальные, поскольку они, скорее всего, будут перемещены и в будущем станут неэкспериментальными. ( I358b4 )
Исправления ошибок
- Исправлена ошибка, из-за которой захват контрольного и базового профиля не работал с API 36 из-за изменения в
pgrep
toybox, который теперь требует-a
для печати полной командной строки. ( Idc991 ) - Отфильтруйте конфигурацию трассировки по умолчанию, чтобы снизить риск потери данных в трассировках на новых уровнях API. ( I54e8a )
- Добавлен экспериментальный аргумент инструментария
androidx.benchmark.killExistingPerfettoRecordings
, для которого можно установить значениеfalse
, чтобы разрешить продолжение захвата ранее существующей трассировки perfetto. По умолчанию существующие записи трассировки perfetto на устройстве уничтожаются во избежание помех. ( I02a3c ) - Поле JSON
context.osCodenameAbbreviated
теперь будет иметьREL
для выпущенных версий ОС с API 35 и выше, поскольку нечисловые кодовые имена больше не поддерживаются базовой платформой. ( Ib17fd ) - Исправлен сбой в
FrameTimingMetric
при повторной синхронизации кадров. ( I7c6f4 , б/394610806 ) - Больше не предполагайте, что
Choreographer#doFrame
является вершиной кадра стека в основном потоке дляFrameTimingQuery
. ( Iee0e0 , б/340206285 )
Версия 1.4.0-альфа08
12 февраля 2025 г.
Выпущен androidx.benchmark:benchmark-*:1.4.0-alpha08
. Версия 1.4.0-alpha08 содержит эти коммиты .
Изменения API
- API-интерфейсы расширения
TraceProcessor.runSession()
перенесены в экспериментальный режим, поскольку в конечном итоге они, скорее всего, станут конкретными конструкторами на Android. ( Ib0528 , б/393640753 ) - Большая часть реализации Startup Insights теперь общедоступна/экспериментальна и перенесена в артефакт
TraceProcessor
. См.StartupInsights
. ( I0aa00 ) - Устаревший
BenchmarkRule.runWithTimingDisabled {}
в пользуBenchmarkRule.runWithMeasurementDisabled {}
, который более четко описывает поведение — все метрики приостанавливаются. Кроме того, откройте суперклассMicrobenchmarkScope
, поскольку переобъявление функцииrunWithMeasurementDisabled
для открытого доступа невозможно, поскольку она встроена. ( I9e23b , б / 389149423 , б / 149979716 ) - Библиотеки тестов производительности перешли на Kotlin 2.0. ( I9d1e0 )
- Удален аргумент инструментария
androidx.benchmark.startupProfiles.enable
. Он больше не полезен, так как им можно управлять с помощью аргументаincludeInStartupProfile
вBaselineProfileRule.collect()
. ( I39eb4 )
Исправления ошибок
- Уменьшено количество внутренних функций Microbenchmark, вызываемых во время профилирования, чтобы сделать, например, трассировку метода более четкой ( Ifaed8 ).
- Спекулятивное исправление сбоев: «Не удалось остановить [
ProcessPid(processName=perfetto, pid=...)
]». Теперь Benchmark будет регистрировать сообщение, а не аварийно завершать работу, если фоновый процесс Perfetto не может быть остановлен перед запуском теста. ( I37d3e , б/323601788 ) - Исправлены исключения
IllegalStateExceptions
с меткой «Ожидаемый стандартный выводpm 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 во время тестов. ( Идбек , б/353226476 )
Изменения API
- Добавлен
@JvmOverloads
в конструкторMicrobenchmarkConfig
. ( I13fd3 ) - Переработано правило
BenchmarkRule
, которое будет построено поверх сопрограмм и будет поддерживать лучшее поведениеyield()
. В ходе этого рефакторинга было удалено несколько экспериментальных APIBenchmarkState
, но при необходимости последуют замены. Кроме того, для пояснения поведения добавленrunWithMeasurementDisabled
(все измерения приостанавливаются). В будущемrunWithTimingDisabled
станет устаревшим. ( I19837 , б/389149423 , б/311242861 ) - Переместите
PerfettoTraceProcessor
вTraceProcessor
в новом артефактеandroidx.benchmark:benchmark-traceprocessor
и сделайте большую часть его API неэкспериментальным. Любой пользовательскийTraceMetric
или что-либо, читающее трассировки, необходимо будет обновить до нового импортаTraceProcessor
. Новый APITraceProcessor
работает точно так же, как старый, но представляет собой отдельную библиотеку интерфейса (несколько аналогичную слоюandroidx.sqlite
из Room) со специфичной для Android реализацией, встроенной в макротест. Новый артефакт также можно использовать в JVM, но сейчас вам необходимо запустить собственную копию двоичного файлаTraceProcessor
и предложить порт для подключения к нему. ( I3a767 , I62563 , б/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 , б/377733398 )
Исправления ошибок
- Эта библиотека теперь использует аннотации NULL NULL JSpecify , которые являются типизированными. Разработчики Kotlin должны использовать следующие аргументы компилятора для обеспечения правильного использования:
-Xjspecify-annotations=strict
,-Xtype-enhancement-improvements-strict-mode
( I46810 , b/326456246 ). - Исправлен
ArtMetric
для отчета о загрузке классов (не инициализации) и улучшена документация для пояснения поведения во время выполнения. ( I9915c ) - В многопользовательском режиме Android выполняйте команды от имени пользователя 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. Теперь макросбенчмарк решает эту проблему, ища во всех встроенных запросах усеченное имя пакета в дополнение к ожидаемому имени пакета. Обратите внимание, что пользовательские реализации
TraceMetric
или другие прямые вызовыPerfettoSession.query
могут реализовать то же самое поведение, изменивprocess.name LIKE "$packageName"
в запросе Perfetto на(process.name LIKE "$packageName" OR process.name LIKE "$(packageName.takeLast(15))")
. ( I5bf01 , б/377565760 )
Версия 1.4.0-альфа04
30 октября 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.4.0-alpha04
. Версия 1.4.0-alpha04 содержит эти коммиты .
Новые возможности
- (Экспериментальный вариант) Включите создание базового профиля и сравнительный анализ приложений, установленных дополнительным пользователем, например любого приложения на автономных устройствах Android Auto. Эта поддержка была протестирована в некоторых сценариях, но если она у вас не работает, сообщите нам об ошибке. ( I9fcbe , б/356684617 , б/373641155 )
Исправления ошибок
-
isProfileable
теперь всегда переопределяется в тестовых сборках, аisDebuggable
теперь всегда переопределяется как в тестовых, так и вnonMinified
сборках (захват базового профиля). ( I487fa , б/369213505 ) - Исправляет обнаружение компиляции на некоторых физических устройствах до API 28 - влияет на json
context.compilationMode
, а также на поведениеandroidx.benchmark.requireAot=true
(который больше не выдает некорректно) ( Ic3e08 , b/374362482 ) - В метриках
CpuEventCounter
выдать исключение, если наблюдаются недопустимые измерения (например, инструкции/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 по умолчанию. ( I930f7 ) - Добавьте
coefficientOfVariation
в выходные данные Benchmark JSON, чтобы продемонстрировать стабильность в рамках данного теста. ( Ib14ea )
Исправления ошибок
- Исправлена задача
CollectBaselineProfileTask
, когда в устройстве AVD есть пробелы. ( Ia0225 , б/371642809 ) - Спекулятивное исправление ошибок из исключений
StartupMode.COLD
:Package <packagename> must not be running prior to cold start!
. ТеперьMacrobenchmarkScope.killProcess()
(включая тот, который запускается перед каждой итерацией и используется для реализации поведенияStartupMode.COLD
) будет ждать, чтобы убедиться, что все процессы приложения остановились. ( I60aa6 , б/351582215 ) - Исправлена ошибка, из-за которой ошибка UNLOCKED_ появлялась на некоторых корневых эмуляторах. ( Ic5117 )
- Эта библиотека теперь использует аннотации NULL JSpecify , которые являются типизированными. Разработчики Kotlin должны использовать следующие аргументы компилятора для обеспечения правильного использования:
-Xjspecify-annotations=strict
,-Xtype-enhancement-improvements-strict-mode
( 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 , б/363325823 )
Исправления ошибок
-
BaselineProfileRule
теперь собирает профили для многопроцессных приложений, сигнализируя каждому запущенному процессу в конце блока о необходимости создания дампа профилей. Если компиляция на основе профиля никогда не находит процесс для трансляции, компиляция завершится неудачно, поскольку в нем неожиданно присутствуют данные профиля. Кроме того, добавлен аргумент инструмента для управления продолжительностью ожидания дампа:androidx.benchmark.saveProfileWaitMillis
( I0f519 , b/366231469 ). - Из Benchmark
1.3.2
: Исправлена ошибка, из-за которой Firebase Test Lab (FTL) не могла извлечь файлы результатов базового профиля или макротеста из плагина Gradle базового профиля. ( I2f678 , б / 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
для подавления всех предупреждений базового профиля. ( 314153а ) - Метрики Microbench теперь отображаются в кривых Perfetto в виде счетчиков. ( 3214854 )
- Добавьте экспериментальные сценарии для отключения jit (требуется root/перезапуск во время выполнения) и сброса состояния производительности/тестирования устройства. В настоящее время они не публикуются как задачи Gradle. ( 7c3732b )
- Добавлен аргумент теста для пропуска тестов при работе на эмуляторе. Если включена
automaticGenerationDuring
сборкаGenerationDuring, тесты также запускают создание базового профиля. Это не удастся, если используются эмуляторы. С новым аргументомskipBenchmarksOnEmulator
мы можем пропустить тест. ( 0c2ddcd ) - Изменение логики события perf для запуска на API 23+ ( 2550048 )
Изменения API
- Существующий экспериментальный аргумент
PerfettoConfig
дляMacrobenchmarkRule.measureRepeated()
перемещен в новый объектExperimentalConfig
.
Исправления ошибок
- Увеличьте количество повторов
lockClocks.sh
( 99e9dac ). - Не создавайте
nonMinified
и тестовые типы сборок, если они существуют. Из-за ошибки, даже если существовалиnonMinified
и эталонные типы сборок, они должны были быть воссозданы. ( е75f0a5 ) - Игнорировать непрерывные фрагменты результатов
TraceSectionMetric
. ( а927d20 ) - Улучшена проверка эмулятора с учетом префикса
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 в плагине Benchmark Baseline Gradle. ( б/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) не могла извлечь файлы результатов базового профиля или макробенчмарка из плагина Gradle базового профиля. ( I2f678 , б / 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…
если они созданы приложением, вместо создания оболочек. ( Я8934 , б/361370179 ) - Исправлена
java.lang.AssertionError: ERRORS (not suppressed): EMULATOR
, когда на эмуляторах включеноautomaticGenerationDuringBuild
. Вместо этого используется новый аргумент, чтобы пропустить тест. ( If3f51 , б/355515798 ) - Минимизация микробенчмарка — сохраните подклассы
org.junit.runner.notification.RunListener
в библиотеке тестов proguard ( Ic8ed5 , b/354264743 ). - Исправьте
TraceSectionMetric
для игнорирования незавершенных фрагментов. Раньше считалось, что они имеют продолжительность -1, например, при суммировании или поиске минимальной продолжительности. ( Если74b7 ) - Исправлена проблема в
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 для улучшения микробенчмаркинга с включенной минификацией.
- Минимизация/R8 в библиотечном модуле требует AGP 8.3 и может быть включена через
android.buildTypes.release.androidTest.enableMinification
в вашемbuild.gradle
- Добавлен экспериментальный API
BlackHole.consume()
для предотвращения устранения неработающего кода ( If6812 , b/286091643 )
- Метрики
- Экспериментальная функция счетчика событий процессора (метрики из
perf_event_open
, для которой требуется root на большинстве версий платформы), доступ черезInstrumentationArgument
androidx.benchmark.cpuEventCounter.enable
(можно установить вtrue
), аandroidx.benchmark.cpuEventCounter.events
можно установить, например, в (Instructions,CpuCycles
). Это должно поддерживаться в некоторых эмуляторах пользовательской отладки, но поддержка не тестировалась на всех доступных эмуляторах.
- Экспериментальная функция счетчика событий процессора (метрики из
Изменения в MACRObenchmark с версии 1.2.0
- Переработка метода трассировки макротестов.
- Теперь трассировки метода ограничены длительностью
measureBlock
и могут захватывать несколько сеансов, если процесс запускается несколько раз. - Раньше трассировка метода работала только для тестов
StartupMode.COLD
и ничего не фиксировала дляmeasureBlocks
, которые не перезапустили целевой процесс. - Исправлена очистка трассировок методов в макробенчмарке, поэтому трассировки методов должны быть полностью записаны и действительны даже на более медленных устройствах. ( I6349a , б/329904950 )
- Теперь трассировки метода ограничены длительностью
- Корректно выгружать профиль ART во время отдельных итераций
warmUp
, когда процесс завершается, чтобы измеренияCompilationMode.Partial(warmup=N)
были более точными. ( I17923 ) - Сообщение об ошибке трансляции Drop Shader
- Добавлены предложения по отладке для удаления сообщения об ошибке трансляции шейдера.
- Добавьте два аргумента инструментария для переопределения поведения отбрасывания шейдера для обхода сбоев при тестировании приложений без
ProfileInstaller
1.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 , б/309841164 , б/304038384 ) - Отмените фоновые задания dexopt перед запуском Macrobenchmark, чтобы уменьшить помехи. ( I989ed )
- Macrobenchmark теперь ожидает 1 секунду, пока целевое приложение сбросит профиль ART (ранее оно ждало 500 мс). ( И85а50 , б/316082056 )
- TraceSectionMetric капитальный ремонт
- Примечание . Изменения
TraceSectionMetric
, приведенные ниже, могут повлиять на выходные данные при использовании CI и могут привести к разрывам или нарушению синтаксического анализа. - Сумма теперь используется по умолчанию, поскольку эта метрика чаще всего используется для повторяющихся событий, и в этих случаях сначала данные отбрасываются.
- Изменено, чтобы сделать его более настраиваемым, с большим количеством доступных режимов.
- Имена режимов теперь встроены в имя выходного показателя метрики (в Studio и JSON).
- Теперь поддерживает фрагменты, созданные с помощью
Trace.{begin|end}AsyncSection
.
- Примечание . Изменения
- Метрики
- Питание — добавлены
PowerMetric.deviceSupportsHighPrecisionTracking
,PowerMetric.deviceBatteryHasMinimumCharge()
иPowerMetric.deviceSupportsPowerEnergy()
-
Metric.getResult
переименован вgetMeasurements
в соответствии с типом возвращаемого значения. - Добавлены метки log.w/Exception для всех ошибок обнаружения запуска. Это не меняет текущего поведения (поэтому некоторые ошибки выдаются, а другие молча не обнаруживают запуск), просто делает его более понятным. Обычно те, которые
Log.w()
не сообщают о показателях запуска, — это те, в которых отсутствуют события, не связанные с кадрами, исключения выдаются при обнаружении запуска, за исключением информации о синхронизации кадра (из срезов UI/RT). ( Id240f , б/329145809 ) - В
FrameTimingMetric
добавленоframeCount
, чтобы помочь обнаружить сценарии, в которых измерения изменяются из-за изменения количества созданных кадров (добавлены новые анимации, исправлены проблемы с недействительностью). ( I1e5aa ) - Уточнено, что
frameOverrunMs
является предпочтительной метрикой для отслеживания, когда она доступна в документах, и почему. ( I18749 , б/329478323 ) - Устранена проблема, из-за которой незавершенные кадры в начале и конце трассировки могли быть объединены в пары, что ошибочно регистрировалось как один очень длинный кадр. ( I39353 , б/322232828 )
- Устраните ошибку
FrameTimingMetric
, когда кадры не создаются, и всегда выводите ссылку для отслеживания в случае сбоя анализа метрики, чтобы помочь в диагностике проблемы. ( I956b9 ) - Исправлен сбой в
FrameTimingMetric
, из-за которого не удавалось проанализировать идентификатор кадра, особенно на некоторых OEM-устройствах. ( Ia24bc , б/303823815 , б/306235276 ) - Ослаблена строгость проверок в
FrameMetrics
и добавлена более подробная информация о сообщениях об ошибках. ( Иадеде )
- Питание — добавлены
Захват базового профиля / изменения плагина Gradle с версии 1.2.0
- Максимальная рекомендуемая версия AGP увеличена до 9.0.0-alpha01.
- Убедитесь, что задачи
mergeArtProfile
иmergeStartupProfile
всегда ожидают создания базового профиля. ( I623d6 , б/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 , б/313992099 )
- Исправлен исходный URL-адрес базового и стартового профиля в конце задачи генерации. ( I802e5 , б/313976958 )
Другие существенные изменения с версии 1.2.0
- Захват трассировки
- Уменьшена ошибка EXITCODE 2 при запуске perfetto с ошибки на зарегистрированное предупреждение.
- Включить трассировку AIDL по умолчанию в тестах (требуется API 28) ( Ia0af2 , b/341852305 )
- Включите трассировку тегов портера по умолчанию в тестах. Это фиксирует, например, точки трассировки блокировки. ( Icfe44 , р/286551983 )
- Увеличено время ожидания начала захвата трассировки, чтобы избежать сбоев при запуске трассировки на более медленных устройствах ( I98841 , b/329145808 ).
- Добавлены общедоступные API
PerfettoTraceProcessor.Session.queryMetrics
с вариантами JSON, textproto и proto двоичными (некодированными). Они позволяют запрашивать метрики, встроенные в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, Method) ( I05ddd , b/332604449 ). - Добавлено предупреждение при использовании Android Test Orchestrator в модулях тестирования, так как это приведет к многократной перезаписи выходных файлов JSON для каждого модуля. ( Ia1af6 , б/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 , б/286306579 , б/307445225 ) - Уменьшена вероятность того, что выборка стека приведет к тому, что
measureRepeatedOnMainThread
достигнет жесткого тайм-аута основного потока, за счет перемещения преобразования выборки стека за пределы основного потока. ( I487a8 , б/342237318 ) - Убрано ручное определение доступа к API новой платформы, поскольку это происходит автоматически посредством моделирования API при использовании R8 с AGP 7.3 или новее (например, R8 версии 3.3) и для всех сборок при использовании AGP 8.1 или новее (например, D8 версии 8.1). Клиентам, не использующим AGP, рекомендуется выполнить обновление до D8 версии 8.1 или более поздней. Более подробную информацию можно найти в этой статье . ( I9496c , б/345472586 )
- Добавлена проверка версии agp для отправки имени пакета в качестве instr arg. До версии 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-бета01
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()
для предотвращения устранения неработающего кода в микробенчмарках. ( Если6812 , б/286091643 ) - Микробенчмарк теперь будет корректно генерировать результаты, чтобы трассировка метода не мешала измерениям. Это происходит на некоторых устройствах, когда принудительно включена трассировка метода (через аргументы инструмента или
MicrobenchmarkConfig
), а также если предпринимается попытка измерения после трассировки метода. Затронутые устройства используют API 26–30 или некоторые версии основного модуля ART, на которые влияет это вмешательство, и могут быть обнаружены во время выполнения с помощьюProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice
. ( Iafb92 , б/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 )
- Добавлен аргумент ind
androidx.benchmark.profiling.skipWhenDurationRisksAnr
, может быть установлен на false, чтобы не пропустить трассировки метода, когда ожидаемая продолжительность может вызвать ANR - настоятельно рекомендуется избегать в прогонах CI. - Добавлен экспериментальный аргумент
androidx.benchmark.profiling.perfCompare.enable
, установите это на true для выполнения времени сравнения между фазами измерения и профилирования. Полезно, например, оценка накладных расходов методов. ( I61fb4 , b/329146942 )
API меняется
- Изменено
TraceSectionMetric.Mode
на герметичный класс, чтобы обеспечить будущее расширение без исчерпывания, когда операторы ( i71f7b ) - Добавлены
TraceSectionMetric.Mode.Average
и.Count
, и переупорядоченные ARG, поэтому более распространенный аргумент (режим) был ранее в списке ARG, снижая необходимость определения имен параметров. ( IBF0B0 , B/315830077 , B/322167531 ) - Переименованная
Metric.getResult
дляgetMeasurements
в соответствии с типом возврата ( i42595 )
Исправления ошибок
- Исправление для обеспечения использования контрольных показателей сгенерированных базовых профилей, когда выключено
automaticGenerationDuringBuild
( IC144F , B/333024280 ) - Исправьте переопределение свойств плагина
BaselineProfile
Gradle, чтобы включить базовую генерацию профиля и сравнительный анализ при настройкеnonMinified
или сравнительного типа сборки. ( IB8F05 , B/324837887 ) - Фиксированные следы метода промывки в Macrobenchmark, поэтому следы метода должны быть полностью захвачены и действительными даже на более медленных устройствах. ( I6349a , b/329904950 )
- Включите начало блокировки на перфетто, чтобы снизить риск отсутствия данных в начале трассировки. Поддерживается только на API 33+. ( IE6E41 , B/310760059 )
- Добавлено предупреждение, когда тестовый оркестратор Android используется в эталонных модулях, так как это приведет к повторному перезаписыванию файлов json для каждого модуля. ( IA1AF6 , B/286899049 )
- Force ',' (Comma) тысячи сепараторов для последовательности при выводе студии, игнорируя локали устройства ( i3e921 , b/313496656 )
-
TraceSectionMetric
теперь поддерживает срезы, созданные с использованиемTrace.{begin|end}AsyncSection
. ( I91b32 , b/300434906 ) - Добавлены метки log.w / исключения для всех сбоев обнаружения запуска. Это не меняет текущее поведение (поэтому некоторые ошибки бросают, а другие молча не смогут обнаружить запуск), просто делает его более понятным. Как правило, те, которые
Log.w()
и не сообщают о метриках запуска, являются теми, где отсутствуют некадровые события, исключения выявляются при обнаружении запуска, за исключением информации о времени рамки (из срезов пользовательского интерфейса/RT). ( ID240F , B/329145809 ) - Отмените фон Dexopt задания перед запуска Macrobenchmark, чтобы уменьшить помехи. ( I989ed )
- Добавлено измерение
frameCount
вFrameTimingMetric
для помощи в обнаружении сценариев, где измерения изменяются, потому что количество произведенных кадров изменилось (добавлены новые анимации, проблемы с недействительностью фиксированы). ( I1e5aa ) - Уточнил, что
frameOverrunMs
является предпочтительной метрикой для отслеживания, когда она доступна в документах, и почему. ( I18749 , B/329478323 )
Версия 1.3.0-Alpha02
20 марта 2024 года
androidx.benchmark:benchmark-*:1.3.0-alpha02
выпускается. Версия 1.3.0-Alpha02 содержит эти коммиты .
Новые функции
Экспериментальная поддержка R8 в микрофенде через встроенные правила прогиба. Обратите внимание, что эта поддержка является экспериментальной, и требует AGP 8.3 для министерства библиотечных модульных тестов. Используйте следующее, чтобы включить Minifice/Optimization/оптимизацию R8 в
build.gradle
вашего эталонного модуля, что должно привести к значительному повышению производительности, в зависимости от рабочей нагрузки. ( I738a3 , b/184378053 )android { buildTypes.release.androidTest.enableMinification = true }
Исправления ошибок
- Исправляет предупреждение о отслеживании метода, чтобы быть на отдельной линии от выхода микрофенга. ( I0455C , B/328308833 )
Версия 1.3.0-Alpha01
21 февраля 2024 г.
androidx.benchmark:benchmark-*:1.3.0-alpha01
выпускается. Версия 1.3.0-Alpha01 содержит эти коммиты.
API меняется
- Переименованные в
MicrobenchmarkConfig
Boolean Parameters, чтобы избежать ненужного слова «должно» ( IA8F00 , B/303387299 ) - Добавлены
BenchmarkRule.measureRepeatedOnMainThread
, поэтому основные резьбы (например, касаются видов или сочинения UI) могли избежать запуска ANR, особенно во время больших люксов в CI. ( I5c86d ) - Добавлена
FrameTimingGfxInfoMetric
, экспериментальная альтернативная реализацияFrameTimingMetric
с измерениями, поступающими непосредственно с платформы, а не извлечена из трассировки Perfetto. ( I457CB , B/322232828 ) - Добавьте возможность сбросить художественный профиль во время индивидуальных итераций
warmUp
. ( I17923 ) - Несколько изменений в
TraceSectionMetric
API:- Добавить
Mode.Min
,Mode.Max
- Добавить аргумент метки, чтобы переопределить имя раздела как метрическое метрическое
- Добавлено имя режима для вывода, чтобы прояснить значение метрики
- Изменено по умолчанию на сумму, так как большинство использования этой метрики предназначено для повторных событий, будьте в курсе этих изменений в использовании CI, поскольку это может создавать разрывы или разорение. ( IC1E82 , B/301892382 , B/301955938 )
- Добавить
Исправления ошибок
- Улучшенное сообщение об ошибке в базовом плагине Gradle Profile, когда указанное управляемое устройство не существует ( 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 ) - Добавьте два аргумента инструментальных приборов для переоценки поведения с падением шейдеров в обходные сбои, когда сравнительные приложения без
ProfileInstaller
1.3:-
androidx.benchmark.dropShaders.enable=true/false
: можно использовать для пропуска всех падений шейдеров (включая то, что выполняется вStartupMode.Cold
Launches), ESP при сравнительном анализе, которые еще не используют ProfileInstaller 1.3 -
androidx.benchmark.dropShaders.throwOnFailure=true/false
: можно использовать для переноса отказов при попытке сбросить шейдеры, например, когда приложения сравнительного анализа без профиля INSTALLER 1.3 ( I4F573 )
-
- Пропустить метод отслеживания на нити пользовательского интерфейса, когда ожидается, что при броске займет больше времени, чем несколько секунд, а метод очистки. ( I6e768 )
- Бросьте, когда имена файлов длиннее 200 Chars, чтобы избежать неясных сбоев при написании или пост-обработке. ( I4a5ab )
- Исправляет проблему, в которой непосмертные рамки в начале и в конце трассировки могут быть соединены вместе, что неправильно сообщало бы как единственный чрезвычайно длинный кадр. ( I39353 , B/322232828 )
- Используйте
--skip verification
на API 30+ при переустановке пакета на API 30-33 для очистки художественных профилей на сборках пользователей. Это помогает обойти пьесу защиту предупреждений, которые вызывают неудачи на некоторых классах устройств. ( IC9E36 ) - Используйте
am force-stop
для убийства приложений, когда не системное приложение, такое как системный пользовательский интерфейс или пусковая установка. ( I5e028 ) - Macrobenchmark теперь ожидает
1 second
, когда целевое приложение пропустит профиль искусства (ранее он ждал500 ms
). ( I85A50 , B/316082056 ) - Улучшение
FrameTimingMetric
Error, когда кадры не производятся, и всегда выводит ссылку на трассировку при сбое метрического анализа, чтобы помочь в диагностике проблем. ( I956b9 ) - Фиксированный сбой в
FrameTimingMetric
сбое для анализа идентификатора рамки, особенно на определенных устройствах OEM. ( IA24BC , B/303823815 , B/306235276 ) - Расслабленная строгость чеков в
FrameMetrics
и добавил больше деталей в сообщения об ошибках. ( Iadede )
Версия 1.2
Версия 1.2.4
17 апреля 2024 г.
androidx.benchmark:benchmark-*:1.2.4
выпускается. Версия 1.2.4 содержит эти коммиты .
Исправления ошибок
- Исправляет базовый профиль SRCSET, который не настраивается в эталонных вариантах. Также фиксирует
automaticGenerationDuringBuild
в библиотеках, вызывая круговую зависимость. ( I28ab7 , b/333024280 ) - Используйте
am force-stop
для убийства приложений, когда не системное приложение, такое как системный пользовательский интерфейс или пусковая установка. Это исправляетStartupMode.COLD
Clackmarks, выходящие из пакета "Package $ Package не должны работать до холодного запуска!" Из -за процесса убийства не полностью успешно. ( 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 )
- Добавлены свойства для поддержки в качестве интеграции тестового прогона ( 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
теперь Stable, оптимизированная и упрощенная версия предыдущего экспериментальногоBaselineProfileRule.collectBaselineProfile
- Просто укажите
packageName
и приведите свое приложение
- Просто укажите
- Для библиотек, генерирующих базовые профили, теперь вы можете отфильтровать правила, сгенерированные либо в коде (
BaselineProfileRule.collect
Argemt), либо даже просто в плагине Gradle - Исправляет
- Фиксированный базовый сбор профилей на Android U+ ( ID1392 , B/277645214 )
Macrobenchmark
- Сборник
- MacRobenchmark теперь правильно полностью сбрасывает состояние компиляции для каждого компиляции - это требует переустановки APK перед Android 14, поэтому настойчиво рекомендуется сравнение на Android 14+, если вы хотите сохранить состояние (например, вход пользователя) в том, что измеряется.
- Вы также можете обойти это, контролируя компиляцию приложений отдельно и пропустив компиляцию с помощью
CompilationMode.Ignore()
или аргумента инструментации
Аргументы в области инструментов
- Поддержка
androidx.benchmark.dryRunMode.enable
Инструментария аргумента (уже доступна в MicroBenchmark) для более быстрых пробелов валидации (например, при создании эталона или в Presubmit) - Поддержка
androidx.benchmark.profiling.mode=StackSampling
иMethodTracing
. - Добавлено
androidx.benchmark.enabledRules
, чтобы разрешить фильтрацию времени выполнения. - Добавлен
androidx.benchmark.perfettoSdkTracing.enable
аргумент, чтобы обеспечить отслеживание с трассировкой-перфетто, например, Compose Cose Cose Cose Cose Cosepose. Обратите внимание, что при использовании сStartupMode.COLD
время будет значительно затронуто, так как библиотека трассировки загружается и включена во время запуска приложения.
- Поддержка
Требования
- Macrobenchmark теперь требует
ProfileInstaller
1.3.0 или более в целевом приложении, чтобы включить захват / сброс профиля и очистку кеша шейдера.
- Macrobenchmark теперь требует
Новые экспериментальные метрические API
- Добавлен экспериментальный
TraceSectionMetric
, который позволяет извлечь простое время из блоковtrace("") {}
в вашем приложении, или Tracemetric для использования полной возможности запросаTraceProcessor
. - Добавлен экспериментальный
PowerMetric
для захвата информации об использовании энергии - Добавлено экспериментальные
MemoryCountersMetric
чтобы считать разломы страниц. - Добавлен экспериментальный
PerfettoTraceProcessor
API, который внутри используется для извлечения метрик из системных следов (так как Perfetto Traces)
- Добавлен экспериментальный
Исправляет
- Фиксированные сбои при установке или извлечении профилей из приложения, установленного из нескольких APK (например, из пакета приложений).
- Фиксированные
FrameTimingMetric
игнорирующие рамки с непоследовательными идентификаторами рамки (как правило, кадры во время RIPI на API 31+) ( I747D2 , B/279088460 ) - Фиксированные ошибки анализа на следах> 64 МБ ( IEF831 , B/269949822 )
- Уточненные ошибки, когда устройство ОС Device (особенно эмулятор) неправильно настроено для отслеживания или компиляции
- Проверка проверки уровня батареи на устройства без батареи (микро и макро)
- Улучшенный выход файлов, с более четкими ошибками для неверных каталогов вывода и более безопасных по умолчанию
- Улучшенная стабильность
StartupMode.COLD
, последовательно сбрасывая кэш шейдеров (также выявленную черезMacrobenchmarkScope.dropShaderCache
) - Фиксированная запасная сторона Leanback для
startActivityAndWait
.
Microbenchmark
- Функции
- Профилирование было перемещено на отдельную фазу после других показателей, поэтому один тестовый прогон может отображать как точные результаты времени , так и результаты профилирования.
- Экспериментальные API
- Добавлен экспериментальный API
MicrobenchmarkConfig
для определения пользовательских метрик и настройки трассировки и профилирования. Может использоваться для захвата трассов метода или захвата трацепоинтов (но имейте в виду отслеживание накладных расходов). - Добавлены экспериментальные API для контроля
BenchmarkState
отдельно отBenchmarkRule
, без Junit - Добавлена экспериментальная запись
PerfettoTrace
, чтобы обеспечить захват трассы перфетто, с пользовательской конфигурацией, отделенной от контрольных API.
- Добавлен экспериментальный API
- Исправляет
- Обходной путь отсутствует ведущие пробелы в выходе на эталона Android Studio.
- Исправлена проблема, где предупреждения могут не напечатать в результате вывода Android Studio.
- Исправлено фиксированное сбоев
SampledProfiling
на Android 13 (API 33) и выше. - Массовая улучшенная производительность
dryRunMode
, пропустивIsolationActivity
и трассировку перфетто (в 10 раз быстрее сухой режим пробега в старых версиях ОС).
Версия 1.2.0-RC02
6 октября 2023 года
androidx.benchmark:benchmark-*:1.2.0-rc02
выпущен. Версия 1.2.0-RC02 содержит эти коммиты.
Исправления ошибок
- Исправьте результат Benchmark File, чтобы больше не сломать
BaselineProfile
плагин. Файлы были сгенерированы и скопированы с устройства, но были переименованы так, чтобы плагин Gradle не видел их. ( I8DBCC , B/303034735 , B/296453339 ) - Уточненная
tracing-perfetto
Загрузка сообщений об ошибках при введении из модуля Macrobenchmark в целевое приложение.
Версия 1.2.0-RC01
20 сентября 2023 года
androidx.benchmark:benchmark-*:1.2.0-rc01
выпущен. Версия 1.2.0-RC01 содержит эти коммиты.
Исправления ошибок
- Исключение (с инструкциями по лекарствам) теперь бросается, когда перфетто SDK Трассировка не может инициализироваться в эталонном. ( I6c878 , b/286228781 )
- Исправить сбой OOM при преобразовании метода Art Trace -> Perfetto Format. ( I106BD , B/296905344 )
- (Macrobenchmark) Уточненная метка трассировки метода при связи в выходе из студийного теста, а фиксированные имена файлов с фиксированным методом были уникальными на устройстве/хосте, поэтому они не будут перезаписаны, когда запускается более одного эталона. ( I08E65 , B/285912360 )
- Гарантирует, что устройство бодрствует при захвате базового профиля. ( I503fc )
Версия 1.2.0-бета05
30 августа 2023 года
androidx.benchmark:benchmark-*:1.2.0-beta05
выпускается. Версия 1.2.0-бета05 содержит эти коммиты.
Новые функции
- Плагин базового профиля Gradle теперь поддерживает плагин Android Gradle 8.3. ( AOSP/2715214 )
Версия 1.2.0-бета04
23 августа 2023 года
androidx.benchmark:benchmark-*:1.2.0-beta04
выпускается. Версия 1.2.0-бета04 содержит эти коммиты.
Новые функции
- Базовый плагин Gradle теперь поддерживает плагин Android Gradle 8.3. ( AOSP/2715214 )
Исправления ошибок
- Исправьте сбои в письменной / перемещении и вытягивании файлов (особенно из параметризованных тестов) путем дезинфицирующегося выходных имен файлов, избегая '=' и ':' в именах выходных файлов. ( I759d8 )
Версия 1.2.0-бета03
9 августа 2023 г.
androidx.benchmark:benchmark-*:1.2.0-beta03
выпускается. Версия 1.2.0-бета03 содержит эти коммиты.
API меняется
- Добавлен аргумент в
TraceSectionMetric
только к целевому пакету, по умолчанию ( IA219B , B/292208786 )
Исправления ошибок
- Переименованное
fullTracing.enable
perfettoSdkTracing.enable
fullTracing.enable
будет продолжать работать в качестве запасного. ( I7cc00 ) - Внутренние трацепоинты библиотеки (включая петлю/фазовое отслеживание MicroBenchmark) теперь будут отображаться в Studio System System Trace Seecter и гнездятся под правильным процессом в перфетто. ( I6b2e7 , b/293510459 )
- Удаленная ошибка MacRobenchmark на API 31+, а также пропустить проверку на устройствах, корневых eng/userdebug. ( I2abac , b/291722507 )
- При использовании оптимизации макета DEX правила профиля запуска также теперь рассматриваются как базовые правила профиля. ( AOSP/2684246 , B/293889189 )
Версия 1.2.0-бета02
26 июля 2023 г.
androidx.benchmark:benchmark-*:1.2.0-beta02
выпускается. Версия 1.2.0-бета02 содержит эти коммиты.
API меняется
- Добавлены экспериментальные API для пользовательских метрик и конфигурации MicroBench (например, профилировщик и трассировка). ( I86101 , B/291820856 )
Исправления ошибок
- Ошибка отчета в Macrobench, когда ОС неправильно настроена для отслеживания, как это было недавно исправлено в эмуляторах API 26/28 ARM64. ( I0A328 , B/282191686 )
- Добавлены подробные для сброса компиляции, сбросить неспособность предложить обновление эмулятора, так как некоторые эмуляторы недавно исправили эту проблему. ( I8c815 , b/282191686 )
- Сделайте
androidx.test.uiautomator:uiautomator:2.2.0
api
вместо зависимостиimplementation
. ( I1981E )
Версия 1.2.0-бета01
18 июля 2023 года
androidx.benchmark:benchmark-*:1.2.0-beta01
выпускается. Версия 1.2.0-бета01 содержит эти коммиты.
Исправления ошибок
- Исправить предупреждения, которые иногда подавляются в результате вывода в студии, и ведущие обходные пробелы из базовых выводов, не отображаемых в студии ( IA61D0 , B/227205461 , B/286306579 , B/285912360 )
- Фиксированный комментарий для
FrameTimingMetric
. Субметрия называетсяframeDurationCpuMs
. ( IB097F , B/288830934 ).
Версия 1.2.0-Альфа16
21 июня 2023 года
androidx.benchmark:benchmark-*:1.2.0-alpha16
выпускается. Версия 1.2.0-Alpha16 содержит эти коммиты.
API меняется
-
BaselineProfileRule.collectBaselineProfile()
API был переименован вBaselineProfileRule.collect()
. ( I4b665 )
Исправления ошибок
- Поддержка Macrobenchmark для
androidx.benchmark.profiling.mode = MethodTracing
. ( I7ad37 , b/285912360 ) - Профилирование MicroBenchmark перемещалось в отдельную фазу, поэтому оно происходит в последовательности после измерения, вместо того, чтобы заменить его. Разделы трассировки
MethodTracing
и теперь также включены в захваченную трассу перфетто, если присутствуют. ( I9f657 , b/285014599 ) - Добавьте измерение счета в
TraceSectionMetric
сMode.Sum
. ( IC121A , B/264398606 )
Версия 1.2.0-Альфа15
7 июня 2023 г.
androidx.benchmark:benchmark-*:1.2.0-alpha15
выпускается. Версия 1.2.0-Alpha15 содержит эти коммиты.
Новые функции
- Добавлена экспериментальная
MemoryUsageMetric
, чтобы отслеживать использование памяти целевого приложения. ( I56453 , b/133147125 , b/281749311 ) - Добавьте поддержку для полностью настраиваемых конфигураций перфетто с помощью
PerfettoTrace.record
( if9d75 , b/280460183 ) - Добавлено свойство, чтобы пропустить базовый профиль. Использование:
./gradlew assemble -Pandroidx.baselineprofile.skipgeneration
. ( I37FDA , B/283447020 )
API меняется
- API
collectBaselineProfile
всегда генерирует стабильные базовые профили. APIcollectStableBaselineProfile
был удален, и вместо этого следует использоватьcollectBaselineProfile
. ( I17262 , B/281078707 ) - Изменено
BaselineProfileRule
filterPredicate
Arg на NON-NULL, с эквивалентным значением по умолчанию, так что поведение фильтра по умолчанию более ясное в DOCS. ( I3816e )
Исправления ошибок
- Отключить
IsolationActivity
и отслеживание перфетто вdryRunMode
чтобы значительно повысить производительность, так как это было большинство времени выполнения. ( IE4F7D ) - Поддержка выборки стека вызовов в MacRobenchMarks с использованием аргументов испытаний на инструмент
androidx.benchmark.profiling.mode=StackSampling
иandroidx.benchmark.profiling.sampleFrequency
. ( I1d13b , b/282188489 ) - Исправляет сбой при сброске шейдеров на Android U (API 34), а также на эмуляторы. ( I031CA , B/274314544 )
Версия 1.2.0-Альфа14
3 мая 2023 года
androidx.benchmark:benchmark-*:1.2.0-alpha14
выпускается. Версия 1.2.0-Alpha14 содержит эти коммиты.
Исправления ошибок
- Исправьте
FrameTimingMetric
игнорирующие рамки с непоследовательными идентификаторами кадра. Это приведет к тому, что некоторые анимации в недавних версиях платформы (API 31+) игнорируют многие кадры, в то время какRenderThread
анимировал (например, во время Ripple). ( I747d2 , b/279088460 ) - Фиксированный анализ процессора трассировки для следов более 64 МБ. ( IEF831 , B/269949822 )
- Фиксированная базовая генерация профиля на Android U сбой из-за различных выводов команды
pm dump-profiles
. ( ID1392 , B/277645214 ) - Исправить сценарий блокировки часов GPU для правильного сравнения строк ( i53e54 , b/213935715 )
Версия 1.2.0-Альфа13
5 апреля 2023 года
androidx.benchmark:benchmark-*:1.2.0-alpha13
выпускается. Версия 1.2.0-Alpha13 содержит эти коммиты.
API меняется
- Добавлен параметр типа профиля при генерации базовых профилей для поддержки предстоящей функции профиля запуска ( IE20D7 , B/275093123 )
- Добавлен новый экспериментальный
TraceMetric
API для определения полностью индивидуальных метрик на основе содержания перфетто. ( I4ce31 , b/219851406 ) - Добавьте экспериментальную метрику, чтобы определить количество разломов страниц во время эталона. ( I48db0 )
Версия 1.2.0-Альфа12
22 марта 2023 г.
androidx.benchmark:benchmark-*:1.2.0-alpha12
выпускается. Версия 1.2.0-Alpha12 содержит эти коммиты.
Новые функции
- Новый плагин Gradle Baseline Profile выпущен в версии Alpha, что облегчает генерацию базового профиля и упрощает рабочий процесс разработчика.
API меняется
- Удаленная поддержка трассировки перфетто на API 21 и 22, которая включает в себя как микробенчки, так и экспериментальные API
PerfettoTrace
. До этой версии соединенияUiAutomation
были ненадежными на некоторых устройствах. ( I78e8c ) - Добавлен общедоступный экспериментальный API для
PerfettoTraceProcessor
, чтобы обеспечить содержание трассировки. Это шаг к полностью пользовательским показателям на основе данных трассировки перфетто. ( I2659e , b/219851406 )
Версия 1.2.0-Альфа11
8 марта 2023 г.
androidx.benchmark:benchmark-*:1.2.0-alpha11
выпускается. Версия 1.2.0-альфа11 содержит эти коммиты.
Исправления ошибок
- Фиксированные сбои в
MacrobenchmarkRule
иBaselineProfileRule
при переустановке или извлечении профилей из пакета приложений с несколькими APK. ( I0d8c8 , b/270587281 )
Версия 1.2.0-Альфа10
22 февраля 2023 г.
androidx.benchmark:benchmark-*:1.2.0-alpha10
выпускается. Версия 1.2.0-Alpha10 содержит эти коммиты.
Новые функции
- На Android 14+ Macrobenchmark больше не переустанавливает целевые приложения для сброса состояния компиляции благодаря новой функции платформы. Ранее необходимо было иметь корневое устройство или иметь дело со всем состоянием приложения (например, вход пользователя), который удаляется перед каждым бланком. ( I9b08c , b/249143766 )
Исправления ошибок
- Исправьте
DryRunMode
, чтобы больше не сбой с пустым профилем, из -за пропуска компиляции. Вместо этого он запускает одну итерацию и извлекает профиль, чтобы гарантировать, что что -то запечатлело. ( I2f05d , b/266403227 ) - Исправьте
PowerMetric
Crash при проверке присутствия PowerStats на старых уровнях API. ( 5FAAF9 , B/268253898 )
Версия 1.2.0-Alpha09
11 января 2023 года
androidx.benchmark:benchmark-*:1.2.0-alpha09
выпускается. Версия 1.2.0-Alpha09 содержит эти коммиты.
Исправления ошибок
- Включено передавать
None
вandroidx.benchmark.enabledRules
Инструментация Arg, чтобы отключить все тесты / генерацию базового профиля. ( I3d7fd , b/258671856 ) - Исправить захват
PerfettoTrace
в модулях приложений (т.е. не взыскание испытательных APK) ( i12CFC ) - Фиксированный базовый профиль ADB Порядок вытягивания аргумента на выходе студии ( I958D1 , B/261781624 )
- Emulator Api 33 теперь правильно распознается как таковой при попытке запустить макробенч -маркирство и правильно распечатать предупреждение. ( 69133b , b/262209591 )
- Проверка проверки уровня батареи на устройствах без батареи в Macrobenchmark ( FE4114 , B/232448937 )
Версия 1.2.0-Alpha08
7 декабря 2022 года
androidx.benchmark:benchmark-*:1.2.0-alpha08
выпускается. Версия 1.2.0-Alpha08 содержит эти коммиты.
API меняется
- Добавлено экспериментальное новое APIS
PerfettoTrace.record {}
иPerfettoTraceRule
для захвата трассов перфетто (также известных как системные следы) как часть теста, чтобы осмотреть поведение и производительность тестирования. ( I3ba16 ) -
BaselineProfileRule
теперь принимает предикат фильтра вместо списка префиксов пакетов. Это дает тест полный контроль на фильтрации. ( I93240 ) - Добавьте экспериментальный API
BaselineProfileRule.collectStableBaselineProfile
, который ожидает, пока базовый профиль не станет стабильным для n итераций. ( I923f3 ) - Добавьте возможность указать префикс имени выходного файла при генерации базовых профилей с использованием
BaselineProfileRule
. ( I7b59f , b/260318655 )
Исправления ошибок
- Повышение безопасности вывода файлов, что должно предотвратить тихие не писать / добавленные выходные файлы, особенно на API 21/22. ( If8c44 , b/227510293 )
- Исправьте
simpleperf
Trace Toplow, чтобы правильно создать и поместить файл. Это также должно более широко исправлять проблемы, когда Файл безуспешно вытягивается Gradle. ( I12A1C , B/259424099 ) - Улучшить сообщение об ошибке ProfileInstaller, напечатанное, когда ProfileInstaller слишком старый. Теперь это говорит вам обновить версию ProfileInstaller (1.2.1) для измерения базовых профилей на API с 31 по 33, вместо того, чтобы сказать, что она не поддерживается. ( IA517F , B/253519888 )
- Исправьте несколько сбоев команды оболочки Onerror Print Print Nead API <= 23, включая неудачную бинарную настройку перфетто и сбои захвата трассировки ( IB6B87 , B/258863685 )
- Автоматически сортируют сгенерированные правила профиля, чтобы минимизировать количество изменений при изменении с течением времени (при регистрации правил профиля в управление источником). ( IE2509 )
- Исправлено сбой на непредубежденных сборках ниже Android 13 (API 33) с сообщением
Expected no stderr from echo 3 > /proc/sys/vm/drop_caches
( i6c245 , b/259508183 )
Известные проблемы - MacrobenchmarkScope.dropShaderCache()
может сбои из -за отсутствующего реестра вещания в Manifest ProfileInstaller, который еще не был выпущен. ( I5c728 , b/258619948 ) для profileinstaller:1.3.0-alpha02
<!-- 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-Alpha07
9 ноября 2022 г.
androidx.benchmark:benchmark-*:1.2.0-alpha07
выпускается. Версия 1.2.0-Alpha07 содержит эти коммиты.
API меняется
- Добавляет
PowerMetric
API для измерения энергии и мощности в макробенчах. ( IFE601 , B/220183779 ) - Исправлено
MacrobenchmarkScope.dropShaderCache()
, чтобы фактически отбросить шейдерный кэш. Это удаляет примерно 20 мс шума изStartupMode.COLD
Clardmars, поскольку шейды теперь последовательно очищают каждую итерацию. РаньшеPartial
компиляция с использованием итераций разминки сообщала о неправильно быстрых числах, так как кэширование шейдера с большей вероятностью произошло во время разминки. Это исправление требует либо корневого устройства, либо для использованияprofileinstaller:1.3.0-alpha02
в целевом приложении. Для изменений API библиотекиProfileInstaller
, пожалуйста, обратитесь к странице ProfileInstaller 1.30-ALPHA02 . ( IA5171 , B/231455742 ) - Добавлен
TraceSectionMode("label", Mode.Sum)
, что позволяет измерять общее время, проведенное на нескольких сечениях трассировки с той же меткой. Например,TraceSectionMetric("inflate", Mode.Sum)
сообщит о метрическихinflateMs
для общего времени в макробенчмарке, потраченном на инфляцию. Также удалено требование API 29, так какTraceSectionMetric
работает вместе сandroidx.tracing.Trace
обратно к более низким уровням API с использованиемforceEnableAppTracing
в целевом приложении. ( ID7B68 , B/231455742 )
Исправления ошибок
- Улучшенная безопасность всех внутренних команд оболочки путем проверки всех выходных/ошибок. ( I5984d , b/255402908 , b/253094958 )
- Укажите устройство в базовом профиле
adb pull
-команде, чтобы команда Pull можно было просто скопировать, если подключены несколько устройств (до одного эмулятора) ( i6ac6c , b/223359380 ) - Добавьте ошибку, если MacRobenchmark Test APK не настроен как самостоятельно. Эта ошибка предотвращает Macrobenchmarking из процесса целевого приложения. В процессе Macrobench не сможет скомпилировать/убить/запустить приложение или контролировать свои собственные разрешения ( i4279b )
- Исправлена проблема в
measureRepeated()
, гдеStartupMode.COLD
не убивает целевой процесс послеsetupBlock
. ТеперьsetupBlock
, взаимодействующий с приложением, не оставит процесс приложения, и неверное измерение холодного старта. ( I8ebb7 )
Версия 1.2.0-Alpha06
24 октября 2022 года
androidx.benchmark:benchmark-*:1.2.0-alpha06
выпускается. Версия 1.2.0-Alpha06 содержит эти коммиты.
API меняется
-
BaselineProfileRule
больше не требует корня на Android 13 (API 33) и больше не эксперименталь. ( IE0A7D , B/250083467 , B/253094958 )- Это изменение также фиксирует, как профили из приложения промываются на диск на непрестанных устройствах, но требуют обновления зависимости профиля целевого приложения.
- Чтобы использовать
BaselineProfileRule
илиCompilationMode.Partial(warmupIterations)
на неровном устройстве, вы также должны обновить ваше целевое приложение для использованияandroidx.profileinstaller.profileinstaller:1.3.0-alpha01
. Это позволяет правильно промывать профиль на диск, чтобы его можно было собрать/извлечь.
Исправления ошибок
- Исправляет сбой
SampledProfiling
на API 33+. ( I40743 , b/236109374 )
Версия 1.2.0-Alpha05
5 октября 2022 г.
androidx.benchmark:benchmark-*:1.2.0-alpha05
выпускается. Версия 1.2.0-Alpha05 содержит эти коммиты.
Исправления ошибок
- Fix Frame Breakdown в Studio System Trace Viewer для просмотра тестов .
- Правильный
FrameTimingMetric
для перечисленияFrameOverrun
как требует API 31 вместо 29 ( i716dd , b/2207025554 ) - Установите итерацию в
BaselineProfileRule
и четко выбросьте, если целевой пакет не установлен (уже был сделан для Macrobenchmarkrule). ( IC09A3 , B/227991471 )
Версия 1.2.0-Alpha04
21 сентября 2022 года
androidx.benchmark:benchmark-*:1.2.0-alpha04
выпускается. Версия 1.2.0-Alpha04 содержит эти коммиты.
Новые функции
Добавьте поддержку
dryRunMode.enable
Amentleation Arcome в Macrobenchmark (уже доступный в Micro) для более быстрой локальной разработки, и проверка автоматизации приложений (например, в Presubmit). Это переопределяет итерации до 1, пропускает компиляцию, подавляет все ошибки конфигурации и отключает выход измерения .JSON. ( IB51B4 , B/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()
. Это означает, что метрика может забрать запуска из EG-уведомлений,Context.startActivity()
, навигации на основе активности в приложении или команд Shell. ( Ia2de6 , b/245414235 ) - Исправить ошибку, где
startActivityAndWait
и Timeout, пытаясь дождаться завершения запуска на эмуляторах, снижая строгость обнаружения кадров. ( IBE2C6 , B/244594339 , B/228946895 )
Версия 1.2.0-Alpha03
7 сентября 2022 года
androidx.benchmark:benchmark-*:1.2.0-alpha03
выпускается. Версия 1.2.0-Alpha03 содержит эти коммиты.
Новые функции
- Добавлены экспериментальные API для использования
BenchmarkState
независимо, отдельно отBenchmarkRule
/JUnit4
. ( ID478F , B/228489614 )
Исправления ошибок
- Добавлен запасной запасной путь для
startActivityAndWait
. ( 01ed77 , b/2428999915 )
Версия 1.2.0-Alpha02
24 августа 2022 года
androidx.benchmark:benchmark-*:1.2.0-alpha02
выпускается. Версия 1.2.0-Alpha02 содержит эти коммиты.
API меняется
- По умолчанию
am force stop
дляMacrobenchmarkScope.killProcess()
, даже при укоренении, за исключением базового генерации профиля. Это может быть переопределено дополнительным логическим аргументом. ( 02cce9 , b/241214097 )
Исправления ошибок
- Поддержка базового профиля для системных приложений. ( I900b8 , b/241214097 )
- Поддержка проверки на метрики мощности ODPM на унылых устройствах. ( A38C78 , B/229623230 )
Версия 1.2.0-Alpha01
27 июля 2022 года
androidx.benchmark:benchmark-*:1.2.0-alpha01
выпускается. Версия 1.2.0-Alpha01 содержит эти коммиты.
Новые функции
- Новый компонент трассировки-перфетто-компонента, позволяющий инструментальности, чтобы обеспечить перфетто SDK-трассировку в приложении, которое его обнаруживает ( i2cc7f )
Добавлен
androidx.benchmark.enabledRules
Аргумент Инструментации, чтобы включить фильтрацию MacRobenchmark, чтобы пробежать только на контрольные показатели, или просто базовое образование профиля. Перейдите в «Macrobenchmark», или «BaselineProfile», чтобы просто запустить один тип теста, например, когда просто генерируяBaselineProfiles
на эмуляторе. Список, разделенный запятыми, также поддерживается. ( I756b7 , b/230371561 )Например, в Build.gradle вашего Macrobenchmark:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile' } }
Или из командной строки Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
API меняется
- Добавлен новый
PowerMetric
для измерения задач энергии и мощности в критериях. ( I9f39b , b/220183779 ) - Добавлен новый компиляционный режим
CompilationMode.Ignore
. ( IBBCF8 , B/230453509 ) - Добавлен новый параметр в
BaselineProfileRule#collectBaselineProfile
, чтобы фильтровать выходной файл по именам пакетов ( IF7338 , B/220146561 ) - Позволяет разработчику разгрузку устройства для измерения источника питания. ( I6a6cb )
- Добавлена возможность очистить кеш шейдеров в
MacrobenchmarkScope
. ( I32122 ) - Позволяет разработчику настроить отображение типа метрического типа и деталей, желаемых категориями подсистемы. ( I810c9 )
- Ранее
UnsupportedOperationException
была брошена в эталон, если вы работаете на неподдерживаемом устройстве. Now UOE only occurs if the metric is used on the unsupported device (ie:PowerMetric.configure
). ( I5cf20 , b/227229375 ) - Added
TotalPowerMetric
andTotalEnergyMetric
for 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 )
Version 1.1.1
Version 1.1.1
9 ноября 2022 г.
androidx.benchmark:benchmark-*:1.1.1
is released. Version 1.1.1 contains these commits.
Исправления ошибок
- Fixes
android.system.ErrnoException: open failed: EACCES
which 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
June 15, 2022
androidx.benchmark:benchmark-*:1.1.0
is released. Version 1.1.0 contains these commits.
- This version is identical to
androidx.benchmark:benchmark-*:1.1.0-rc03
.
Important changes since 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.Partial
to measure the effectiveness of Baseline Profiles. -
@BaselineProfileRule
to automatically generate Baseline profiles for a given critical user journey.
-
Support for Allocation metrics & profiling during Microbenchmark runs.
Version 1.1.0-rc03
June 1, 2022
androidx.benchmark:benchmark-*:1.1.0-rc03
is released. Version 1.1.0-rc03 contains these commits.
Исправления ошибок
Avoid reinstalling the target package on every benchmark iteration. ( aosp/2093027 , b/231976084 )
Remove the
300ms
delay 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
CompilationMode
having 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=false
Made it possible to share a module between macrobenchmarks and baseline profile generating tests by adding
androidx.benchmark.enabledRules
instrumentation argument. Pass in 'Macrobenchmark', or 'BaselineProfile' to just run one type of test, eg when generatingBaselineProfiles
on 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
Version 1.1.0-rc01
April 20, 2022
androidx.benchmark:benchmark-*:1.1.0-rc01
is released. Version 1.1.0-rc01 contains these commits.
Исправления ошибок
- 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
April 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
February 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
NoSuchElementException
caused by process names not being captured correctly in traces. ( Ib4c17 , b/218668335 )Use
PowerManager
for 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
measureRepeated
thread 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.profileinstaller
and Android Gradle Plugin. aosp/1977029
Version 1.1.0-beta03
February 9, 2022
androidx.benchmark:benchmark-*:1.1.0-beta03
is released. Version 1.1.0-beta03 contains these commits.
API Changes
- Added
AudioUnderrunMetric
into macrobenchmark library under experimental flag to allow detection of audio underruns ( Ib5972 ) BaselineProfileRule
no longer accepts asetup
block as this functioned the same as theprofileBlock
. ( Ic7dfe , b/215536447 )For eg
@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
->FrameDurationUi
to clarify these are durations, not timestamps, and to match prefixes. ( I0eba3 , b/216337830 )
Version 1.1.0-beta02
26 января 2022 г.
androidx.benchmark:benchmark-*:1.1.0-beta02
is released. Version 1.1.0-beta02 contains these commits.
Исправления ошибок
- 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 pull
command in logcat and Studio output for pulling generated BaselineProfile text file. ( f08811 )
Version 1.1.0-beta01
12 января 2022 г.
androidx.benchmark:benchmark-*:1.1.0-beta01
is released. Version 1.1.0-beta01 contains these commits.
Исправления ошибок
- Fixes profiler argument enable being ignored. ( I37373 , b/210619998 )
- Removed deprecated
CompliationModes
( I98186 , b/213467659 ) - Switched baseline profile arg of
CompilationMode.Partial
to 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 Changes
- 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.Trace
orandroidx.tracing
Jetpack 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
CompilationModes
into 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
null
in certain warmup scenarios). ( Id3b68 , b/208357448 , b/208369635 )
Исправления ошибок
- Fixed
CompilationMode.Speed
incorrectly treated asNone
( I01137 )
Version 1.1.0-alpha12
17 ноября 2021 г.
androidx.benchmark:benchmark-*:1.1.0-alpha12
is released. Version 1.1.0-alpha12 contains these commits.
New Features
- 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 )
Version 1.1.0-alpha11
November 3, 2021
androidx.benchmark:benchmark-*:1.1.0-alpha11
is released. Version 1.1.0-alpha11 contains these commits.
API Changes
- Macrobenchmark now has a
minSdkVersion
of23
. ( If2655 ) - Adds a new experimental
BaselineProfileRule
which 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 )
Version 1.1.0-alpha10
October 27, 2021
androidx.benchmark:benchmark-*:1.1.0-alpha10
is released. Version 1.1.0-alpha10 contains these commits.
API Changes
- 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 )
Version 1.1.0-alpha09
October 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 )
Version 1.1.0-alpha08
September 29, 2021
androidx.benchmark:benchmark-*:1.1.0-alpha08
is released. Version 1.1.0-alpha08 contains these commits.
API Changes
- 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 )
Version 1.1.0-alpha07
September 1, 2021
androidx.benchmark:benchmark-*:1.1.0-alpha07
is released. Version 1.1.0-alpha07 contains these commits.
API Changes
- 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
ProfileInstaller
to 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-alpha04
or greater. -
StartupMode.COLD
+CompilationMode.None
benchmarks are now more stable. ( I770cd , b/196074999 )
Version 1.1.0-alpha06
18 августа 2021 г.
androidx.benchmark:benchmark-*:1.1.0-alpha06
is released. Version 1.1.0-alpha06 contains these commits.
API Changes
- Added
androidx.benchmark.iterations
instrumentation 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 )
Known Issues
-
CompilationMode.BaselineProfile
is a work in progress. Avoid using it to determine how good a profile is for now.
Version 1.1.0-alpha05
August 4, 2021
androidx.benchmark:benchmark-*:1.1.0-alpha05
is released. Version 1.1.0-alpha05 contains these commits.
1.1.0-alpha04
was cancelled before release due to a sporatic crash. b/193827052
API Changes
- 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
EmptyActivity
to bring the target app out of a force-stopped state to better supportCompilationMode.BaselineProfile
. ( Id7cac , b/192084204 ) - Changed trace file extension to
.perfetto-trace
to 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 )
Version 1.1.0-alpha03
June 16, 2021
androidx.benchmark:benchmark-*:1.1.0-alpha03
is released. Version 1.1.0-alpha03 contains these commits.
New Features
- Added a new
CompilationMode.BaselineProfile
to 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"
Version 1.1.0-alpha02
May 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. Version 1.1.0-alpha02 contains these commits.
New Features
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 )
Version 1.1.0-alpha01
June 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. Version 1.1.0-alpha01 contains these commits.
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:
-
testBuildType
is 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.debug
is 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
InstrumentationResultParser
error printed for each benchmark when running from command line. ( I64988 , b/154248456 )
Known Issues
- 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
November 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 .
Major features of 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.
Major features include:
- 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
Version 1.0.0-rc01
October 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 .
New features
- 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
Version 1.0.0-beta01
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 .
New features
- 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-lint
dependency, 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
additionalTestOutputDir
instrumentation 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 ).
Version 1.0.0-alpha06
September 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 .
New features
- Added a check for incorrectly using the old package for the test runner, which now provides a more-helpful error message
API changes
- The experimental annotation
ExperimentalAnnotationReport
is now correctly public. Usage of the experimental BenchmarkState#report API now requires this annotation
Version 1.0.0-alpha05
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 changes
-
BenchmarkState.reportData
API is now marked experimental
Исправления ошибок
- Fix for the clock-locking script, which would fail on devices that were either missing the
cut
orexpr
shell utilities. - Fixed an issue with
./gradlew lockClocks
task that would hang on devices that were rooted with an older version of the su utility, which did not support the-c
flag.
Version 1.0.0-alpha04
August 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 .
New features
- Gradle plugin
- Now automatically disables test coverage, and sets the
AndroidBenchmarkRunner
by 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 )
-
@Parameterized
benchmarks 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 changes
- Module structure has changed, splitting the library ( b/138451391 )
-
benchmark:benchmark-junit4
contains classes with JUnit dependency:AndroidBenchmarkRunner
, andBenchmarkRule
, both of which have moved into theandroidx.benchmark.junit4
package -
benchmark:benchmark-common
contains 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
External contributions
- Thanks to Sergey Zakharov for contributing JSON output improvements and the fix for screen off issues!
Version 1.0.0-alpha03
July 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 .
New features
- 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
Version 1.0.0-alpha02
June 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 changes
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.reportData
API ( b/132887006 )
Исправления ошибок
- Fixed
./gradlew lockClocks
not sticking on some recent OS devices ( b/133424037 ) - Throttling detection disabled for emulator ( b/132880807 )
Version 1.0.0-alpha01
7 мая 2019 г.
androidx.benchmark:benchmark:1.0.0-alpha01
is released. The commits included in this version are available here .