Сравнение
| Последнее обновление | Основная версия | Релиз-кандидат | Бета-версия | Альфа-версия |
|---|---|---|---|---|
| 7 октября 2026 г. | 1.5.0 | - | - | 1.6.0-alpha01 |
Как объявлять зависимости
Чтобы добавить зависимость от Benchmark, добавьте в проект репозиторий Google Maven. Подробную информацию можно найти в статье Репозиторий Google Maven.
Макротест
Чтобы использовать Macrobenchmark в проекте, добавьте в файл build.gradle для модуля macrobenchmark следующие зависимости:
классный
dependencies { androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.5.0" }
Котлин
dependencies { androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.5.0") }
Микротест
Чтобы использовать Microbenchmark в проекте, добавьте в файл build.gradle для модуля microbenchmark следующие зависимости:
классный
dependencies { androidTestImplementation "androidx.benchmark:benchmark-junit4:1.5.0" } android { ... defaultConfig { ... testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Котлин
dependencies { androidTestImplementation("androidx.benchmark:benchmark-junit4:1.5.0") } android { ... defaultConfig { ... testInstrumentationRunner = "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Библиотека Microbenchmark также предоставляет плагин Gradle для использования с вашим модулем microbenchmark. Этот плагин устанавливает настройки конфигурации сборки по умолчанию для модуля, настраивает копию выходных данных теста на хост и предоставляет задачу ./gradlew lockClocks .
Чтобы использовать плагин, включите следующую строку в блок `plugins` вашего файла build.gradle верхнего уровня:
классный
plugins { id 'androidx.benchmark' version '1.5.0' apply false }
Котлин
plugins { id("androidx.benchmark") version "1.5.0" apply false }
Затем примените плагин к файлу build.gradle вашего тестового модуля.
классный
plugins { id 'androidx.benchmark' }
Котлин
plugins { id("androidx.benchmark") }
Отзыв
Ваши отзывы помогают нам улучшать Jetpack. Если вы обнаружите новые проблемы или у вас появятся идеи по улучшению этой библиотеки, сообщите нам. Прежде чем сообщать о новых ошибках, изучите уже добавленные. Чтобы проголосовать за существующую проблему, нажмите на значок звездочки.
Дополнительную информацию можно найти в документации по системе отслеживания ошибок.
Версия 1.6
Версия 1.6.0-alpha01
7 октября 2026 г.
Выход androidx.benchmark:benchmark-*:1.6.0-alpha01. Версия 1.6.0-alpha01 содержит эти коммиты.
Новые функции
- Задача
:lockClocksтеперь использует режим "Производительность", если он доступен. Ранее использовалась реализация только с root-доступом. Это означает, что вы можете заблокировать тактовую частоту на гораздо большем количестве физических устройств для получения стабильных результатов, особенно полезных для стабильных микротестов. Если вы столкнетесь с проблемами, связанными с троттлингом, сообщите нам об этом. (I0d032)
Изменения в API
- Добавлено свойство
MemoryProfilingConfigвExperimentalConfig, чтобы разрешить макротестам использовать профилирование кучи Perfetto. (Ibc931)
Исправление ошибок
- Исправлена ошибка в микротесте, из-за которой иногда пропускалась запись трассировки метода, чтобы избежать ошибок ANR. (Ifc307)
- Исправлена проблема с захватом базового профиля для процессов, в которых не используется шаблон именования
:<suffix>. (I512ab) - Ссылки на трассировку профилировщика теперь указываются в отдельном разделе "Трассировка профилирования" в сводках IDE. (Id639f)
- Исправлена ошибка при очистке виртуальных файлов, из-за которой возникала ошибка
Unable to flush profiles for <packagename>. (I48ccc) - Исправлена синхронизация в трассировках методов, встроенных в трассировку системы. Ifd2e33 b/537688349
- Плагин Baseline Profile Gradle. Улучшена функция
CollectBaselineProfileTask, чтобы она могла находить файлыtest-result.pbв подкаталогах. Это обеспечивает совместимость с новой встроенной тестовой платформой. Id9c488 b/543799367
Версия 1.5
Версия 1.5.0
9 сентября 2026 г.
Выход сингла "androidx.benchmark:benchmark-*:1.5.0". Версия 1.5.0 содержит эти коммиты.
Версия 1.5.0-rc02
26 августа 2026 г.
Выход androidx.benchmark:benchmark-*:1.5.0-rc02. Версия 1.5.0-rc02 содержит эти коммиты.
Версия 1.5.0-rc01
12 августа 2026 г.
Выход сингла "androidx.benchmark:benchmark-*:1.5.0-rc01". Версия 1.5.0-rc01 содержит эти коммиты.
Версия 1.5.0-beta01
29 июля 2026 г.
Выход сингла "androidx.benchmark:benchmark-*:1.5.0-beta01". Версия 1.5.0-beta01 содержит эти коммиты.
Изменения в API
PerfettoCaptureиPerfettoTraceRuleтеперь могут захватывать трассировки в процессе и объединять их для целевого пакета. (I9a00b, b/497959820)
Версия 1.5.0-alpha07
1 июля 2026 г.
Выход сингла "androidx.benchmark:benchmark-*:1.5.0-alpha07". Версия 1.5.0-alpha07 содержит эти коммиты.
Изменения в API
- Упрощенный сбор данных трассировки Perfetto на устройстве. (I48810)
- Переместите экспериментальные API расширений
TraceProcessor.runServerизandroidx.benchmark:benchmark-macroвandroidx.benchmark:benchmark-commonи в пакетandroidx.benchmark. Это позволит использовать их в микротестах в будущем. (Ie25bb, b/393640753)
Исправление ошибок
- Обновите реализацию traceprocessor (а также несвязанный захват трассировки Perfetto) до версии Perfetto 56.0 (I8fb9d).
- По умолчанию для параметров
androidx.benchmark.requireAotиandroidx.benchmark.requireAotзадано значение true. Эти более безопасные настройки по умолчанию гарантируют, что компиляция выполняется до запуска микротестов (включено по умолчанию с плагином Gradle для тестирования при использовании AGP 8.4+), аmeasureRepeatedне используется в основном потоке, где это может вызвать ошибки ANR. (I1bc3c, b/379115078) - Время ожидания принудительного завершения Perfetto увеличено с 5 до 30 секунд (только для сеансов Perfetto, записанных в ходе тестирования производительности). Добавлена более понятная регистрация ошибок, возникающих при возникновении проблемы. (If188f, b/435589290)
Версия 1.5.0-alpha06
6 мая 2026 г.
Выход сингла "androidx.benchmark:benchmark-*:1.5.0-alpha06". Версия 1.5.0-alpha06 содержит эти коммиты.
Исправленные ошибки
- Корректно обрабатывать многопользовательские среды при перемещении файлов из выходного каталога теста производительности в дополнительный выходной каталог теста. (I90da5, b/489358149)
Версия 1.5.0-alpha05
25 марта 2026 г.
Выход сингла "androidx.benchmark:benchmark-*:1.5.0-alpha05". Версия 1.5.0-alpha05 содержит эти коммиты.
Исправление ошибок
- Обновлен
ArtMetricдля учета пакетов верхнего уровня, что особенно важно при использовании AGP/R8 9.1+ или глобального параметра-repackageclasses. РанееArtMetricне мог обнаружить эти загрузки классов в своих измеренияхartClassLoad.... (If8a35, b/487402058)
Новые функции
- Добавлен новый аргумент инструментария androidx.benchmark.requireLockedClocks, который позволяет включить проверку того, заблокированы ли тактовые частоты ЦП для устройств с настроенным root-доступом. (Id82e8, b/468039042)
Версия 1.5.0-alpha04
11 марта 2026 г.
Выход сингла "androidx.benchmark:benchmark-*:1.5.0-alpha04". Версия 1.5.0-alpha04 содержит эти коммиты.
Изменения в API
- Добавлены объекты
JvmOverloadsвPowerMetric.EnergyиPowerMetric.Power(Iac0d0, b/481371562).
Исправленные ошибки
- Обновлен
ArtMetricдля учета пакетов верхнего уровня, что особенно важно при использовании AGP/R8 9.1+ или глобального параметра-repackageclasses. РанееArtMetricне мог обнаружить эти загрузки классов в своих измеренияхartClassLoad.... (I207ca, b/487402058)
Версия 1.5.0-alpha03
11 февраля 2026 г.
Выход сингла "androidx.benchmark:benchmark-*:1.5.0-alpha03". Версия 1.5.0-alpha03 содержит эти коммиты.
- Добавлена зависимость от UiAutomator 2.4 beta.
Версия 1.5.0-alpha02
28 января 2026 г.
Выход androidx.benchmark:benchmark-*:1.5.0-alpha02. Версия 1.5.0-alpha02 содержит эти коммиты.
Исправленные ошибки
Добавлена частичная поддержка создания профилей базовой конфигурации для мультиплатформенных модулей Kotlin. Обычно зависимости от профилей можно определить с помощью конфигурации Gradle
baselineProfileв блоке зависимостей, но в настоящее время это не работает для модулей KMP.kotlin { androidLibrary { namespace = "com.example.namespace" compileSdk = 36 } sourceSets { androidMain.dependencies { // THIS DOES NOT WORK // baselineProfile(":yourProducerProject") } } }Вместо этого зависимости нужно определять с помощью расширения
baselineProfile. (Ie19c4)plugins { id("org.jetbrains.kotlin.multiplatform") id("com.android.kotlin.multiplatform.library") id("androidx.baselineprofile.consumer") } kotlin { androidLibrary { namespace = "com.example.namespace" compileSdk = 36 } sourceSets { androidMain.dependencies { // ... } } } // Define dependencies // This works ! baselineProfile { variants { androidMain { from(project(":yourProducerProject")) } } }
Версия 1.5.0-alpha01
17 декабря 2025 г.
Выход сингла "androidx.benchmark:benchmark-*:1.5.0-alpha01". Версия 1.5.0-alpha01 содержит эти коммиты.
- В Macrobenchmark 1.5 используется
UiAutomator2.4, что упрощает взаимодействие с измеряемым приложением. Объект MacrobenchmarkScope теперь расширяет UiAutomatorTestScope, что позволяет использовать современные APIUiAutomator, напримерonElement { ... }.click(). - Подробнее о
UiAutomator2.4 рассказывается в документации.
Новые функции
- Плагин Gradle для профиля базовой конфигурации больше не требует
newDsl=falseв AGP 9.0 (Iaaac7, b/443311090) - Расширьте конфигурацию трассировки, чтобы включить размер ядра (например, маленький/большой) в системные/perfetto трассировки, зафиксированные в тесте. (I8e397, b/457469959)
Изменения в API
- (В UiAutomator) Изменено ожидание
startActivity, чтобы дождаться нового окна. (I35da6, b/440021797) - Стабилизация API
BlackHoleв androidx.benchmark. (I2b67e, b/451749438) - Добавьте
@JvmOverloadsдля удобных конструкторов дляPerfettoTraceRule. (I1510a, b/443763207)
Версия 1.4
Версия 1.4.1
10 сентября 2025 г.
Выход androidx.benchmark:benchmark-*:1.4.1. Версия 1.4.1 содержит эти коммиты.
Исправленные ошибки
- Исправлена ошибка, из-за которой
perfettoSdkTracing=true(например, при трассировке Compose в микротесте) завершал целевой процесс, если он уже выполнялся, а StartupMode не был указан. (Ib2c1f)
Версия 1.4.0
30 июля 2025 г.
Выход androidx.benchmark:benchmark-*:1.4.0. Версия 1.4.0 содержит эти коммиты.
Важные изменения с версии 1.3.0
Микротест
- Задачи Gradle
lockClocksиunlockClocksперенесены в проекты тестирования производительности, а не на верхний уровень, чтобы соблюсти изоляцию проектов Gradle. - Проведен рефакторинг
BenchmarkRuleдля создания на основе сопрограмм и улучшения работыyield(). Это должно значительно снизить риск возникновения ошибок ANR во время выполнения тестов, особенно длительных тестов непрерывной интеграции. Примечание. Тесты производительности интерфейса должны выполняться сmeasureRepeatedOnMainThread.
Macrobenchmark
- Добавлено временное решение для API 34 и более поздних версий, чтобы устранить проблему с производительностью
CompilationMode.None(), которая возникала из-за того, что ART частично компилировал приложения после первого запуска. - Экспериментальная функция "Статистика запуска" может выделять некоторые распространенные проблемы в макротесте запуска, передавая
MacrobenchmarkRule(..., experimentalConfig = ExperimentalConfig(StartupInsightsConfig(isEnabled = true))). - Добавлен класс ArtMetric, который можно использовать для обнаружения JIT-компиляции и неоптимизированной загрузки классов. Обе эти функции полезны для проверки оптимизации базового профиля.
Профили базовой конфигурации
BaselineProfileRuleтеперь собирает профили для многопроцессных приложений.
Другие изменения
- TraceProcessor вынесен в отдельную библиотеку (
androidx.benchmark:benchmark-traceprocessor), чтобы его можно было использовать не только для показателейMacrobenchmark, но и в других случаях. Его также можно запустить на виртуальной машине Java для компьютеров, определив собственный ServerLifecycleManager.
Версия 1.4.0-rc01
18 июня 2025 г.
Выход androidx.benchmark:benchmark-*:1.4.0-rc01. Версия 1.4.0-rc01 содержит эти коммиты.
Исправленные ошибки
- Добавлено временное решение для изображений времени выполнения, из-за которых
CompilationMode.None()не измеряет производительность в худшем случае после первой итерации. К сожалению, это обходное решение требует задержки в 5 секунд, чтобы намеренно повредить образ среды выполнения в начале каждого набора макротестов (I4a4f1).
Версия 1.4.0-beta02
4 июня 2025 г.
Выход androidx.benchmark:benchmark-*:1.4.0-beta02. Версия 1.4.0-beta02 содержит эти коммиты.
Изменения в API
- Добавлен метод
BaselineProfileConfig.Builder, чтобы разработчикам на Java было проще вызыватьBaselineProfileRule.collectWithResults(). (I94905)
Версия 1.4.0-beta01
7 мая 2025 г.
Выход сингла "androidx.benchmark:benchmark-*:1.4.0-beta01". Версия 1.4.0-beta01 содержит эти коммиты.
Изменения в API
- Добавлен вариант конструктора
PerfettoTraceRule, который принимаетPerfettoConfig(Ie53ba).
Исправленные ошибки
- Изменен формат ссылки на статистику запуска
TraceProcessor, чтобы использовать правильный плагин и более понятный разделитель (:короче, чем%3A, но оба поддерживаются) (Ie18ef). - Для завершения процессов всегда используйте принудительную остановку, даже если у вас есть root-доступ и вы закрываете системные приложения. Исправляет исключения формы:
Expected no stdout/stderr from killall ... No such process. (Idca2c)
Внешний вклад
- Добавлен обработчик исключений прокси-сервера для
TraceProcessorHttpServer(I480f5).
Версия 1.4.0-alpha11
9 апреля 2025 г.
Выход сингла "androidx.benchmark:benchmark-*:1.4.0-alpha11". Версия 1.4.0-alpha11 содержит эти коммиты.
Изменения в API
- Изменен аргумент timeout в
TraceProcessor: Duration заменен на timeoutMs long для удобства вызывающего объекта Java. (I9fbb5) - Отметьте конструктор
TraceProcessorкак внутренний. Вызывающие стороны должны использоватьTraceProcessor.startServerилиTraceProcessor.runServer. Ia8c5b
Исправленные ошибки
- При завершении работы приложения с помощью команды
MacrobenchmarkScope.killProcessпроверьте результаты команды завершения, чтобы предотвратить незаметный сбой и ошибку времени ожидания. (I84555)
Обновление зависимостей
- Теперь эта библиотека предназначена для Kotlin 2.0 и требует KGP 2.0.0 или более поздней версии. (Idb6b5)
Версия 1.4.0-alpha10
26 марта 2025 г.
Выход сингла "androidx.benchmark:benchmark-*:1.4.0-alpha10". Версия 1.4.0-alpha10 содержит эти коммиты.
Изменения в API
- Время ожидания по умолчанию для загрузки сервера
TraceProcessorи запросов к нему увеличено до 120 секунд (ранее оно составляло 60 и 30 секунд соответственно). Теперь оба значения можно задать с помощью одного параметра. (Ifec87)
Исправленные ошибки
- Исправлены ошибки, которые возникали при тестировании или создании профилей приложений без
profileinstaller, и добавлена поддержкаBroadcastReciever. Это влияет только на запуски на устройствах с root-доступом. (Ied308)
Версия 1.4.0-alpha09
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. Это было связано с изменением в toybox
pgrep, из-за которого теперь для вывода полной командной строки требуется-a. (Idc991) - Отфильтруйте конфигурацию трассировки по умолчанию, чтобы снизить риск потери данных в трассировках на более новых уровнях API. (I54e8a)
- Добавлен экспериментальный аргумент
androidx.benchmark.killExistingPerfettoRecordings, который можно задать какfalse, чтобы разрешить продолжение сбора данных с помощью существующего инструментария Perfetto. По умолчанию существующие на устройстве записи трассировки Perfetto завершаются, чтобы избежать конфликтов. (I02a3c) - Поле JSON
context.osCodenameAbbreviatedтеперь будет иметь значениеRELдля выпущенных версий ОС с API 35 и выше, поскольку нечисловые кодовые названия больше не поддерживаются базовой платформой. (Ib17fd) - Исправлена ошибка, из-за которой происходил сбой в
FrameTimingMetricпри повторной синхронизации кадров. (I7c6f4, b/394610806) - Больше не предполагается, что
Choreographer#doFrameнаходится в верхней части стекового фрейма в основном потоке дляFrameTimingQuery. (Iee0e0, b/340206285)
Версия 1.4.0-alpha08
12 февраля 2025 г.
Выход сингла "androidx.benchmark:benchmark-*:1.4.0-alpha08". Версия 1.4.0-alpha08 содержит эти коммиты.
Изменения в API
- Перенесены API расширений
TraceProcessor.runSession()в экспериментальные, поскольку в Android они, скорее всего, будут преобразованы в конкретные конструкторы. (Ib0528, b/393640753) - Большая часть реализации Startup Insights теперь является общедоступной или экспериментальной и перенесена в артефакт
TraceProcessor. ПодробнееStartupInsights… (I0aa00) - Мы отказались от использования параметра
BenchmarkRule.runWithTimingDisabled {}в пользу параметраBenchmarkRule.runWithMeasurementDisabled {}, который более точно описывает поведение: все показатели приостановлены. Кроме того, мы добавили суперклассMicrobenchmarkScope, поскольку нельзя переопределить функциюrunWithMeasurementDisabled, чтобы открыть доступ, так как она встроена. (I9e23b, b/389149423, b/149979716) - Библиотеки Benchmark перенесены в Kotlin 2.0. (I9d1e0)
- Удален аргумент инструментария
androidx.benchmark.startupProfiles.enable. Он больше не нужен, так как его можно контролировать с помощью аргументаincludeInStartupProfileвBaselineProfileRule.collect(). (I39eb4)
Исправление ошибок
- Уменьшено количество внутренних вызовов функций Microbenchmark во время профилирования, чтобы сделать, например, трассировку методов более понятной (Ifaed8).
- Предположительное исправление сбоев: "Не удалось остановить [
ProcessPid(processName=perfetto, pid=...)]". Теперь Benchmark будет регистрировать сообщение вместо сбоя, когда фоновый процесс Perfetto не удается остановить перед запуском теста. (I37d3e, b/323601788) - Исправлена ошибка
IllegalStateExceptionsс ярлыком Expectedpm dump-profilesstdout, которая возникала из-за слишком строгой проверки формата выходных данных. (I358dc)
Версия 1.4.0-alpha07
29 января 2025 г.
Выход сингла "androidx.benchmark:benchmark-*:1.4.0-alpha07". Версия 1.4.0-alpha07 содержит эти коммиты.
Новые функции
- В
BaselineProfileRuleтеперь есть APIcollectWithResults(...), который включает список путей к вычисленным профилям. (I056f8) - Добавлен аргумент инструментирования
androidx.benchmark.measureRepeatedOnMainThread.throwOnDeadline, который можно установить в значение false, чтобы отключить поведение throw on deadline дляmeasureRepeatedOnMainThreadпри локальном тестировании. В других случаях это не рекомендуется, так как повышает вероятность ошибок ANR во время тестирования. (Idbeec, b/353226476)
Изменения в API
- В конструктор
MicrobenchmarkConfigдобавлен параметр@JvmOverloads. (I13fd3) - Переработан код
BenchmarkRule, чтобы он был основан на сопрограммах и лучше поддерживал поведениеyield(). В результате рефакторинга было удалено несколько экспериментальных APIBenchmarkState, но при необходимости они будут заменены. Кроме того, добавлено примечаниеrunWithMeasurementDisabled, чтобы уточнить поведение (все отслеживание приостановлено). В будущем поддержка правилаrunWithTimingDisabledбудет прекращена. (I19837, b/389149423, b/311242861) - Переместите
PerfettoTraceProcessorвTraceProcessorв новом артефактеandroidx.benchmark:benchmark-traceprocessorи сделайте большую часть его API неэкспериментальной. Если вы используете собственныеTraceMetricили другие инструменты, считывающие данные из трассировок, вам нужно будет перейти на новый импортTraceProcessor. Новый APITraceProcessorработает точно так же, как и старый, но представляет собой отдельную библиотеку интерфейсов (в некотором роде аналогичную уровнюandroidx.sqliteиз Room) с реализацией для Android, встроенной в macrobenchmark. Новый артефакт можно использовать и на JVM, но сейчас вам нужно запустить собственную копию двоичного файлаTraceProcessorи указать порт для подключения к нему. (I3a767, I62563, b/381134564)
Исправленные ошибки
- Теперь при сбое в целевом процессе и невозможности запустить его с помощью
MacrobenchmarkScope.startActivityAndWaitбудет показываться более понятное сообщение об ошибке, а не сообщение "Не удалось подтвердить запуск действия" (I3539b). - Исправлены синтаксические ошибки в примерах кода на Kotlin и подсветка синтаксиса в примерах кода на Java и build.gradle. (Ib3808)
- Уточнена документация по параметрам
ArtMetricиCaptureInfo. (I96e60)
Версия 1.4.0-alpha06
11 декабря 2024 г.
Выход сингла "androidx.benchmark:benchmark-*:1.4.0-alpha06". Версия 1.4.0-alpha06 содержит эти коммиты.
Изменения в API
- Удалено использование
@Language("sql")вPerfettoTraceProcessor.Session.query(), так как выделение/синтаксический анализ в Studio не работает. (Idc2fa, b/377733398)
Исправленные ошибки
- Теперь в этой библиотеке используются аннотации JSpecify для проверки на наличие нулевых значений, которые применяются к типам. Разработчикам на Kotlin следует использовать следующий аргумент компилятора, чтобы обеспечить правильное использование:
-Xjspecify-annotations=strict(это значение по умолчанию, начиная с версии 2.1.0 компилятора Kotlin). (I46810, b/326456246) - Исправлена ошибка, из-за которой
ArtMetricсообщал о загрузке класса, а не об инициализации. Документация дополнена пояснениями о поведении во время выполнения. (I9915c) - В многопользовательском режиме Android выполняйте команды от имени root только на устройствах с настроенным root-доступом. (I88b44)
Версия 1.4.0-alpha05
13 ноября 2024 г.
Выход androidx.benchmark:benchmark-*:1.4.0-alpha05. Версия 1.4.0-alpha05 содержит эти коммиты.
Исправленные ошибки
- Исправлена проблема на устройствах с API 34 и более поздних версий, из-за которой функция
CompilationMode.None()работала нестабильно и не показывала исходную производительность в худшем случае. Это позволяет обойти изменение платформы, которое позволяет ART частично компилировать приложения (влияет только на загрузку классов) вскоре после первого запуска.verify(Ie48d0) - Исправлена проблема, из-за которой в некоторых случаях (особенно при коротких трассировках) не удавалось получить данные о встроенных показателях Macrobenchmark Metrics, поскольку в трассировке Perfetto было усечено название процесса. Теперь макротест обходит эту проблему, ища усеченное название пакета во всех встроенных запросах в дополнение к ожидаемому названию пакета. Обратите внимание, что специальные реализации
TraceMetricили другие прямые вызовыPerfettoSession.queryмогут реализовывать такое же поведение, заменяяprocess.name LIKE "$packageName"в запросе Perfetto на(process.name LIKE "$packageName" OR process.name LIKE "$(packageName.takeLast(15))"). (I5bf01, b/377565760)
Версия 1.4.0-alpha04
30 октября 2024 г.
Выход сингла "androidx.benchmark:benchmark-*:1.4.0-alpha04". Версия 1.4.0-alpha04 содержит эти коммиты.
Новые функции
- (Экспериментальная функция) Включить создание профиля базовой конфигурации и тестирование приложений, установленных для дополнительного пользователя, например любого приложения на устройствах Android Auto без дисплея. Мы протестировали эту функцию в некоторых сценариях, но если у вас она не работает, сообщите нам об ошибке. (I9fcbe, b/356684617, b/373641155)
Исправленные ошибки
isProfileableтеперь всегда переопределяется в сборках для тестирования производительности, аisDebuggable– в сборках для тестирования производительности и сборкахnonMinified(захват профиля базовой конфигурации). I487fa, b/369213505- Исправлено обнаружение компиляции на некоторых физических устройствах до API 28. Это влияет на JSON
context.compilationMode, а также на поведениеandroidx.benchmark.requireAot=true(больше не выдает ошибку) (Ic3e08, b/374362482). - В показателях
CpuEventCounterтеперь выдается ошибка, если обнаружены недопустимые измерения, например instructions/cpucycles==0 (I8c503).
Версия 1.4.0-alpha03
16 октября 2024 г.
Выход сингла "androidx.benchmark:benchmark-*:1.4.0-alpha03". Версия 1.4.0-alpha03 содержит эти коммиты.
Изменения в API
- Macrobenchmark. Добавляет
ArtMetric, который можно использовать для проверки охвата профиля или общей производительности Android RunTime. Регистрирует количество и общую продолжительность JIT-компиляции, инициализации классов (если доступно) и проверки классов. Кроме того, измененияCaptureInfoвключают необязательную основную версию ART по умолчанию. (I930f7) - Добавьте
coefficientOfVariationв выходные данные JSON для сравнения, чтобы показать стабильность в рамках определенного запуска. (Ib14ea)
Исправленные ошибки
- Исправлена ошибка
CollectBaselineProfileTask, возникавшая, когда в названии устройства AVD были пробелы. (Ia0225, b/371642809) - Предполагаемое исправление ошибок, связанных с исключениями
StartupMode.COLD:Package <packagename> must not be running prior to cold start!. ТеперьMacrobenchmarkScope.killProcess()(включая запуск перед каждой итерацией, используемый для реализации поведенияStartupMode.COLD) будет ждать подтверждения того, что все процессы приложения остановлены. (I60aa6, b/351582215) - Исправлена ошибка UNLOCKED_, которая возникала на некоторых эмуляторах с root-доступом. (Ic5117)
- Теперь в этой библиотеке используются аннотации JSpecify nullness, которые относятся к типу type-use. Разработчикам на Kotlin следует использовать следующий аргумент компилятора, чтобы обеспечить правильное использование:
-Xjspecify-annotations=strict(это значение по умолчанию, начиная с версии 2.1.0 компилятора Kotlin). (I7104f, b/326456246)
Версия 1.4.0-alpha02
2 октября 2024 г.
Выход сингла "androidx.benchmark:benchmark-*:1.4.0-alpha02". Версия 1.4.0-alpha02 содержит эти коммиты.
Изменения в API
- Задачи Gradle
lockClocksиunlockClocksперенесены в проекты тестирования производительности и больше не доступны на верхнем уровне. Это изменение было необходимо, поскольку, к сожалению, невозможно зарегистрировать эти действия как действия верхнего уровня, не нарушая изоляцию проекта. (I02b8f, b/363325823)
Исправленные ошибки
- Теперь
BaselineProfileRuleсобирает профили для многопроцессных приложений, отправляя сигнал каждому запущенному процессу в конце блока для выгрузки профилей. Если компиляция на основе профиля не находит процесс для трансляции, она завершается ошибкой, поскольку в ней не должно быть данных профиля. Кроме того, добавлен аргумент инструментария для управления длительностью ожидания дампа:androidx.benchmark.saveProfileWaitMillis(I0f519, b/366231469) - Из версии Benchmark
1.3.2: исправлена ошибка, из-за которой Firebase Test Lab (FTL) не удавалось извлечь файлы базового профиля или результаты макротестирования из плагина Gradle для базового профиля. (I2f678, b/285187547)
Чтобы использовать FTL, примените плагин к базовому модулю профиля в блоке плагинов, указав:
plugins {
...
id("com.google.firebase.testlab")
}
а затем настройте Firebase Test Lab, указав:
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-alpha01
18 сентября 2024 г.
Выход сингла "androidx.benchmark:benchmark-*:1.4.0-alpha01". Версия 1.4.0-alpha01 содержит эти коммиты.
Новая функция – статистика запуска приложения
- В Macrobenchmark можно включить первую версию статистики запуска приложения. (09fae38)
Чтобы включить в тест запуска:
@Test
fun startup {
macrobenchmarkRule.measureRepeated(
…
packageName = "com.example.my.application.id"
metrics = listOf(StartupTimingMetric()),
iterations = 5,
startupMode = StartupMode.COLD,
compilationMode = CompilationMode.None(),
experimentalConfig = ExperimentalConfig(startupInsightsConfig = StartupInsightsConfig(isEnabled = true))
) {
scope.startActivityAndWait(...)
}
}
Затем при запуске теста запуска будет проанализирована трассировка на предмет распространенных проблем и выведена после метрик в выходные данные теста Studio на вкладке теста, например:
StartupBenchmark_startup[startup=COLD,compilationMode=None]
├── Metrics
│ ├── timeToFullDisplayMs min 1,147.2, median 1,208.8, max 1,307.4
│ └── timeToInitialDisplayMs min 1,147.2, median 1,208.8, max 1,307.4
├── App Startup Insights
│ ├── App in debuggable mode (expected: false)
│ │ └── seen in iterations: 0(true) 1(true) 2(true) 3(true) 4(true) 5(true) 6(true) 7(true) 8(true) 9(true)
│ ├── Potential CPU contention with another process (expected: < 100000000ns)
│ │ └── seen in iterations: 4(105022546ns)
│ └── Main Thread - Binder transactions blocked (expected: false)
│ └── seen in iterations: 7(true)
└── Traces
└── Iteration 0 1 2 3 4 5 6 7 8 9
Эта функция все ещё находится на стадии разработки, и в дальнейшем мы планируем улучшить документацию и расширяемость. Мы будем рады вашим отзывам.
Новые функции
- Добавлено свойство gradle
androidx.baselineprofile.suppressWarnings, чтобы скрыть все предупреждения о профиле базовой конфигурации. (314153a) - Показатели Microbench теперь отображаются в трассировках Perfetto в виде счетчиков. (3214854)
- Добавлены экспериментальные скрипты для отключения JIT (требуются root-права или перезапуск среды выполнения) и сброса состояния производительности/тестирования устройства. В настоящее время они не публикуются как задачи Gradle. (7c3732b)
- Добавлен аргумент benchmark, позволяющий пропускать тесты при запуске в эмуляторе. Если включена сборка
automaticGenerationDuring, тесты производительности также будут запускать создание профиля базовой конфигурации. Если используются эмуляторы, произойдет сбой. С новым аргументомskipBenchmarksOnEmulatorмы можем пропустить тест. (0c2ddcd) - Изменена логика включения событий производительности для API 23 и более поздних версий (2550048).
Изменения в API
- Существующий экспериментальный аргумент
PerfettoConfigдляMacrobenchmarkRule.measureRepeated()перемещен в новый объектExperimentalConfig.
Исправленные ошибки
- Увеличить количество попыток повтора
lockClocks.sh(99e9dac) - Не создавайте типы сборки
nonMinifiedи benchmark, если они уже существуют. Из-за ошибки типы сборкиnonMinifiedи benchmark создавались заново, даже если они уже существовали. (e75f0a5) - Игнорировать нетерминальные срезы из
TraceSectionMetricрезультатов. (a927d20) - Улучшена проверка эмулятора с учетом префикса
sdk_. (1587de8) - Считать невыполненные пакеты очищенными в
FrameTimingGfxInfoMetric. (35cc79c) - Исправлена ошибка, из-за которой
androidx.benchmark.cpuEventCounterсоздавал поврежденные значения для событий, не связанных с инструкциями. (06edd59) - Исправлена ошибка
resumeTiming/runWithTimingDisabled, из-за которой не соблюдался порядок приоритета показателей и приостановка или возобновление показателей с низким приоритетом значительно влияли на результаты показателей с высоким приоритетом. Например, если вы используете счетчики производительности ЦП с помощью аргумента инструментарияcpuEventCounter.enable, то при приостановке и возобновлении работы значение timeNs больше не будет значительно уменьшаться. (5de0968)
Версия 1.3
Версия 1.3.4
26 марта 2025 г.
Выход androidx.benchmark:benchmark-*:1.3.4. Версия 1.3.4 содержит эти коммиты.
Исправленные ошибки
- Исправлены несовместимости с изоляцией проектов Gradle в плагине Benchmark Baseline Gradle. (b/404523257)
Версия 1.3.3
16 октября 2024 г.
Выход сингла "androidx.benchmark:benchmark-*:1.3.3". Версия 1.3.3 содержит эти коммиты.
Исправленные ошибки
- Исправлена ошибка
CollectBaselineProfileTask, возникавшая, когда в названии устройства AVD были пробелы (Ia0225, b/371642809).
Версия 1.3.2
2 октября 2024 г.
Выход сингла "androidx.benchmark:benchmark-*:1.3.2". Версия 1.3.2 содержит эти коммиты.
Исправление ошибок
- Исправлена ошибка, из-за которой Firebase Test Lab не удавалось получить файлы результатов профиля базовой конфигурации или Macrobenchmark из плагина Gradle для профиля базовой конфигурации. (I2f678, b/285187547)
Чтобы использовать FTL, примените плагин к модулю профиля базовой конфигурации в блоке плагина:
plugins {
...
id("com.google.firebase.testlab")
}
а затем настройте Firebase Test Lab, указав:
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 для базового профиля использовал существующие
nonMinified…иbenchmark…, если они были созданы приложением, вместо того чтобы создавать оболочки. (Ia8934, b/361370179) - Исправлена ошибка
java.lang.AssertionError: ERRORS (not suppressed): EMULATOR, возникавшая при включенииautomaticGenerationDuringBuildв эмуляторах. Новый аргумент используется для пропуска теста. (If3f51, b/355515798) - Минимизация микротестов – сохранение подклассов
org.junit.runner.notification.RunListenerв библиотеке бенчмаркинга proguard (Ic8ed5, b/354264743) - Исправьте
TraceSectionMetric, чтобы игнорировать незавершенные фрагменты. Ранее при суммировании или поиске минимальной продолжительности такие видео считались имеющими продолжительность -1. (If74b7) - Исправлена ошибка в
FrameTimingGfxInfoMetric, из-за которой запуск показателя приводил к сбою, если процесс ещё не был запущен. (I6e412)
Версия 1.3.0
21 августа 2024 г.
Выход сингла "androidx.benchmark:benchmark-*:1.3.0". Версия 1.3.0 содержит эти коммиты.
Изменения в Microbenchmark с версии 1.2.0
- Трассировка методов по умолчанию включена в микротестах на большинстве устройств.
- Трассировка методов выполняется как отдельный этап после измерений. Это позволяет получить точные измерения и трассировки методов в рамках одного запуска теста.
- Трассировка методов в некоторых версиях ОС Android и ART влияет на последующие этапы сбора данных. В этих версиях трассировка методов отключена по умолчанию, и в выходных данных Studio выводится предупреждение.
- Контрольные показатели основного потока и ошибки ANR
- Добавлен
measureRepeatedOnMainThreadдля тестов производительности потока UI (например, взаимодействующих с интерфейсами Compose/View), чтобы избежать ошибок ANR при выполнении в течение многих секунд. - Трассировка методов пропускается, если ожидается, что она превысит крайний срок для предотвращения ANR. Чтобы отключить это поведение, задайте для
androidx.benchmark.profiling.skipWhenDurationRisksAnrзначение false (не рекомендуется для непрерывной интеграции, так как ошибки ANR могут вызвать проблемы при длительных запусках).
- Добавлен
- Минификация
- Встроенные правила ProGuard для улучшения микротестирования с включенной минификацией.
- Для минификации или R8 в модуле библиотеки требуется AGP 8.3. Включить их можно с помощью
android.buildTypes.release.androidTest.enableMinificationвbuild.gradle. - Добавлен экспериментальный API
BlackHole.consume(), чтобы предотвратить удаление неиспользуемого кода (If6812, b/286091643).
- Показатели
- Экспериментальная функция счетчика событий ЦП (показатели из
perf_event_open, для которых в большинстве версий платформы требуются root-права), доступ черезInstrumentationArgumentandroidx.benchmark.cpuEventCounter.enable(можно задать значениеtrue), а дляandroidx.benchmark.cpuEventCounter.eventsможно задать, например,Instructions,CpuCycles. Эта функция должна поддерживаться в некоторых эмуляторах userdebug, но поддержка не тестировалась во всех доступных эмуляторах.
- Экспериментальная функция счетчика событий ЦП (показатели из
Изменения в MACRObenchmark с версии 1.2.0
- Переработанный метод трассировки для макротестов.
- Теперь трассировки методов ограничены продолжительностью
measureBlockи могут охватывать несколько сеансов, если процесс запускается несколько раз. - Ранее трассировка методов работала только для тестов
StartupMode.COLDи не захватывала данные дляmeasureBlocks, которые не перезапускали целевой процесс. - В макротестах метод flush для трассировки фиксируется, поэтому трассировка методов должна быть полностью записана и действительна даже на медленных устройствах. (I6349a, b/329904950)
- Теперь трассировки методов ограничены продолжительностью
- Исправлена ошибка, из-за которой при завершении процесса во время отдельных итераций
warmUpдамп профиля ART создавался некорректно. Теперь измеренияCompilationMode.Partial(warmup=N)точнее. (I17923) - Сообщение о сбое трансляции Drop Shader
- В сообщение об ошибке трансляции шейдера добавлены советы по устранению неполадок
- Добавьте два аргумента инструментирования, чтобы переопределить поведение при удалении шейдеров и избежать сбоев при тестировании приложений без
ProfileInstaller1.3:androidx.benchmark.dropShaders.enable=true/false– позволяет пропустить удаление всех шейдеров (в том числе при запускеStartupMode.Cold), особенно при тестировании приложений, которые ещё не используют profileinstaller 1.3.androidx.benchmark.dropShaders.throwOnFailure=true/false– можно использовать для обработки сбоев при попытке удалить шейдеры, например при тестировании приложений без profileinstaller 1.3 (I4f573).
- Добавлен экспериментальный вариант
MacrobenchmarkRule#measureRepeated, который принимает пользовательскийPerfettoConfigдля полностью настраиваемой записи трассировки Perfetto. Обратите внимание, что неправильно настроенные конфигурации могут привести к сбоям встроенных классов Metric. (Idfd3d, b/309841164, b/304038384) - Отмените фоновые задачи dexopt перед запуском Macrobenchmark, чтобы уменьшить помехи. (I989ed)
- Теперь Macrobenchmark ожидает одну секунду, пока целевое приложение очистит профиль ART (ранее ожидание длилось 500 мс). (I85a50, b/316082056)
- TraceSectionMetric overhaul
- Примечание. Указанные ниже изменения в
TraceSectionMetricмогут повлиять на результаты использования CI, а также привести к разрывам или ошибкам при синтаксическом анализе. - Теперь по умолчанию используется сумма, поскольку этот показатель чаще всего применяется для повторяющихся событий, а при использовании первого значения данные в таких случаях отбрасываются.
- Изменения, позволяющие настраивать режим работы и выбирать его из большего числа вариантов
- Названия режимов теперь встроены в названия выходных показателей (в Творческой студии и JSON).
- Теперь поддерживаются фрагменты, созданные с помощью
Trace.{begin|end}AsyncSection.
- Примечание. Указанные ниже изменения в
- Показатели
- Питание – добавлены
PowerMetric.deviceSupportsHighPrecisionTracking,PowerMetric.deviceBatteryHasMinimumCharge()иPowerMetric.deviceSupportsPowerEnergy() - Переименовано
Metric.getResultвgetMeasurements, чтобы соответствовать типу возвращаемого значения. - Добавлены ярлыки log.w / exception для всех сбоев при обнаружении запуска. Это не меняет текущее поведение (поэтому некоторые ошибки вызывают сбои, а другие не позволяют обнаружить запуск), а просто делает его более понятным. Обычно
Log.w()и не передают показатели запуска те приложения, в которых отсутствуют события, не связанные с кадрами, и при обнаружении запуска возникают исключения, за исключением информации о времени формирования кадра (из фрагментов UI/RT). (Id240f, b/329145809) - Добавлен показатель
frameCountвFrameTimingMetric, чтобы помочь в обнаружении сценариев, в которых показатели меняются из-за изменения количества созданных кадров (добавлены новые анимации, исправлены проблемы с недействительностью). (I1e5aa) - Добавлено пояснение, что
frameOverrunMs– предпочтительный показатель для отслеживания, если он доступен в документах, и почему. (I18749, b/329478323) - Исправлена ошибка, из-за которой незавершенные кадры в начале и конце трассировки могли объединяться в пару, что приводило к неверному отчету о едином чрезвычайно длинном кадре. (I39353, b/322232828)
- Улучшено сообщение об ошибке
FrameTimingMetric, когда кадры не создаются. Теперь при сбое синтаксического анализа показателей всегда выводится ссылка на трассировку, чтобы помочь в диагностике проблемы. (I956b9) - Устранен сбой в
FrameTimingMetric, который возникал из-за того, что не удавалось проанализировать идентификатор кадра, особенно на некоторых устройствах производителей оригинального оборудования. (Ia24bc, b/303823815, b/306235276) - Снижена строгость проверок в
FrameMetricsи добавлена более подробная информация в сообщения об ошибках. (Iadede)
- Питание – добавлены
Изменения в захвате профиля базовой конфигурации и плагине Gradle с версии 1.2.0
- Максимальная рекомендуемая версия AGP увеличена до 9.0.0-alpha01.
- Убедитесь, что задачи
mergeArtProfileиmergeStartupProfileвсегда ожидают создания профиля базовой конфигурации. (I623d6, b/343086054) - При успешном создании базового профиля будет выведена сводка изменений (I824c8, b/269484510).
- Добавлен DSL для отключения предупреждений (Ic4deb, b/331237001).
- Исправлена ошибка, из-за которой при отключенной функции
automaticGenerationDuringBuildв контрольных показателях использовались сгенерированные базовые профили (Ic144f, b/333024280). - Исправлены переопределения свойств плагина Gradle
BaselineProfile, чтобы включить создание профиля базовой конфигурации и тестирование производительности при настройке типа сборкиnonMinifiedили тестирования производительности. (Ib8f05, b/324837887) - Исправлена ошибка, из-за которой профили базовой конфигурации библиотек включались в AAR до AGP 8.3.0-alpha15. (I1d2af, b/313992099)
- Исправлена ошибка, из-за которой в конце задачи по созданию профиля не показывался URL выходных данных. (I802e5, b/313976958)
Другие важные изменения по сравнению с версией 1.2.0
- Запись трассировки
- Ошибка EXITCODE 2 при запуске Perfetto заменена на предупреждение в журнале.
- Включено отслеживание AIDL по умолчанию в тестах производительности(требуется API 28) (Ia0af2, b/341852305).
- Включить отслеживание тегов Porter по умолчанию в контрольных показателях. Например, это позволяет отслеживать точки трассировки wakelock. (Icfe44, b/286551983)
- Увеличен тайм-аут начала сбора данных трассировки, чтобы избежать сбоев при запуске трассировки на более медленных устройствах (I98841, b/329145808).
- Добавлены общедоступные API
PerfettoTraceProcessor.Session.queryMetricsс вариантами JSON, textproto и proto binary (недекодированный). Они позволяют запрашивать показатели, встроенные вTraceProcessor(I54d7f, b/304038382). - Включите блокировку начала записи трассировки Perfetto, чтобы снизить риск потери данных в начале трассировки. Поддерживается только на устройствах с API 33 и выше. (Ie6e41, b/310760059)
- Вывод в формате JSON
- В контекст тестирования в выходных данных JSON добавлена дополнительная информация:
context.artMainlineVersion– целочисленная версия основного модуля Art (если он есть на устройстве, иначе –-1).context.build.id– соответствует android.os.Build.ID.context.build.version.codename– соответствует android.os.Build.VERSION.CODENAME.context.build.version.abbreviatedCodename– соответствует первой букве кодового названия предварительного выпуска (в том числе в конечных сборках) (Ie5020).
- В выходные данные JSON добавлен список
profilerOutput, чтобы упростить работу с инструментами для трассировки профилирования, такими как Perfetto и трассировка методов (I05ddd, b/332604449). - Добавлено предупреждение о том, что при использовании Инструмента оркестрации тестов Android в модулях тестирования производительности выходные JSON-файлы для каждого модуля будут перезаписываться. (Ia1af6, b/286899049)
- Выдавать ошибку, если длина названия файла превышает 200 символов, чтобы избежать непонятных сбоев при записи или постобработке файлов. (I4a5ab)
- В контекст тестирования в выходных данных JSON добавлена дополнительная информация:
Версия 1.3.0-rc01
7 августа 2024 г.
Выход сингла "androidx.benchmark:benchmark-*:1.3.0-rc01". Версия 1.3.0-rc01 содержит эти коммиты.
Исправленные ошибки
- Исправлена ошибка, из-за которой
androidx.benchmark.cpuEventCounterсоздавал поврежденные значения для событий, не связанных с инструкциями (I7386a, b/286306579). - Исправлена ошибка
resumeTiming/runWithTimingDisabled, из-за которой не соблюдался приоритет показателей. Теперь приостановка или возобновление показателей с более низким приоритетом значительно меньше влияет на результаты показателей с более высоким приоритетом. Например, если вы используете счетчики производительности ЦП с аргументом инструментированияcpuEventCounter.enable, значение timeNs больше не будет значительно уменьшаться при приостановке и возобновлении. (I39c2e, b/286306579, b/307445225) - Снижена вероятность того, что выборка стека вызовет ошибку
measureRepeatedOnMainThreadиз-за жесткого тайм-аута основного потока. Для этого преобразование выборки стека вызовов было перенесено из основного потока. (I487a8, b/342237318) - Удалено ручное структурирование доступа к новым API платформы, поскольку это происходит автоматически с помощью моделирования API при использовании R8 с AGP 7.3 или более поздней версии (например, R8 версии 3.3) и для всех сборок при использовании AGP 8.1 или более поздней версии (например, D8 версии 8.1). Клиентам, которые не используют AGP, рекомендуется перейти на D8 версии 8.1 или более поздней. Подробнее об этом читайте здесь. (I9496c, b/345472586)
- Добавлена проверка версии AGP для отправки названия пакета в качестве аргумента инструкции. До версии 8.4.0 AGP название целевого пакета приложения нельзя было передать приложению для тестирования с помощью аргументов. (0c72a3f)
Версия 1.3.0-beta02
10 июля 2024 г.
Выход androidx.benchmark:benchmark-*:1.3.0-beta02. Версия 1.3.0-beta02 содержит эти коммиты.
Исправленные ошибки
- При запуске Perfetto корректно обрабатывается EXITCODE
2: регистрируется предупреждение, но процесс продолжается.
Версия 1.3.0-beta01
12 июня 2024 г.
Выход androidx.benchmark:benchmark-*:1.3.0-beta01. Версия 1.3.0-beta01 содержит эти коммиты.
Изменения в API
- Для единообразия название
MethodTracing.affectsMeasurementOnThisDeviceизменено наAFFECTS_MEASUREMENT_ON_THIS_DEVICE. (I1bdfa) - Добавлен экспериментальный API
BlackHole.consume(), который предотвращает удаление неиспользуемого кода в микротестах. (If6812, b/286091643) - Теперь микротест будет правильно вызывать исключение, чтобы трассировка методов не влияла на результаты измерений. Это происходит на некоторых устройствах, когда принудительно включена трассировка метода (с помощью аргументов инструментирования или
MicrobenchmarkConfig) и если измерение выполняется после трассировки метода. Проблема затрагивает устройства с API 26–30 или определенными версиями основного модуля ART. Их можно обнаружить во время выполнения с помощьюProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice. (Iafb92, b/303660864)
Исправленные ошибки
- Максимальная рекомендуемая версия AGP теперь 9.0.0-alpha01. (I5bbb0)
- В контекст тестирования добавлен режим компиляции (If5612, b/325512900).
- Включить трассировку AIDL по умолчанию (требуется API 28) (Ia0af2, b/341852305)
- Добавлена дополнительная информация в контекст контрольных показателей в выходных данных JSON:
context.artMainlineVersion– целочисленная версия основного модуля Art (если он есть на устройстве, в противном случае – -1).context.build.idравноandroid.os.Build.IDcontext.build.version.codenameравноandroid.os.Build.VERSION.CODENAMEcontext.build.version.abbreviatedCodename– первая буква кодового названия предварительного выпуска (даже в конечных сборках) (Ie5020).
- Исправлена ошибка
StackSampling, из-за которой не учитывалось правилоandroidx.benchmark.profiling.sampleDurationSeconds(Ib1d53). - Измените зависимость macro->common на
api(), чтобы было проще использовать, например,PerfettoTraceиPerfettoConfig. (Icdae3, b/341851833) - Убедитесь, что задачи
mergeArtProfileиmergeStartupProfileвсегда ожидают создания профиля базовой конфигурации. (I623d6, b/343086054) - Принимая решение о том, следует ли включить вариант, учитывайте его статус. (I5d19e, b/343249144)
- Увеличено время ожидания по умолчанию для запуска обработчика трассировки Perfetto. (I87e8c, b/329145808)
Версия 1.3.0-alpha05
14 мая 2024 г.
Выход сингла "androidx.benchmark:benchmark-*:1.3.0-alpha05". Версия 1.3.0-alpha05 содержит эти коммиты.
Исправление ошибок
- Теперь при возврате нулевых значений для всех итераций показателя макротеста выдается более понятное исключение (Iab58f, b/314931695).
- В правила ProGuard для микротестов добавлены дополнительные правила обходных решений, в том числе поддержка правил прослушивателей и других наблюдаемых предупреждений и ошибок. (I14d8f, b/329126308, b/339085669)
- Трассировка методов выполняется как отдельный этап во время макротестирования и больше не влияет на измерения. (If9a50, b/285912360, b/336588271)
- В сообщение об ошибке при сбое трансляции шейдера добавлены дополнительные советы по устранению неполадок. (I5efa6, b/325502725)
Версия 1.3.0-alpha04
1 мая 2024 г.
Выход androidx.benchmark:benchmark-*:1.3.0-alpha04. Версия 1.3.0-alpha04 содержит эти коммиты.
Изменения в API
- Добавлен экспериментальный вариант
MacrobenchmarkRule#measureRepeated, который принимает пользовательскийPerfettoConfigдля полностью настраиваемой записи трассировки Perfetto. Обратите внимание, что неправильно настроенные конфигурации могут привести к сбоям встроенных классов Metric. Idfd3d, b/309841164, b/304038384 - Переименование
PowerMetric.deviceSupportsPowerEnergyвPowerMetric.deviceSupportsHighPrecisionTrackingдля ясности (I5b82f) - Добавлены параметры
PowerMetric.deviceBatteryHasMinimumCharge()иPowerMetric.deviceSupportsPowerEnergy(), позволяющие изменять или пропускать тесты в зависимости от возможностей устройства по измерению энергопотребления. (I6a591, b/322121218)
Исправленные ошибки
- Добавлено сравнение с предыдущим профилем базовой конфигурации (I824c8, b/269484510).
- Добавлен DSL для отключения предупреждений (Ic4deb, b/331237001).
- Изменено исключение для журнала информации, когда варианты тестирования отключены (I8a517, b/332772491).
- Упрощен сбор трассировок методов для Macrobenchmark, ограниченных продолжительностью фактического
measureBlock(). Ранее он запускался при запуске целевого процесса и поддерживал только холодный запуск (Iee85a, b/300651094). - Исправлена ошибка, из-за которой происходил сбой, когда процессор трассировки Perfetto запускался медленно (I98841, b/329145808).
Версия 1.3.0-alpha03
17 апреля 2024 г.
Выход сингла "androidx.benchmark:benchmark-*:1.3.0-alpha03". Версия 1.3.0-alpha03 содержит эти коммиты.
Новые функции
- Добавляет общедоступные API
PerfettoTraceProcessor.Session.queryMetricsс вариантами JSON, textproto и proto binary (недекодированный). Они позволяют запрашивать показатели, встроенные в TraceProcessor (I54d7f, b/304038382). - В выходные данные JSON добавлено поле
profilerOutput, чтобы упростить работу с инструментами для трассировки профилирования (например, Perfetto, трассировка методов). (I05ddd, b/332604449) - Добавлен тег питания для тестирования Perfetto Config. Например, это позволяет отслеживать точки трассировки wakelock. (Icfe44, b/286551983)
- Добавлен аргумент inst
androidx.benchmark.profiling.skipWhenDurationRisksAnr, которому можно присвоить значение false, чтобы не пропускать трассировки методов, когда ожидаемая продолжительность может вызвать ошибку ANR. Настоятельно рекомендуем избегать этого при непрерывной интеграции. - Добавлен экспериментальный аргумент inst
androidx.benchmark.profiling.perfCompare.enable. Установите для него значение true, чтобы сравнить время между этапами измерения и профилирования. Полезно, например, для оценки накладных расходов на трассировку методов. (I61fb4, b/329146942)
Изменения в API
- Изменен тип
TraceSectionMetric.Modeна запечатанный класс, чтобы в будущем можно было расширять его без нарушения исчерпывающих операторов when (I71f7b). - Добавлены аргументы
TraceSectionMetric.Mode.Averageи.Count, а также изменен порядок аргументов, чтобы более распространенный аргумент (mode) находился раньше в списке аргументов, что снижает необходимость указывать имена параметров. (Ibf0b0, b/315830077, b/322167531) - Название
Metric.getResultизменено наgetMeasurementsв соответствии с типом возвращаемого значения (I42595).
Исправление ошибок
- Исправлена ошибка, из-за которой в тестах производительности использовались сгенерированные профили базовой конфигурации, когда параметр
automaticGenerationDuringBuildбыл отключен (Ic144f, b/333024280). - Исправлены переопределения свойств плагина Gradle
BaselineProfile, чтобы можно было создавать базовые профили и проводить тестирование при настройке типа сборкиnonMinifiedили типа сборки для тестирования. (Ib8f05, b/324837887) - Исправлена очистка трассировок методов в Macrobenchmark, чтобы они полностью записывались и были действительными даже на медленных устройствах. (I6349a, b/329904950)
- Включите блокировку запуска при записи трассировки Perfetto, чтобы снизить риск потери данных в начале трассировки. Поддерживается только в API 33 и более поздних версиях (Ie6e41, b/310760059).
- Добавлено предупреждение об использовании Инструмента оркестрации тестов Android в модулях тестирования производительности, так как это приведет к многократной перезаписи выходных JSON-файлов для каждого модуля. (Ia1af6, b/286899049)
- Принудительное использование запятой в качестве разделителя групп разрядов в Творческой студии независимо от региональных настроек устройства (I3e921, b/313496656).
TraceSectionMetricтеперь поддерживает фрагменты, созданные с помощьюTrace.{begin|end}AsyncSection. (I91b32, b/300434906)- Добавлены ярлыки log.w / exception для всех сбоев при обнаружении запуска. Это не изменит текущее поведение (некоторые ошибки будут вызывать исключения, а другие – нет), но сделает его более понятным. Обычно
Log.w()и не могут передать показатели запуска те приложения, в которых отсутствуют события, не связанные с кадрами, и при обнаружении запуска возникают исключения, за исключением информации о времени формирования кадра (из фрагментов UI/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 в микротестах с помощью встроенных правил ProGuard. Обратите внимание, что эта поддержка является экспериментальной и для минификации тестов модулей библиотеки требуется AGP 8.3. Чтобы включить минификацию и оптимизацию 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, чтобы избежать ненужного слова should (Ia8f00, b/303387299). - Добавлено
BenchmarkRule.measureRepeatedOnMainThread, чтобы тесты основного потока (например, те, которые касаются представлений или интерфейсов Compose) не вызывали ошибки ANR, особенно во время больших наборов в CI. (I5c86d) - Добавлен класс
FrameTimingGfxInfoMetric– экспериментальная альтернативная реализация классаFrameTimingMetric, в которой измерения поступают непосредственно с платформы, а не извлекаются из трассировки Perfetto. (I457cb, b/322232828) - Добавлена возможность выгружать профиль ART во время отдельных итераций
warmUp. (I17923) - В API
TraceSectionMetricвнесены следующие изменения:- Добавить
Mode.Min,Mode.Max - Добавьте аргумент ярлыка, чтобы переопределить название раздела в качестве ярлыка показателя.
- В выходные данные добавлено название режима, чтобы уточнить значение показателя.
- По умолчанию теперь используется сумма, поскольку этот показатель чаще всего применяется для повторяющихся событий. Учитывайте эти изменения при использовании CI, так как они могут привести к разрывам или ошибкам при анализе. (Ic1e82, b/301892382, b/301955938)
- Добавить
Исправленные ошибки
- Улучшено сообщение об ошибке в плагине Gradle для профиля базовой линии, когда указанное управляемое устройство не существует (Idea2b, b/313803289)
- Исправлена ошибка, из-за которой профили базовой конфигурации библиотек включались в AAR до AGP 8.3.0-alpha15 (I1d2af, b/313992099).
- Исправлена ошибка, из-за которой в конце задачи по созданию профиля запуска и базового профиля выводился URL (I802e5, b/313976958).
- Изменены тайм-ауты источников данных, чтобы устранить проблему
java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)](I8dc7d, b/323601788) - Добавьте два аргумента инструментирования, чтобы переопределить поведение при удалении шейдеров и избежать сбоев при тестировании приложений без
ProfileInstaller1.3:androidx.benchmark.dropShaders.enable=true/false– позволяет пропустить удаление всех шейдеров (в том числе при запускеStartupMode.Cold), особенно при тестировании приложений, которые ещё не используют profileinstaller 1.3.androidx.benchmark.dropShaders.throwOnFailure=true/false– можно использовать для обработки сбоев при попытке удалить шейдеры, например при тестировании приложений без profileinstaller 1.3 (I4f573).
- Пропускать трассировку метода в потоке UI, если ожидается, что она займет больше нескольких секунд, и очищать трассировки методов при возникновении ошибки. (I6e768)
- Выбрасывать исключение, если длина названия файла превышает 200 символов, чтобы избежать неясных сбоев при записи или постобработке файлов. (I4a5ab)
- Исправлена ошибка, из-за которой незавершенные кадры в начале и конце трассировки могли быть объединены, что приводило к неправильному отображению одного очень длинного кадра. (I39353, b/322232828)
- Используйте
--skip verificationв API 30 и более поздних версий при переустановке пакета в API 30–33, чтобы очистить профили ART в пользовательских сборках. Это позволяет обойти предупреждения Play Защиты, которые вызывают сбои на некоторых устройствах. (Ic9e36) - Используйте
am force-stop, чтобы закрывать приложения, если они не являются системными, например "Системный интерфейс" или "Панель запуска". (I5e028) - Теперь Macrobenchmark ждет
1 second, пока целевое приложение не сбросит профиль ART (ранее ожидание составляло500 ms). (I85a50, b/316082056) - Улучшено сообщение об ошибке
FrameTimingMetric, когда кадры не создаются. Теперь при сбое синтаксического анализа показателей всегда выводится ссылка на трассировку, чтобы помочь в диагностике проблемы. (I956b9) - Устранен сбой в
FrameTimingMetric, который возникал из-за того, что не удавалось проанализировать идентификатор кадра, особенно на некоторых устройствах производителей оригинального оборудования. (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завершались сбоем и сообщением "Package $package must not be running prior to cold start!" (Пакет $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).
- Добавлены свойства для поддержки интеграции тестового запуска AS (b/309805233), (b/309116324).
Версия 1.2.0
18 октября 2023 г.
Выход сингла "androidx.benchmark:benchmark-*:1.2.0". Версия 1.2.0 содержит эти коммиты.
Важные изменения с версии 1.1.0
Профили базовой конфигурации
- Новый плагин Gradle для базового профиля автоматизирует захват и включение базовых профилей в рабочий процесс тестирования и сборки.
BaselineProfileRule.collect– стабильная, упрощенная версия экспериментального APIBaselineProfileRule.collectBaselineProfile.- Просто укажите
packageNameи управляйте приложением.
- Просто укажите
- Теперь при создании базовых профилей для библиотек можно фильтровать сгенерированные правила в коде (аргумент
BaselineProfileRule.collect) или с помощью плагина Gradle. - Исправления
- Исправлен сбор профилей базовой конфигурации на Android U+ (Id1392, b/277645214).
Macrobenchmark
- Сборник
- Теперь Macrobenchmark правильно сбрасывает состояние компиляции для каждой компиляции. Для этого требуется переустановить APK до Android 14, поэтому настоятельно рекомендуется проводить тестирование на Android 14 и более поздних версиях, если вы хотите сохранить состояние (например, вход пользователя) в том, что измеряется.
- Вы также можете управлять компиляцией приложения отдельно и пропускать ее с помощью
CompilationMode.Ignore()или аргумента инструментирования.
Аргументы инструментирования
- Поддержка аргумента
androidx.benchmark.dryRunMode.enable(уже доступна в микротестировании) для более быстрой проверки (например, при создании контрольного показателя или перед отправкой). - Поддержка
androidx.benchmark.profiling.mode=StackSamplingиMethodTracing. - Добавлен тег
androidx.benchmark.enabledRules, позволяющий фильтровать тесты правил базового профиля и макротестов во время выполнения. - Добавлен аргумент
androidx.benchmark.perfettoSdkTracing.enable, позволяющий включить трассировку с помощью tracing-perfetto, например трассировку рекомпозиции Compose. Обратите внимание, что при использовании сStartupMode.COLDвремя будет значительно затронуто, поскольку библиотека трассировки загружается и включается во время запуска приложения.
- Поддержка аргумента
Требования
- Теперь для Macrobenchmark требуется
ProfileInstallerверсии 1.3.0 или более поздней в целевом приложении, чтобы включить захват или сброс профиля и очистку кеша шейдеров.
- Теперь для Macrobenchmark требуется
Новые экспериментальные Metric API
- Добавлен экспериментальный класс
TraceSectionMetric, который позволяет извлекать простые временные данные из блоковtrace("") {}в приложении, и класс TraceMetric, который позволяет использовать все возможности запросов PerfettoTraceProcessor. - Добавлена экспериментальная функция
PowerMetricдля сбора информации об энергопотреблении. - Добавлено экспериментальное поле
MemoryCountersMetricдля подсчета отказов страницы. - Добавлен экспериментальный API
PerfettoTraceProcessor, который используется внутри системы для извлечения показателей из трассировок системы (также известных как трассировки Perfetto).
- Добавлен экспериментальный класс
Исправления
- Исправлены сбои при установке или извлечении профилей из приложения, установленного из нескольких APK-файлов (например, из набора App Bundle).
- Исправлена ошибка, из-за которой
FrameTimingMetricигнорировал кадры с несовпадающими идентификаторами (обычно это кадры во время пульсаций на устройствах с API 31 и выше) (I747d2, b/279088460). - Исправлены ошибки синтаксического анализа трассировок размером более 64 МБ (Ief831, b/269949822).
- Уточнены ошибки, возникающие, когда образ ОС устройства (особенно эмулятора) неправильно настроен для трассировки или компиляции.
- Пропускать проверку уровня заряда батареи для устройств без батареи (микро и макро)
- Улучшен вывод файлов, добавлены более понятные сообщения об ошибках при указании недопустимых выходных каталогов и более безопасные значения по умолчанию.
- Повышена стабильность
StartupMode.COLDза счет постоянного сброса кеша шейдеров (также доступно черезMacrobenchmarkScope.dropShaderCache). - Исправлена ошибка, из-за которой в
startActivityAndWaitне работало резервное объявление в режиме Leanback.
Микротестирование
- Функции
- Профилирование было перенесено на отдельный этап после других показателей, поэтому один запуск теста может отображать как точное время, так и результаты профилирования.
- Экспериментальные API
- Добавлен экспериментальный API
MicrobenchmarkConfigдля определения специальных показателей и настройки трассировки и профилирования. Можно использовать для записи трассировок методов или точек трассировки (но помните о накладных расходах на трассировку). - Добавлены экспериментальные API для управления
BenchmarkStateотдельно отBenchmarkRuleбез JUnit. - Добавлена экспериментальная запись
PerfettoTrace, позволяющая записывать трассировки Perfetto с пользовательской конфигурацией отдельно от API для тестирования производительности.
- Добавлен экспериментальный API
- Исправления
- Исправлена ошибка, из-за которой в выводе теста производительности Android Studio отсутствовали начальные пробелы.
- Исправлена проблема, из-за которой предупреждения не печатались в выходных данных контрольных показателей Android Studio.
- Исправлен сбой
SampledProfilingна устройствах с Android 13 (API уровня 33) и более поздними версиями. - Значительно улучшена производительность
dryRunModeза счет пропускаIsolationActivityи трассировки Perfetto (в режиме пробного выполнения на старых версиях ОС скорость увеличилась до 10 раз).
Версия 1.2.0-rc02
6 октября 2023 г.
Выход androidx.benchmark:benchmark-*:1.2.0-rc02. Версия 1.2.0-rc02 содержит следующие коммиты:
Исправленные ошибки
- Исправлена ошибка, из-за которой выходные данные файла контрольных показателей нарушали копирование файлов плагинов
BaselineProfile. Файлы были созданы и скопированы с устройства, но переименованы так, что плагин Gradle не мог их обнаружить. I8dbcc, b/303034735, b/296453339 - Уточнены сообщения об ошибках загрузки
tracing-perfettoпри внедрении из модуля макротестирования в целевое приложение.
Версия 1.2.0-rc01
20 сентября 2023 г.
Выход сингла "androidx.benchmark:benchmark-*:1.2.0-rc01". Версия 1.2.0-rc01 содержит эти коммиты.
Исправленные ошибки
- Теперь при сбое инициализации трассировки Perfetto SDK в Benchmark выдается исключение с инструкциями по устранению проблемы. (I6c878, b/286228781)
- Исправлен сбой из-за нехватки памяти при преобразовании трассировки метода ART в формат Perfetto. (I106bd, b/296905344)
- (Macrobenchmark) Уточнено название трассировки метода при наличии ссылки в выходных данных теста Studio. Исправлены названия файлов трассировки метода, чтобы они были уникальными на устройстве/хосте и не перезаписывались при запуске нескольких тестов производительности. (I08e65, b/285912360)
- Устройство должно быть активным при создании базового профиля. (I503fc)
Версия 1.2.0-beta05
30 августа 2023 г.
Выход сингла "androidx.benchmark:benchmark-*:1.2.0-beta05". Версия 1.2.0-beta05 содержит эти коммиты.
Новые функции
- Плагин Baseline Profile Gradle теперь поддерживает плагин Android Gradle 8.3. (aosp/2715214)
Версия 1.2.0-beta04
23 августа 2023 г.
Выход сингла "androidx.benchmark:benchmark-*:1.2.0-beta04". Версия 1.2.0-beta04 содержит следующие коммиты:
Новые функции
- Плагин Gradle для базовых профилей теперь поддерживает плагин Android Gradle 8.3. (aosp/2715214)
Исправленные ошибки
- Исправлены ошибки при записи, перемещении и извлечении файлов (особенно из параметризованных тестов) за счет дополнительной очистки названий выходных файлов, в которых не должно быть символов "=" и ":". (I759d8)
Версия 1.2.0-beta03
9 августа 2023 г.
Выход сингла "androidx.benchmark:benchmark-*:1.2.0-beta03". Версия 1.2.0-beta03 содержит следующие коммиты:
Изменения в API
- Добавлен аргумент для фильтрации
TraceSectionMetricтолько по целевому пакету, включен по умолчанию (Ia219b, b/292208786).
Исправление ошибок
- Аргумент инструментирования
fullTracing.enableпереименован вperfettoSdkTracing.enableдля согласованности с названием артефакта и другими ссылками.fullTracing.enableбудет работать как резервный вариант. (I7cc00) - Внутренние точки трассировки библиотеки Benchmark (включая трассировку циклов и фаз микротестов) теперь будут отображаться в средстве просмотра трассировки системы Android Studio и вкладываться в правильный процесс в Perfetto. (I6b2e7, b/293510459)
- Удалена ошибка NOT-PROFILEABLE в Macrobenchmark на устройствах с API 31 и более поздних версий. Проверка profileable пропускается на устройствах с настроенным root-доступом и сборками eng/userdebug. (I2abac, b/291722507)
- При использовании оптимизации макета DEX правила профиля запуска теперь также считаются правилами профиля базовой конфигурации. (aosp/2684246, b/293889189)
Версия 1.2.0-beta02
26 июля 2023 г.
Выход сингла "androidx.benchmark:benchmark-*:1.2.0-beta02". Версия 1.2.0-beta02 содержит следующие коммиты:
Изменения в API
- Добавлены экспериментальные API для специальных показателей и конфигурации микротестов (например, профилировщика и трассировки). (I86101, b/291820856)
Исправление ошибок
- Сообщение об ошибке в макротесте, когда ОС неправильно настроена для трассировки, как было недавно исправлено в эмуляторах API 26/28 ARM64. (I0a328, b/282191686)
- Добавлена информация о сбое сброса компиляции, чтобы предложить обновить эмулятор, поскольку в некоторых эмуляторах эта проблема недавно была исправлена. (I8c815, b/282191686)
- Сделайте
androidx.test.uiautomator:uiautomator:2.2.0зависимостьюapiвместоimplementation. (I1981e)
Версия 1.2.0-beta01
18 июля 2023 г.
Выход сингла "androidx.benchmark:benchmark-*:1.2.0-beta01". Версия 1.2.0-beta01 содержит эти коммиты.
Исправленные ошибки
- Исправлена ошибка, из-за которой предупреждения иногда не отображались в выходных данных Benchmark в Studio. Также устранены проблемы с начальными пробелами в выходных данных Benchmark, которые не отображались в Studio (Ia61d0, b/227205461, b/286306579, b/285912360).
- Исправлен комментарий для
FrameTimingMetric. Дополнительный показатель называетсяframeDurationCpuMs. (Ib097f, b/288830934).
Версия 1.2.0-alpha16
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) - Профилирование микротестов перенесено на отдельный этап, поэтому оно происходит после измерения, а не вместо него.
MethodTracingтеперь также включаются в захваченную трассировку Perfetto, если они присутствуют. (I9f657, b/285014599) - Добавьте отслеживание количества в
TraceSectionMetricс помощьюMode.Sum. (Ic121a, b/264398606)
Версия 1.2.0-alpha15
7 июня 2023 г.
Выход androidx.benchmark:benchmark-*:1.2.0-alpha15. Версия 1.2.0-alpha15 содержит эти коммиты.
Новые функции
- Добавлен экспериментальный тег
MemoryUsageMetricдля отслеживания использования памяти целевым приложением. (I56453, b/133147125, b/281749311) - Добавлена поддержка полностью настраиваемых конфигураций Perfetto с помощью
PerfettoTrace.record(If9d75, b/280460183). - Добавлено свойство, позволяющее пропустить создание профиля базовой конфигурации. Использование:
./gradlew assemble -Pandroidx.baselineprofile.skipgeneration. (I37fda, b/283447020)
Изменения в API
- API
collectBaselineProfileвсегда создает стабильные базовые профили. APIcollectStableBaselineProfileбольше не поддерживается. Вместо него следует использоватьcollectBaselineProfile. (I17262, b/281078707) - Аргумент
filterPredicateметодаBaselineProfileRuleтеперь не может быть нулевым. Для него задано эквивалентное значение по умолчанию, чтобы в документации было понятнее, как работает фильтр по умолчанию. (I3816e)
Исправленные ошибки
- Отключите
IsolationActivityи трассировку Perfetto вdryRunMode, чтобы значительно повысить производительность, поскольку они занимают большую часть времени выполнения. (Ie4f7d) - Поддержка выборки стека вызовов в Macrobenchmark с использованием аргументов инструментального теста
androidx.benchmark.profiling.mode=StackSamplingиandroidx.benchmark.profiling.sampleFrequency. (I1d13b, b/282188489) - Исправлен сбой при перетаскивании шейдеров в Android U (API 34), а также в эмуляторах. (I031ca, b/274314544)
Версия 1.2.0-alpha14
3 мая 2023 г.
Выход сингла "androidx.benchmark:benchmark-*:1.2.0-alpha14". Версия 1.2.0-alpha14 содержит эти коммиты.
Исправленные ошибки
- Исправлена ошибка, из-за которой
FrameTimingMetricигнорировал фреймы с несогласованными идентификаторами. Из-за этого некоторые анимации в последних версиях платформы (API 31+) игнорировали множество кадров, пока анимировалсяRenderThread(например, во время пульсации). (I747d2, b/279088460) - Исправлена обработка трассировок размером более 64 МБ. (Ief831, b/269949822)
- Исправлена ошибка, из-за которой не удавалось создать базовый профиль на Android U из-за другого результата команды
pm dump-profiles. (Id1392, b/277645214) - Исправлен скрипт блокировки тактовой частоты графического процессора, чтобы строки сравнивались корректно (I53e54, b/213935715).
Версия 1.2.0-alpha13
5 апреля 2023 г.
Выход сингла "androidx.benchmark:benchmark-*:1.2.0-alpha13". Версия 1.2.0-alpha13 содержит эти коммиты.
Изменения в API
- Добавлен параметр типа профиля при создании профилей базовой конфигурации для поддержки предстоящей функции профиля запуска (Ie20d7, b/275093123).
- Добавлен новый экспериментальный API
TraceMetricдля определения полностью пользовательских показателей на основе содержимого трассировки Perfetto. (I4ce31, b/219851406) - Добавьте экспериментальный показатель, чтобы определить количество ошибок отсутствия страницы во время тестирования. (I48db0)
Версия 1.2.0-alpha12
22 марта 2023 г.
Выход androidx.benchmark:benchmark-*:1.2.0-alpha12. Версия 1.2.0-alpha12 содержит эти коммиты.
Новые функции
- Новый плагин Gradle для базового профиля выпущен в альфа-версии. Он упрощает создание базового профиля и рабочий процесс разработчика.
Изменения в API
- Удалена поддержка трассировки Perfetto в API 21 и 22, включая микротесты и экспериментальные API
PerfettoTrace. До этой версии подключениеUiAutomationна некоторых устройствах было нестабильным. (I78e8c) - Добавлен общедоступный экспериментальный API для
PerfettoTraceProcessor, позволяющий анализировать контент трассировки. Это шаг к созданию полностью настраиваемых показателей на основе данных трассировки Perfetto. (I2659e, b/219851406)
Версия 1.2.0-alpha11
8 марта 2023 г.
Выход androidx.benchmark:benchmark-*:1.2.0-alpha11. Версия 1.2.0-alpha11 содержит эти коммиты.
Исправление ошибок
- Исправлены сбои в
MacrobenchmarkRuleиBaselineProfileRuleпри переустановке или извлечении профилей из набора App Bundle с несколькими APK-файлами. (I0d8c8, b/270587281)
Версия 1.2.0-alpha10
22 февраля 2023 г.
Выход сингла "androidx.benchmark:benchmark-*:1.2.0-alpha10". Версия 1.2.0-alpha10 содержит следующие коммиты:
Новые функции
- В Android 14 и более поздних версиях Macrobenchmark больше не переустанавливает целевые приложения, чтобы сбросить состояние компиляции, благодаря новой функции платформы. Раньше для этого требовалось устройство с настроенным root-доступом или удаление всех данных о состоянии приложения (например, о входе пользователя) перед каждым запуском теста. (I9b08c, b/249143766)
Исправленные ошибки
- Исправлена ошибка, из-за которой приложение
DryRunModeаварийно завершало работу, если профиль был пустым, поскольку компиляция пропускалась. Вместо этого выполняется одна итерация и извлекается профиль, чтобы гарантировать, что что-то будет записано. (I2f05d, b/266403227) - Исправлен сбой
PowerMetricпри проверке наличия 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, чтобы отключить все тесты и создание профиля базовой конфигурации. (I3d7fd, b/258671856) - Исправлена ошибка, из-за которой в модулях приложений (например, в тестовых APK-файлах без самоинструментирования) не фиксировались данные
PerfettoTrace(I12cfc). - Исправлен порядок аргументов adb pull для профиля базовой конфигурации в выходных данных Android Studio (I958d1, b/261781624).
- Эмулятор Arm 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
- Добавлены экспериментальные новые API
PerfettoTrace.record {}иPerfettoTraceRuleдля сбора трассировок Perfetto (также известных как системные трассировки) в рамках теста, чтобы изучить поведение и производительность теста. (I3ba16) - Теперь
BaselineProfileRuleпринимает предикат фильтра вместо списка префиксов пакетов. Это позволяет полностью контролировать фильтрацию. (I93240) - Добавлен экспериментальный API
BaselineProfileRule.collectStableBaselineProfile, который ожидает, пока базовый профиль не станет стабильным в течение N итераций. (I923f3) - Добавлена возможность указывать префикс названия выходного файла при создании профилей базовой конфигурации с помощью
BaselineProfileRule. (I7b59f, b/260318655)
Исправление ошибок
- Повышена безопасность записи выходных файлов, что должно предотвратить случаи, когда выходные файлы не записываются или не добавляются без уведомления, особенно в API 21/22. (If8c44, b/227510293)
- Исправьте вывод трассировки
simpleperf, чтобы создать и разместить файл правильно. Это также должно устранить проблемы, из-за которых Gradle не удается получить файл. (I12a1c, b/259424099) - Улучшено сообщение об ошибке, которое выводится, когда версия profileinstaller слишком старая. Теперь вместо сообщения о том, что измерение профилей базовой конфигурации не поддерживается, вы увидите предложение обновить profileinstaller до версии 1.2.1. (Ia517f, b/253519888)
- Исправлены некоторые ошибки командной строки, возникавшие при выводе сообщения об ошибке Print needed API <=23, в том числе ошибки настройки двоичного файла для записи Perfetto и ошибки записи трассировки (Ib6b87, b/258863685).
- Автоматически сортировать сгенерированные правила профиля, чтобы минимизировать количество изменений по мере их изменения с течением времени (при проверке правил профиля в системе контроля версий). (Ie2509)
- Исправлен сбой на устройствах без root-доступа с версией ОС ниже Android 13 (API 33) с сообщением
Expected no stderr from echo 3 > /proc/sys/vm/drop_caches(I6c245, b/259508183)
Известные проблемы
- MacrobenchmarkScope.dropShaderCache() может аварийно завершать работу из-за отсутствия реестра трансляций в манифесте profileinstaller, который ещё не выпущен. I5c728, b/258619948 Чтобы обойти эту проблему в profileinstaller:1.3.0-alpha02, добавьте в файл AndroidManifest.xml приложения (не теста производительности) следующий код:
<!-- workaround bug in profileinstaller 1.3.0-alpha02, remove when updating to alpha03+ -->
<receiver
android:name="androidx.profileinstaller.ProfileInstallReceiver"
android:permission="android.permission.DUMP"
android:exported="true">
<intent-filter>
<action android:name="androidx.profileinstaller.action.BENCHMARK_OPERATION" />
</intent-filter>
</receiver>
Версия 1.2.0-alpha07
9 ноября 2022 г.
Выход сингла "androidx.benchmark:benchmark-*:1.2.0-alpha07". Версия 1.2.0-alpha07 содержит эти коммиты.
Изменения в API
- Добавлен API
PowerMetricдля измерения энергии и мощности в макротестах. (Ife601, b/220183779) - Исправлена ошибка, из-за которой параметр
MacrobenchmarkScope.dropShaderCache()не удалял кеш шейдеров. Это позволяет удалить из результатов тестированияStartupMode.COLDпримерно 20 мс шума, поскольку теперь шейдеры очищаются при каждой итерации. Ранее при компиляцииPartialс использованием итераций прогрева сообщались неверные данные о скорости, поскольку кеширование шейдеров с большей вероятностью происходило во время прогрева. Для этого требуется устройство с настроенным root-доступом или использование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). - Добавлена ошибка, если APK-файл макротеста не настроен как самоинструментируемый. Эта ошибка не позволяет выполнять макротестирование в процессе целевого приложения. В процессе выполнения макротеста не удастся скомпилировать, завершить или запустить приложение с холодного старта, а также управлять его разрешениями (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больше не требует root-доступа на устройствах с Android 13 (API 33) и не является экспериментальной функцией. (Ie0a7d, b/250083467, b/253094958)- Это изменение также исправляет способ сброса профилей из приложения на диск на устройствах без root-доступа, но требует обновления зависимости profileinstaller целевого приложения.
- Чтобы использовать
BaselineProfileRuleилиCompilationMode.Partial(warmupIterations)на устройстве без root-доступа, вам также нужно обновить целевое приложение, чтобы использовать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 содержит эти коммиты.
Исправленные ошибки
- Исправлена разбивка кадров в средстве просмотра трассировки системы Studio для трассировок, полученных в результате тестирования производительности (I3f3ae, b/239677443).
- Исправлена ошибка
FrameTimingMetric, из-за которой в спискеFrameOverrunуказывалось, что для работы требуется API 31, а не 29 (I716dd, b/220702554). - Установите итерацию в
BaselineProfileRuleи явно сообщите об ошибке, если целевой пакет не установлен (это уже сделано для MacrobenchmarkRule). (Ic09a3, b/227991471)
Версия 1.2.0-alpha04
21 сентября 2022 г.
Выход androidx.benchmark:benchmark-*:1.2.0-alpha04. Версия 1.2.0-alpha04 содержит следующие коммиты:
Новые функции
Добавлена поддержка аргумента инструментирования
dryRunMode.enableдля макротестов (уже доступно в микротестах), чтобы ускорить локальную разработку и проверку автоматизации в приложениях (например, при предварительной отправке). Это позволяет задать количество итераций равным 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(). Это значит, что показатель может учитывать запуски, например, из уведомлений,Context.startActivity(), навигации на основе действий в приложении или команд оболочки. (Ia2de6, b/245414235) - Исправлена ошибка, из-за которой
startActivityAndWaitне удавалось дождаться завершения запуска на эмуляторах из-за слишком строгих требований к обнаружению кадров. (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)
Исправление ошибок
- Добавлено резервное объявление Leanback для
startActivityAndWait. (01ed77, b/242899915)
Версия 1.2.0-alpha02
24 августа 2022 г.
Выход сингла "androidx.benchmark:benchmark-*:1.2.0-alpha02". Версия 1.2.0-alpha02 содержит следующие коммиты:
Изменения в API
- По умолчанию используется
am force stopдляMacrobenchmarkScope.killProcess(), даже если есть root-доступ, за исключением случаев, когда создается профиль базовой конфигурации. Это значение можно переопределить с помощью необязательного логического аргумента. (02cce9, b/241214097)
Исправление ошибок
- Поддержка создания профилей базовой конфигурации для системных приложений. (I900b8, b/241214097)
- Добавлена поддержка проверки показателей энергопотребления ODPM на устройствах без root-доступа. (a38c78, b/229623230)
Версия 1.2.0-alpha01
27 июля 2022 г.
Выход androidx.benchmark:benchmark-*:1.2.0-alpha01. Версия 1.2.0-alpha01 содержит следующие коммиты:
Новые функции
- Новый компонент tracing-perfetto-common, позволяющий инструментам включать трассировку Perfetto SDK в приложении, которое ее поддерживает (I2cc7f).
Добавлен аргумент
androidx.benchmark.enabledRulesдля фильтрации запусков макротестов по тестам или по созданию базового профиля. Передайте Macrobenchmark или BaselineProfile, чтобы запустить только один тип теста, например при созданииBaselineProfilesв эмуляторе. Также поддерживается список, разделенный запятыми. (I756b7, b/230371561)Например, в файле build.gradle для макротеста:
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. Теперь исключение UOE возникает, только если показатель используется на неподдерживаемом устройстве (например,PowerMetric.configure). (I5cf20, b/227229375) - Добавлены
TotalPowerMetricиTotalEnergyMetricдля измерения общей мощности и энергии в каждой категории системы в макротестах. (I3b26b, b/224557371)
Исправленные ошибки
- Исправлена проблема, из-за которой скомпилированные методы неправильно сбрасывались между каждым макротестом на устройствах без root-доступа. К сожалению, для этого требуется переустанавливать APK-файл на каждой итерации, что приведет к очистке данных приложения для каждого макротеста. (I31c74, b/230665435)
- Исправлен сбой при записи трассировки на устройствах с API 21/22 (If7fd6, b/227509388, b/227510293, b/227512788).
- Переработана система обнаружения завершения запуска активности, чтобы исправить исключение "Не удалось прочитать ни одного показателя" в макротестах запуска. (Ia517c)
Версия 1.1.1
Версия 1.1.1
9 ноября 2022 г.
Выход androidx.benchmark:benchmark-*:1.1.1. Версия 1.1.1 содержит эти коммиты.
Исправленные ошибки
- Исправлена ошибка
android.system.ErrnoException: open failed: EACCES, которая возникала на некоторых устройствах с Android 11 (API 30) и более поздних версий. Это выборочно скопированное исправление из1.2.0-alpha01. (aosp/2072249)
Версия 1.1.0
Версия 1.1.0
15 июня 2022 г.
Выход сингла "androidx.benchmark:benchmark-*:1.1.0". Версия 1.1.0 содержит эти коммиты.
- Эта версия идентична
androidx.benchmark:benchmark-*:1.1.0-rc03.
Важные изменения с версии 1.0.0
Поддержка Jetpack Macrobenchmarks позволяет оценивать взаимодействия на уровне всего приложения, например запуск и прокрутку, а также собирать трассировки и оценивать их разделы.
Поддержка профилей базовой конфигурации
CompilationMode.Partial, чтобы оценить эффективность профилей базовой конфигурации.@BaselineProfileRule, чтобы автоматически создавать базовые профили для определенного важного пути пользователя.
Поддержка показателей распределения и профилирования во время выполнения микротестов.
Версия 1.1.0-rc03
1 июня 2022 г.
Выход androidx.benchmark:benchmark-*:1.1.0-rc03. Версия 1.1.0-rc03 содержит следующие коммиты:
Исправленные ошибки
Не переустанавливайте целевой пакет на каждой итерации теста. ( aosp/2093027, b/231976084)
Удалить задержку (
300ms) из действия "pressHome()". (aosp/2086030, b/231322975)Улучшена скорость итерации Macrobenchmark за счет оптимизации команд оболочки, используемых в фоновом режиме. (aosp/2086023, b/231323582)
Поддержка управляемых устройств Gradle при создании базовых профилей с помощью макротестов. (aosp/2062228, b/228926421)
Версия 1.1.0-rc02
11 мая 2022 г.
Выход сингла "androidx.benchmark:benchmark-*:1.1.0-rc02". Версия 1.1.0-rc02 содержит эти коммиты.
- Обратите внимание, что в этом выпуске изменилось поведение: теперь приложения полностью переустанавливаются между каждым тестом, чтобы обеспечить точность измерений.
Исправление ошибок и изменения в работе
Исправлена ошибка, из-за которой компиляция приложения неправильно сбрасывалась между макротестами и не сбрасывалась на устройствах без root-доступа. Это решает проблему, когда при проведении нескольких тестов
CompilationModeпочти не влияет на результаты. Чтобы обойти эту проблему, целевое приложение теперь полностью переустанавливается при каждом методе тестирования, что позволяет очищать данные приложения между каждым макротестом. (I31c74, b/230665435)Поскольку это мешает приложениям настраивать состояние перед тестированием, теперь можно пропустить компиляцию или переустановку, чтобы обойти эту проблему. Например, вы можете полностью скомпилировать целевой объект с помощью команды оболочки
cmd package compile -f -m speed <package>, а затем пропустить этап компиляции в Macrobenchmark.Например, в файле build.gradle для макротеста:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.compilation.enabled, 'false' } }Или в командной строке Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.compilation.enabled=falseДобавлена возможность использовать один модуль для макротестов и тестов, генерирующих профили базовой конфигурации, с помощью аргумента инструментирования
androidx.benchmark.enabledRules. Передайте Macrobenchmark или BaselineProfile, чтобы запустить только один тип теста, например при созданииBaselineProfilesв эмуляторе. (I756b7, b/230371561)Например, в файле build.gradle для макротеста:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile' } }или в командной строке Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
Версия 1.1.0-rc01
20 апреля 2022 г.
Выход сингла "androidx.benchmark:benchmark-*:1.1.0-rc01". Версия 1.1.0-rc01 содержит следующие коммиты:
Исправленные ошибки
- Ссылки на выходные данные базового профиля в Android Studio теперь используют уникальное название файла. Таким образом, в выходных данных всегда будут отражены последние результаты использования
BaselineProfileRule. ( aosp/2057008, b/228203086 )
Версия 1.1.0-beta06
6 апреля 2022 г.
Выход androidx.benchmark:benchmark-*:1.1.0-beta06. Версия 1.1.0-beta06 содержит эти коммиты.
Исправленные ошибки
- Исправлена ошибка записи трассировки на устройствах с API 21/22 (If7fd6, b/227509388).
- Переработана система обнаружения завершения запуска активности, чтобы исправить исключение "Не удалось прочитать ни одного показателя" в макротестах запуска. (Ia517c)
- Исправлены показатели запуска для Macrobenchmark при использовании
CompilationMode.None(). До этого измененияCompilationMode.Partial()казался медленнее, чемCompilation.None(). (611ac9).
Версия 1.1.0-beta05
23 марта 2022 г.
Выход androidx.benchmark:benchmark-*:1.1.0-beta05. Версия 1.1.0-beta05 содержит эти коммиты.
Исправление ошибок
- Принудительно останавливать пакет после пропуска установки профиля при использовании
CompilationMode.None. (aosp/1991373) - Исправлена ошибка, из-за которой Macrobenchmarks не может собирать показатели запуска при использовании
StartupMode.COLD. (aosp/2012227, b/218668335)
Версия 1.1.0-beta04
23 февраля 2022 г.
Выход сингла "androidx.benchmark:benchmark-*:1.1.0-beta04". Версия 1.1.0-beta04 содержит следующие коммиты:
Исправление ошибок
Исправлена ошибка, из-за которой в Android 10 и
NoSuchElementExceptionне отображались показатели, поскольку названия процессов неверно записывались в трассировках. (Ib4c17, b/218668335)Используйте
PowerManagerдля обнаружения троттлинга из-за перегрева на устройствах с Android Q (API 29) и более поздних версий. Это значительно снижает частоту ложных срабатываний при обнаружении теплового троттлинга (повторная попытка теста после 90-секундного охлаждения) и значительно ускоряет тесты в пользовательских сборках. Кроме того, он позволяет обнаруживать троттлинг, даже если тактовая частота заблокирована (если она слишком высока для физической среды устройства). (I9c027, b/217497678, b/131755853)Профилирование выборки simpleperf теперь фильтруется только по потоку
measureRepeated, чтобы упростить проверку (Ic3e12, b/217501939).Поддержка показателей из именованных подпроцессов интерфейса в многопроцессных приложениях (Ice6c0, b/215988434)
Добавлена фильтрация правил профиля базовой конфигурации для Android 9 (SDK 28). aosp/1980331 b/216508418
Пропустить установку профиля при использовании
Compilation.None(). Кроме того, мы добавили предупреждения, которые будут показываться, если приложение использует более старую версиюandroidx.profileinstallerи плагина Android Gradle. aosp/1977029
Версия 1.1.0-beta03
9 февраля 2022 г.
Выход androidx.benchmark:benchmark-*:1.1.0-beta03. Версия 1.1.0-beta03 содержит эти коммиты.
Изменения в API
- В библиотеку макротестов добавлен флаг
AudioUnderrunMetric, позволяющий обнаруживать недозагрузку аудио (Ib5972). BaselineProfileRuleбольше не принимает блокировкуsetup, поскольку она выполняла те же функции, что иprofileBlock. (Ic7dfe, b/215536447)Пример:
@Test fun collectBaselineProfile() { baselineRule.collectBaselineProfile( packageName = PACKAGE_NAME, setupBlock = { startActivityAndWait() }, profileBlock = { // ... } ) }@Test fun collectBaselineProfile() { baselineRule.collectBaselineProfile( packageName = PACKAGE_NAME, profileBlock = { startActivityAndWait() // ... } ) }
Исправление ошибок
- Исправлена ошибка, из-за которой трассировки профилировщика microbench не обновлялись при последующих запусках, если они были связаны в выходных данных Studio (I5ae4d, b/214917025).
- Запрет команд оболочки компиляции в API 23 (Ice380)
- Переименованы
FrameCpuTime->FrameDurationCpu,FrameUiTime->FrameDurationUi, чтобы уточнить, что это длительность, а не временные метки, и сопоставить префиксы. (I0eba3, b/216337830)
Версия 1.1.0-beta02
26 января 2022 г.
Выход сингла "androidx.benchmark:benchmark-*:1.1.0-beta02". Версия 1.1.0-beta02 содержит эти коммиты.
Исправленные ошибки
- Результаты профилирования Microbenchmark Stack Sampling и Method Tracing теперь связаны с выходными данными Studio, как и другие результаты профилирования, и не подавляют показатель распределения. (Idcb65, b/214440748, b/214253245)
- BaselineProfileRule теперь выводит команду
adb pullв logcat и Studio для извлечения сгенерированного текстового файла BaselineProfile. (f08811)
Версия 1.1.0-beta01
12 января 2022 г.
Выход сингла "androidx.benchmark:benchmark-*:1.1.0-beta01". Версия 1.1.0-beta01 содержит следующие коммиты:
Исправленные ошибки
- Исправлена ошибка, из-за которой игнорировался аргумент enable профилировщика. (I37373, b/210619998)
- Удалена устаревшая функция
CompliationModes(I98186, b/213467659) - Аргумент профиля базовой конфигурации
CompilationMode.Partialзаменен на перечисление во избежание неясности. (Id67ea)
Версия 1.1.0-alpha13
15 декабря 2021 г.
Выход сингла "androidx.benchmark:benchmark-*:1.1.0-alpha13". Версия 1.1.0-alpha13 содержит эти коммиты.
Изменения в API
- Добавлена функция трассировки системы с низкими накладными расходами в выходные данные микротестов на устройствах Android Q (API 29 и выше). Обратите внимание, что в настоящее время она не захватывает пользовательскую трассировку (через API Jetpack
android.os.Traceилиandroidx.tracing), чтобы не влиять на результаты. Эта трассировка может быть полезна для диагностики нестабильности, особенно если ее источники находятся за пределами контрольных показателей. (I298be, b/205636583, b/145598917) - Разделите
CompilationModesна три класса: "Полное", "Отсутствует" и "Частичное". Ранее они назывались по-разному в зависимости от аргументов компиляции (которые мы теперь рассматриваем как детали реализации) и функций. Это позволяет лучше понять компромиссы, возможные комбинации и поведение на разных версиях платформы. (I3d7bf, b/207132597) - Теперь настройка и отслеживание всегда идут парами и в определенном порядке. Теперь вы можете запрашивать название пакета и итерацию (хотя в некоторых сценариях прогрева итерация может быть равна
null). (Id3b68, b/208357448, b/208369635)
Исправленные ошибки
- Исправлена ошибка, из-за которой
CompilationMode.Speedнеправильно обрабатывался какNone(I01137).
Версия 1.1.0-alpha12
17 ноября 2021 г.
Выход androidx.benchmark:benchmark-*:1.1.0-alpha12. Версия 1.1.0-alpha12 содержит эти коммиты.
Новые функции
- Добавлен экспериментальный показатель TraceSectionMetric для пользовательских измерений времени на основе трассировки. (I99db1, b/204572664)
Исправленные ошибки
- Каждая итерация должна включать устройство, чтобы можно было протестировать интерфейс. Экран блокировки должен быть отключен. (Ibfa28, b/180963442)
- Исправлены многочисленные сбои в режиме профилирования StackSampling на эмуляторах и устройствах без root-доступа (Icdbda, b/202719335).
- Удалена пауза в 0,5 секунды в конце каждой итерации.Если вы заметите, что из-за этого изменения отсутствуют какие-либо показатели, сообщите об ошибке. (Iff6aa)
- Снижена вероятность потери данных и уменьшен объем памяти, используемой для трассировки (Id2544, b/199324831, b/204448861).
- Размер трассировки уменьшен примерно на 40% за счет перехода на компактный формат хранения sched. (Id5fb6, b/199324831)
- Обновлены реализации показателей запуска, чтобы они всегда заканчивались в конце потока отрисовки. Это позволит обеспечить большую согласованность между версиями платформы и более точное сопоставление с показателями в приложении. (Ic6b55)
Версия 1.1.0-alpha11
3 ноября 2021 г.
Выход сингла "androidx.benchmark:benchmark-*:1.1.0-alpha11". Версия 1.1.0-alpha11 содержит эти коммиты.
Изменения в API
- В Macrobenchmark теперь используется
minSdkVersionверсии23. (If2655) - Добавлена новая экспериментальная функция
BaselineProfileRule, которая может создавать базовые профили для ключевых действий пользователей в приложении. Подробная документация будет доступна позже. (Ibbefa, b/203692160) - Удален вариант интерфейса measureRepeated, который был добавлен для вызывающих объектов Java, так как он вызывал неоднозначность при завершении/разрешении метода. Вызывающим объектам Java снова потребуется возвращать Unit.Instance из measureRepeated. Если это неудобно, сообщите об ошибке, и мы сможем вернуться к этому в будущей версии. (Ifb23e, b/204331495)
Версия 1.1.0-alpha10
27 октября 2021 г.
Выход сингла "androidx.benchmark:benchmark-*:1.1.0-alpha10". Версия 1.1.0-alpha10 содержит эти коммиты.
Изменения в API
- Бэкпортирован класс StartupTimingMetric для работы с API 23. Новая реализация также лучше обрабатывает reportFullyDrawn(), чтобы дождаться отрисовки соответствующего контента. (If3ac9, b/183129298)
- Добавлены JvmOverloads в несколько методов MacrobenchmarkScope для вызывающих объектов Java. (I644fe, b/184546459)
- Предоставьте альтернативную функцию MacrobenchmarkRule.measureRepeated, которая использует
Consumer<MacrobenchmarkScope>для идиоматического использования в языке Java. (If74ab, b/184546459)
Исправленные ошибки
- Исправлена ошибка, из-за которой трассировки начинались слишком поздно и отсутствовали данные показателей. Это должно устранить исключения "Не удалось прочитать ни одного показателя во время тестирования", которые были вызваны самой библиотекой. (I6dfcb, b/193827052, b/200302931)
- Показатель FrameNegativeSlack переименован в FrameOverrun, чтобы точнее отражать его значение – насколько кадр превысил свой временной бюджет. (I6c2aa, b/203008701)
Версия 1.1.0-alpha09
13 октября 2021 г.
Выход сингла "androidx.benchmark:benchmark-*:1.1.0-alpha09". Версия 1.1.0-alpha09 содержит эти коммиты.
Исправленные ошибки
- Поддержка удаления кеша страниц ядра без прав root в API 31/S+, что повысит точность запусков StartupMode.COLD. (Iecfdb, b/200160030)
Версия 1.1.0-alpha08
29 сентября 2021 г.
Выход сингла "androidx.benchmark:benchmark-*:1.1.0-alpha08". Версия 1.1.0-alpha08 содержит эти коммиты.
Изменения в API
- Включите макротесты прокрутки, чтобы они могли выполняться в API 23 (If39c2, b/183129298).
- Добавлен новый тип показателя выборки в интерфейс и выходные данные JSON, ориентированный на процентили нескольких выборок за итерацию. (I56247, b/199940612)
- Переключитесь на показатели с плавающей запятой во всех библиотеках тестов (усечены в интерфейсе Studio). (I69249, b/197008210)
Версия 1.1.0-alpha07
1 сентября 2021 г.
Выход сингла "androidx.benchmark:benchmark-*:1.1.0-alpha07". Версия 1.1.0-alpha07 содержит эти коммиты.
Изменения в API
- Минимальный уровень API повышен до 21, чтобы отразить планируемый минимальный уровень API, который будет поддерживаться в будущем. Текущий минимальный поддерживаемый API по-прежнему передается через RequiredApi() и в настоящее время равен 29 (I440d6, b/183129298).
Исправление ошибок
- Исправлена ошибка
ProfileInstaller, чтобы приложениям, использующим профили базовой конфигурации, было проще запускать MacroBenchmarks с помощьюCompilationMode.BaselineProfile. (I42657, b/196074999). Примечание. Также требуется обновитьandroidx.profileinstaller:profileinstaller:1.1.0-alpha04до этой или более поздней версии. StartupMode.COLD+CompilationMode.Noneконтрольных показателей стали более стабильными. (I770cd, b/196074999)
Версия 1.1.0-alpha06
18 августа 2021 г.
Выход сингла "androidx.benchmark:benchmark-*:1.1.0-alpha06". Версия 1.1.0-alpha06 содержит эти коммиты.
Изменения в API
- Добавлен аргумент инструментирования
androidx.benchmark.iterations, позволяющий вручную переопределять количество итераций при локальном тестировании или профилировании. (6188be, b/194137879)
Исправленные ошибки
- Simpleperf теперь используется по умолчанию в качестве профилировщика выборки в API 29+. (Ic4b34, b/158303822)
Известные проблемы
CompilationMode.BaselineProfileещё в разработке. Поэтому пока не используйте его для оценки качества профиля.
Версия 1.1.0-alpha05
4 августа 2021 г.
Выход сингла "androidx.benchmark:benchmark-*:1.1.0-alpha05". Версия 1.1.0-alpha05 содержит эти коммиты.
Версия 1.1.0-alpha04 была отменена до выпуска из-за периодических сбоев. b/193827052
Изменения в API
- Функция startActivityAndWait теперь вызывает запуск через
am start, что позволяет сократить время каждой итерации измерения примерно на пять секунд, но при этом больше не поддерживает объекты Parcelable для намерений. (I5a6f5, b/192009149)
Исправленные ошибки
- Снизить агрессивность обнаружения троттлинга и пересчитать базовые показатели, если троттлинг обнаруживается часто. (I7327b)
- Исправлена ошибка, из-за которой FrameTimingMetric не работал в бета-версии Android S (Ib60cc, b/193260119).
- Используйте
EmptyActivity, чтобы вывести целевое приложение из состояния принудительной остановки и улучшить поддержкуCompilationMode.BaselineProfile. (Id7cac, b/192084204) - Расширение имени файла трассировки изменено на
.perfetto-traceв соответствии со стандартом платформы. (I4c236, b/174663039) - Теперь StartupTimingMetric выводит показатель fullyDrawnMs, чтобы измерять время до полной отрисовки приложения. Чтобы определить этот показатель для своего приложения, вызовите Activity.reportFullyDrawn, когда начальный контент будет готов, например когда начальные элементы списка будут загружены из базы данных или сети. (Метод reportFullyDrawn доступен без проверки версии сборки в ComponentActivity). Обратите внимание, что тест должен выполняться достаточно долго, чтобы получить показатель (startActivityAndWait не ждет reportFullyDrawn). (If1141, b/179176560)
- Снижена стоимость добавления метаданных пользовательского интерфейса в трассировки более чем на 50 мс (Ic8390, b/193923003).
- Значительно увеличена частота опроса при остановке трассировки, что может сократить, например, время выполнения теста запуска на 30 % и более (Idfbc1, b/193723768).
Версия 1.1.0-alpha03
16 июня 2021 г.
Выход сингла "androidx.benchmark:benchmark-*:1.1.0-alpha03". Версия 1.1.0-alpha03 содержит эти коммиты.
Новые функции
- Добавлен новый тег
CompilationMode.BaselineProfileдля поддержки профилей, установленных с помощью библиотеки Jetpack ProfileInstaller. (aosp/1720930)
Исправленные ошибки
Пример кода Gradle для подавления ошибок при тестировании производительности был обновлен. Теперь в нем используется API, который не является устаревшим, а также синтаксис, поддерживающий пользователей .gradle.kts.
Пример:
testInstrumentationRunnerArguments["androidx.benchmark.suppressErrors"] = "EMULATOR,LOW-BATTERY"
Версия 1.1.0-alpha02
18 мая 2021 г.
В версии Benchmark 1.1.0-alpha02 появился важный компонент – Macrobenchmark. Помимо benchmark, позволяющей измерять циклы ЦП, macrobenchmark позволяет измерять взаимодействия на уровне всего приложения, такие как запуск и прокрутка, и записывать трассировки. Подробнее читайте в документации по библиотеке.
Выход сингла "androidx.benchmark:benchmark-*:1.1.0-alpha02". Версия 1.1.0-alpha02 содержит эти коммиты.
Новые функции
Добавлены артефакты Macrobenchmark (androidx.benchmark:benchmark-macro-junit4 и androidx.benchmark:benchmark-macro).
- Собирайте показатели производительности запуска, прокрутки и анимации из приложения локально или в CI.
- Как записывать и анализировать трассировки в Android Studio
Исправленные ошибки
- Устранена проблема с разрешениями оболочки для выходного каталога в Android 12. Примечание. Чтобы продолжить запись выходных файлов на затронутых устройствах, может потребоваться обновить плагин Android Gradle до версии 7.0.0 canary и Android Studio до версии Arctic Fox (2020.3.1). (Icb039)
- Поддержка кеширования конфигурации в BenchmarkPlugin (6be1c1, b/159804788).
- Упрощенный вывод файлов – включен по умолчанию в каталоге, который не требует
requestLegacyExternalStorage=true(8b5a4d, b/172376362). - Исправлены предупреждения logcat при печати библиотеки о том, что не удается найти поток JIT на платформах, где он отсутствует. (I9cc63, b/161847393)
- Исправлена ошибка, из-за которой максимальная частота устройства для чтения определялась неправильно. (I55c7a)
Версия 1.1.0-alpha01
10 июня 2020 г.
androidx.benchmark:benchmark-common:1.1.0-alpha01, androidx.benchmark:benchmark-gradle-plugin:1.1.0-alpha01 и androidx.benchmark:benchmark-junit4:1.1.0-alpha01. Версия 1.1.0-alpha01 содержит эти коммиты.
Новые функции в версии 1.1
- Показатель распределения. Теперь после этапов разогрева и определения времени выполнения тестов проводится дополнительный этап, на котором собираются данные о распределении. Выделение памяти может вызывать проблемы с производительностью в более старых версиях платформы (140 нс в версии O стали 8 нс в версии M – измерено на Nexus 5X с заблокированной частотой). Этот показатель отображается в выходных данных консоли Android Studio, а также в
- Поддержка профилирования. Теперь вы можете собирать данные профилирования для контрольного запуска, чтобы понять, почему код может работать медленно. Benchmark поддерживает сбор данных о трассировке методов или выборке методов из ART. Эти файлы можно проверить с помощью Profiler в Android Studio, выбрав File > Open (Файл > Открыть).
- Теперь плагин Benchmark Gradle предоставляет значения по умолчанию, чтобы упростить настройку:
- Для
testBuildTypeпо умолчанию задан выпуск, чтобы избежать использования зависимостей со встроенным покрытием кода. Тип сборки release также настроен как тип сборки по умолчанию, что позволяет Android Studio автоматически выбирать правильный вариант сборки при первом открытии проекта. (b/138808399) signingConfig.debugиспользуется в качестве конфигурации подписи по умолчанию (b/153583269)
- Для
** Исправленные ошибки **
- Значительно снижены накладные расходы на переход к разогреву, из-за которых первое измерение для каждого контрольного показателя было искусственно выше остальных. Эта проблема была более заметна в очень небольших тестах (1 микросекунда или меньше). (b/142058671)
- Исправлена ошибка
InstrumentationResultParser, которая возникала для каждого теста производительности при запуске из командной строки. (I64988, b/154248456)
Известные проблемы
- При вызове Benchmark из командной строки или Gradle результаты не выводятся напрямую. Чтобы обойти это ограничение, вы можете запустить проверку в Творческой студии или проанализировать выходной файл JSON.
- Отчеты о контрольных показателях не могут получить данные с устройств, на которых установлено приложение с идентификатором applicationId, заканчивающимся на android или download (без учета регистра). Чтобы устранить эту проблему, обновите плагин Android Gradle до версии 4.2-alpha01 или более поздней.
Версия 1.0.0
Версия 1.0.0
20 ноября 2019 г.
androidx.benchmark:benchmark-common:1.0.0, androidx.benchmark:benchmark-gradle-plugin:1.0.0 и androidx.benchmark:benchmark-junit4:1.0.0 выпущены без изменений по сравнению с версией 1.0.0-rc01. Версия 1.0.0 содержит эти коммиты.
Основные функции версии 1.0.0
Библиотека Benchmark позволяет быстро писать тесты производительности кода приложений и получать результаты.
Это позволяет избежать проблем с конфигурацией сборки и среды выполнения, а также стабилизировать производительность устройства, чтобы обеспечить точность и согласованность измерений. Запустите тесты непосредственно в Android Studio или в непрерывной интеграции, чтобы отслеживать производительность кода с течением времени и предотвращать регрессии.
Основные возможности:
- Стабилизация часов
- Автоматическое определение приоритета цепочек
- Поддержка тестирования производительности интерфейса, например в RecyclerView Sample.
- Прогрев и циклы с учетом JIT
- Выходные данные в формате JSON для последующей обработки
Версия 1.0.0-rc01
23 октября 2019 г.
androidx.benchmark:benchmark-common:1.0.0-rc01, androidx.benchmark:benchmark-gradle-plugin:1.0.0-rc01 и androidx.benchmark:benchmark-junit4:1.0.0-rc01. Версия 1.0.0-rc01 содержит следующие коммиты.
Новые функции
- Добавлена трассировка systrace для тестов.
Исправление ошибок
- Исправлена проблема нестабильности показателей, из-за которой JIT не завершался до разогрева из-за снижения приоритета (b/140773023).
- Единый каталог для вывода JSON в плагинах Android Gradle 3.5 и 3.6
Версия 1.0.0-beta01
9 октября 2019 г.
Выпущены androidx.benchmark:benchmark-common:1.0.0-beta01, androidx.benchmark:benchmark-gradle-plugin:1.0.0-beta01 и androidx.benchmark:benchmark-junit4:1.0.0-beta01. Версия 1.0.0-beta01 содержит эти коммиты.
Новые функции
- Запускайте сборку мусора перед каждым прогревом, чтобы снизить нагрузку на память и избежать утечки данных из одного теста в другой (b/140895105).
Исправление ошибок
- Добавлена зависимость
androidx.annotation:android-experimental-lint, чтобы код Java правильно выдавал ошибки lint, когда экспериментальный API не используется, аналогично тому, что предоставляется экспериментальной аннотацией Kotlin для вызывающих объектов Kotlin. - Теперь правильно обнаруживается использование аргумента инструментирования
additionalTestOutputDirдля вывода в плагине Android Gradle 3.6, чтобы знать, когда AGP будет обрабатывать копирование данных. - Исправлена ошибка, из-за которой не определялась тактовая частота в JSON, что мешало правильному выводу
-1(b/141945670).
Версия 1.0.0-alpha06
18 сентября 2019 г.
androidx.benchmark:benchmark-common:1.0.0-alpha06, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha06 и androidx.benchmark:benchmark-junit4:1.0.0-alpha06. Версия 1.0.0-alpha06 содержит следующие коммиты.
Новые функции
- Добавлена проверка на неправильное использование старого пакета для средства запуска тестов, которая теперь предоставляет более полезное сообщение об ошибке.
Изменения в API
- Экспериментальная аннотация
ExperimentalAnnotationReportтеперь является общедоступной. Для использования экспериментального API BenchmarkState#report теперь требуется эта аннотация.
Версия 1.0.0-alpha05
5 сентября 2019 г.
Выпущены androidx.benchmark:benchmark-common:1.0.0-alpha05, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05 и androidx.benchmark:benchmark-junit4:1.0.0-alpha05. Список коммитов, включенных в эту версию, можно найти здесь.
Изменения в API
- API
BenchmarkState.reportDataтеперь помечен как экспериментальный
Исправление ошибок
- Исправлена ошибка в скрипте блокировки тактовой частоты, которая возникала на устройствах без утилит
cutилиexpr. - Исправлена ошибка, из-за которой задача
./gradlew lockClocksзависала на устройствах, где права суперпользователя были получены с помощью устаревшей версии утилиты su, не поддерживающей флаг-c.
Версия 1.0.0-alpha04
7 августа 2019 г.
Выпущены androidx.benchmark:benchmark-common:1.0.0-alpha04, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04 и androidx.benchmark:benchmark-junit4:1.0.0-alpha04. Список коммитов, включенных в эту версию, можно найти здесь.
Также добавлена новая документация по использованию библиотеки Benchmark без Gradle, как для использования с различными системами сборки (такими как Bazel или Buck), так и при запуске в CI. Дополнительную информацию можно найти в статьях Как создавать тесты производительности без Gradle и Как запускать тесты производительности в непрерывной интеграции.
Новые функции
- Плагин Gradle
- Теперь автоматически отключает тестовое покрытие и по умолчанию устанавливает
AndroidBenchmarkRunner(b/138374050). - Добавлена поддержка копирования данных на основе AGP при проведении тестирования и использовании AGP 3.6 и более поздних версий.
- Теперь автоматически отключает тестовое покрытие и по умолчанию устанавливает
- Дополнения в формате JSON
- Вывод общего времени выполнения теста производительности (b/133147694)
@ParameterizedТеперь при использовании контрольных показателей, в которых применяется строка названия (например,@Parameters(name = "size={0},depth={1}")), в выходных данных JSON для каждого контрольного показателя выводятся названия и значения параметров (b/132578772).
- Режим пробного выполнения (b/138785848)
- Добавлен режим пробного запуска, в котором каждый цикл тестирования выполняется только один раз. Это позволяет проверить наличие ошибок и сбоев без сбора данных. Это может быть полезно, например, для быстрого запуска тестов производительности перед отправкой, чтобы убедиться, что они не сломаны.
Изменения в API
- Изменена структура модуля, библиотека разделена (b/138451391)
benchmark:benchmark-junit4содержит классы с зависимостью JUnit:AndroidBenchmarkRunnerиBenchmarkRule. Оба класса перемещены в пакетandroidx.benchmark.junit4.benchmark:benchmark-commonсодержит остальную логику, включая BenchmarkState API.- Это разделение позволит библиотеке поддерживать тестирование производительности без API JUnit4 в будущем.
- Предупреждения о конфигурации теперь считаются ошибками и приводят к сбою теста (b/137653596).
- Это делается для того, чтобы поощрять точные измерения, особенно в CI
- Эти ошибки можно преобразовать в предупреждения с помощью аргумента инструментации. Пример:
-e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"
Исправление ошибок
- Сообщения об ошибках при записи на внешние устройства в Android Q стали более подробными и содержат рекомендации по устранению неполадок.
- Экраны автоматически включаются во время тестирования производительности, а не отключаются, когда экран выключен.
Внешние взносы
- Благодарим Сергея Захарова за улучшение вывода JSON и исправление проблем с выключением экрана.
Версия 1.0.0-alpha03
2 июля 2019 г.
Выход сингла androidx.benchmark:benchmark:1.0.0-alpha03 и альбома androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha03. Список коммитов, включенных в эту версию, можно найти здесь.
Новые функции
- Добавление в полный отчет JSON данных о продолжительности сна из-за перегрева для каждого теста.
Исправление ошибок
- Плагин Gradle больше не нужно применять после плагинов Android и блока Android.
- Добавлена поддержка отчетов о тестировании на устройствах Android 10 с областями хранения данных.
Версия 1.0.0-alpha02
6 июня 2019 г.
Выход androidx.benchmark:1.0.0-alpha02 и androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02. Список изменений, включенных в эту версию, можно найти здесь.
Обратите внимание, что мы рассматриваем схему JSON как API. Мы планируем придерживаться тех же ограничений стабильности, что и для других API: стабильная работа (за редкими исключениями) после бета-тестирования и фиксированная работа в финальном выпуске, с дополнениями в минорных выпусках и изменениями/удалениями в мажорных выпусках.
Изменения в API
Переработана схема JSON. Дальнейшие изменения схемы JSON, скорее всего, будут ограничены дополнениями:
- Реорганизована структура объекта результата, чтобы в будущем можно было поддерживать дополнительные группы показателей (b/132713021).
- Добавлена информация о контексте тестового запуска, например сведения об устройстве и сборке, а также о том, заблокированы ли часы, в объект верхнего уровня (b/132711920).
- В названиях показателей времени теперь есть "ns" (b/132714527).
- Добавлены дополнительные статистические данные для каждого отчетного показателя (максимум, медиана, минимум) и удалена упрощенная сводная статистика nanos (b/132713851).
Удален вывод XML (b/132714414)
Из API
BenchmarkState.reportDataудалено обнаружение теплового троттлинга (b/132887006).
Исправление ошибок
- Исправлена ошибка, из-за которой на некоторых устройствах с последними версиями ОС не сохранялся параметр
./gradlew lockClocks. (b/133424037) - Обнаружение троттлинга отключено для эмулятора (b/132880807).
Версия 1.0.0-alpha01
7 мая 2019 г.
Выход сингла "androidx.benchmark:benchmark:1.0.0-alpha01". Коммиты, включенные в эту версию, доступны здесь.