Контрольный показатель
Последнее обновление | Стабильный выпуск | Релиз-кандидат | Бета-версия | Альфа-релиз |
---|---|---|---|---|
7 августа 2024 г. | 1.2.4 | 1.3.0-rc01 | - | - |
Объявление зависимостей
Чтобы добавить зависимость от Benchmark, вам необходимо добавить в свой проект репозиторий Google Maven. Для получения дополнительной информации прочтите репозиторий Google Maven .
Макробенчмарк
Чтобы использовать Macrobenchmark в своем проекте, добавьте следующие зависимости в файл build.gradle
для вашего модуля макробенчмарка :
классный
dependencies { androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.2.4" }
Котлин
dependencies { androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.2.4") }
Микробенчмарк
Чтобы использовать Microbenchmark в своем проекте, добавьте следующие зависимости в файл build.gradle
для вашего модуля microbenchmark :
классный
dependencies { androidTestImplementation "androidx.benchmark:benchmark-junit4:1.2.4" } android { ... defaultConfig { ... testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Котлин
dependencies { androidTestImplementation("androidx.benchmark:benchmark-junit4:1.2.4") } android { ... defaultConfig { ... testInstrumentationRunner = "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Библиотека Microbenchmark также предоставляет плагин Gradle для использования с вашим модулем microbenchmark. Этот плагин устанавливает настройки конфигурации сборки по умолчанию для модуля, настраивает копию выходных данных теста на хост и предоставляет задачу ./gradlew lockClocks
.
Чтобы использовать плагин, включите следующую строку в блок «plugins» файла build.gradle
верхнего уровня:
классный
plugins { id 'androidx.benchmark' version '1.2.4' apply false }
Котлин
plugins { id("androidx.benchmark") version "1.2.4" apply false }
Затем примените плагин к файлу build.gradle
вашего тестового модуля.
классный
plugins { id 'androidx.benchmark' }
Котлин
plugins { id("androidx.benchmark") }
Обратная связь
Ваши отзывы помогают сделать Jetpack лучше. Дайте нам знать, если вы обнаружите новые проблемы или у вас есть идеи по улучшению этой библиотеки. Пожалуйста, ознакомьтесь с существующими проблемами в этой библиотеке, прежде чем создавать новую. Вы можете добавить свой голос к существующей проблеме, нажав кнопку со звездочкой.
Дополнительную информацию см. в документации по системе отслеживания проблем .
Версия 1.3
Версия 1.3.0-rc01
7 августа 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.3.0-rc01
. Версия 1.3.0-rc01 содержит эти коммиты .
Исправление ошибок
- Исправлена ошибка, из-за которой
androidx.benchmark.cpuEventCounter
создавал поврежденные значения для событий, не связанных с инструкциями ( I7386a , b/286306579 ). - Исправьте
resumeTiming
/runWithTimingDisabled
чтобы соблюдать порядок приоритетов метрик и значительно уменьшить влияние приостановки/возобновления метрик с более низким приоритетом на результаты метрик с более высоким приоритетом. Например, если использовать счетчики производительности процессора через аргумент инструментарияcpuEventCounter.enable
, timeNs больше не будет значительно уменьшаться при возникновении паузы или возобновления. ( I39c2e , б/286306579 , б/307445225 ) - Уменьшена вероятность того, что выборка стека приведет к тому, что
measureRepeatedOnMainThread
достигнет жесткого тайм-аута основного потока, за счет перемещения преобразования выборки стека за пределы основного потока. ( I487a8 , б/342237318 ) - Убрано ручное определение доступа к API новой платформы, поскольку это происходит автоматически посредством моделирования API при использовании R8 с AGP 7.3 или новее (например, R8 версии 3.3) и для всех сборок при использовании AGP 8.1 или новее (например, D8 версии 8.1). Клиентам, не использующим AGP, рекомендуется выполнить обновление до D8 версии 8.1 или более поздней. Более подробную информацию можно найти в этой статье . ( I9496c , б/345472586 )
- Добавлена проверка версии agp для отправки имени пакета в качестве instr arg. До версии AGP 8.4.0 имя пакета целевого приложения нельзя было отправить в приложение инструментирования через аргументы инструментария. ( 0c72a3f )
Версия 1.3.0-beta02
10 июля 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.3.0-beta02
. Версия 1.3.0-beta02 содержит эти коммиты .
Исправление ошибок
- Аккуратно обрабатывайте EXITCODE
2
при запуске Perfetto, чтобы записать предупреждение, но продолжайте.
Версия 1.3.0-бета01
12 июня 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.3.0-beta01
. Версия 1.3.0-beta01 содержит эти коммиты .
Изменения API
- Для обеспечения единообразия
MethodTracing.affectsMeasurementOnThisDevice
переименован вAFFECTS_MEASUREMENT_ON_THIS_DEVICE
. ( I1bdfa ) - Добавлен экспериментальный API
BlackHole.consume()
для предотвращения устранения неработающего кода в микробенчмарках. ( Если6812 , б/286091643 ) - Микробенчмарк теперь будет корректно генерировать результаты, чтобы трассировка метода не мешала измерениям. Это происходит на некоторых устройствах, когда принудительно включена трассировка метода (через аргументы инструмента или
MicrobenchmarkConfig
), а также если предпринимается попытка измерения после трассировки метода. Затронутые устройства используют API 26–30 или некоторые версии основного модуля ART, на которые влияет это вмешательство, и могут быть обнаружены во время выполнения с помощьюProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice
. ( Iafb92 , б/303660864 )
Исправление ошибок
- Рекомендуемая максимальная версия agp увеличена до 9.0.0-alpha01. ( I5bbb0 )
- Добавлен режим компиляции в контекст тестирования ( If5612 , b/325512900 ).
- Включить трассировку AIDL по умолчанию (требуется API 28) ( Ia0af2 , b/341852305 )
- Добавлена дополнительная информация в контексте теста в выводе JSON:
-
context.artMainlineVersion
— целочисленная версия основного модуля Art (если он присутствует на устройстве, в противном случае -1) -
context.build.id
– равенandroid.os.Build.ID
-
context.build.version.codename
— равноandroid.os.Build.VERSION.CODENAME
-
context.build.version.abbreviatedCodename
— соответствует первой букве кодового имени предварительной версии (даже в сборках выпуска) ( Ie5020 ).
-
- Исправляет
StackSampling
для соблюденияandroidx.benchmark.profiling.sampleDurationSeconds
( Ib1d53 ). - Измените зависимость macro->common на
api()
, чтобы ее было проще использовать, например,PerfettoTrace
иPerfettoConfig
. ( Icdae3 , б/341851833 ) - Убедитесь, что задачи
mergeArtProfile
иmergeStartupProfile
всегда ожидают создания базового профиля. ( I623d6 , б/343086054 ) - Учитывайте состояние включения варианта при принятии решения о том, следует ли включать вариант. ( I5d19e , б/343249144 )
- Увеличено время ожидания запуска по умолчанию для процессора трассировки perfetto. ( I87e8c , б/329145808 )
Версия 1.3.0-альфа05
14 мая 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.3.0-alpha05
. Версия 1.3.0-alpha05 содержит эти коммиты .
Исправление ошибок
- Выдавать более четкое исключение, когда метрика Macrobench возвращает нулевые значения для всех итераций ( Iab58f , b/314931695 )
- В правила proguard microbench добавлены дополнительные правила обхода, включая поддержку правил прослушивателя и других наблюдаемых предупреждений/ошибок. ( I14d8f , б / 329126308 , б / 339085669 )
- Трассировка метода выполняется как отдельный этап макротестирования и больше не влияет на измерения. ( If9a50 , б/285912360 , б/336588271 )
- Добавлены дополнительные предложения по отладке для удаления сообщения об ошибке трансляции шейдера. ( I5efa6 , б/325502725 )
Версия 1.3.0-альфа04
1 мая 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.3.0-alpha04
. Версия 1.3.0-alpha04 содержит эти коммиты .
Изменения API
- Добавлен экспериментальный вариант
MacrobenchmarkRule#measureRepeated
, который использует специальныйPerfettoConfig
для полностью настраиваемой записи трассировки Perfetto. Обратите внимание, что неправильно настроенные конфигурации могут привести к сбою встроенных классов метрик. ( Idfd3d , б/309841164 , б/304038384 ) - Переименуйте
PowerMetric.deviceSupportsPowerEnergy
вPowerMetric.deviceSupportsHighPrecisionTracking
для ясности ( I5b82f ). - Добавлены
PowerMetric.deviceBatteryHasMinimumCharge()
иPowerMetric.deviceSupportsPowerEnergy()
, позволяющие изменять или пропускать тесты на основе возможностей измерения мощности устройства. ( I6a591 , б/322121218 )
Исправление ошибок
- Добавлено сравнение с предыдущим базовым профилем ( I824c8 , b/269484510 ).
- Добавлен DSL для отключения предупреждений ( Ic4deb , b/331237001 ).
- Изменено исключение в журнале информации, когда варианты тестов отключены ( I8a517 , b/332772491 ).
- Упростите сбор трассировок методов для макробенчмарка, ограниченного длительностью фактического
measureBlock()
. Раньше он запускался при запуске целевого процесса и поддерживал только холодный запуск ( Iee85a , b/300651094 ). - Избегайте сбоев, когда процессор трассировки perfetto запускается медленно ( I98841 , b/329145808 ).
Версия 1.3.0-альфа03
17 апреля 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.3.0-alpha03
. Версия 1.3.0-alpha03 содержит эти коммиты .
Новые возможности
- Добавляет общедоступные API
PerfettoTraceProcessor.Session.queryMetrics
с вариантами JSON, textproto и proto двоичными (некодированными) вариантами. Они позволяют запрашивать метрики, встроенные в TraceProcessor ( I54d7f , b/304038382 ). - Добавлен
profilerOutput
в выходные данные JSON для упрощения работы с трассировками профилирования (например, трассировки perfetto, трассировки методов). ( I05ddd , б/332604449 ) - Добавлен тег питания для тестирования Perfetto Config. Это фиксирует, например, точки трассировки блокировки. ( Icfe44 , р/286551983 )
- Добавлен аргумент inst
androidx.benchmark.profiling.skipWhenDurationRisksAnr
, для которого можно установить значение false, чтобы избежать пропуска трассировок метода, когда ожидаемая продолжительность может вызвать ANR — настоятельно рекомендуется избегать при запусках CI. - Добавлен экспериментальный аргумент inst
androidx.benchmark.profiling.perfCompare.enable
. Установите для него значение true, чтобы запустить сравнение времени между этапами измерения и профилирования. Полезно, например, для оценки накладных расходов на трассировку метода. ( I61fb4 , б/329146942 )
Изменения API
- Изменен
TraceSectionMetric.Mode
на запечатанный класс, чтобы обеспечить возможность дальнейшего расширения без нарушения исчерпывающих операторов if ( I71f7b ). - Добавлены
TraceSectionMetric.Mode.Average
и.Count
, а также изменен порядок аргументов, чтобы более распространенный аргумент (режим) находился раньше в списке аргументов, что уменьшило необходимость указания имен параметров. ( Ibf0b0 , б/315830077 , б/322167531 ) -
Metric.getResult
переименован вgetMeasurements
в соответствии с типом возвращаемого значения ( I42595 ).
Исправление ошибок
- Исправлено, чтобы гарантировать, что тесты используют сгенерированные базовые профили, когда
automaticGenerationDuringBuild
отключен ( Ic144f , b/333024280 ). - Исправьте переопределения свойств плагина Gradle
BaselineProfile
, чтобы включить генерацию базового профиля и тестирование при настройке типа сборкиnonMinified
или эталонного теста. ( Ib8f05 , b/324837887 ) - Исправлено удаление трассировок методов в макробенчмарке, поэтому трассировки методов должны быть полностью записаны и действительны даже на более медленных устройствах. ( I6349a , б/329904950 )
- Включите блокировку запуска записи трассировки Perfetto, чтобы снизить риск потери данных в начале трассировки. Поддерживается только в API 33+. ( Ie6e41 , b/310760059 )
- Добавлено предупреждение при использовании Android Test Orchestrator в модулях тестирования, так как это приведет к многократной перезаписи выходных файлов JSON для каждого модуля. ( Ia1af6 , б/286899049 )
- Принудительно использовать разделитель тысяч ',' (запятая) для единообразия вывода Studio, игнорируя локаль устройства ( I3e921 , b/313496656 )
-
TraceSectionMetric
теперь поддерживает срезы, созданные с помощьюTrace.{begin|end}AsyncSection
. ( I91b32 , б/300434906 ) - Добавлены метки log.w/Exception для всех ошибок обнаружения запуска. Это не меняет текущего поведения (поэтому некоторые ошибки выдаются, а другие молча не обнаруживают запуск), просто делает его более понятным. Обычно те, которые
Log.w()
не сообщают о показателях запуска, — это те, в которых отсутствуют события, не связанные с кадрами, исключения выдаются при обнаружении запуска, за исключением информации о синхронизации кадра (из срезов UI/RT). ( Id240f , б/329145809 ) - Отмените фоновые задания dexopt перед запуском Macrobenchmark, чтобы уменьшить помехи. ( I989ed )
- В
FrameTimingMetric
добавленоframeCount
чтобы помочь обнаружить сценарии, в которых измерения изменяются из-за изменения количества созданных кадров (добавлены новые анимации, исправлены проблемы с недействительностью). ( I1e5aa ) - Уточнено, что
frameOverrunMs
является предпочтительной метрикой для отслеживания, когда она доступна в документах, и почему. ( I18749 , б/329478323 )
Версия 1.3.0-альфа02
20 марта 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.3.0-alpha02
. Версия 1.3.0-alpha02 содержит эти коммиты .
Новые возможности
Экспериментальная поддержка R8 в microbench с помощью встроенных правил proguard. Обратите внимание, что эта поддержка является экспериментальной и требует AGP 8.3 для минимизации тестов модулей библиотеки. Используйте следующее, чтобы включить минификацию/оптимизацию R8 в
build.gradle
вашего тестового модуля, что должно привести к значительному увеличению производительности, в зависимости от рабочей нагрузки. ( I738a3 , б/184378053 )android { buildTypes.release.androidTest.enableMinification = true }
Исправление ошибок
- Исправлена ошибка, из-за которой предупреждение о трассировке метода выводилось на отдельной строке от вывода микротеста. ( I0455c , б/328308833 )
Версия 1.3.0-альфа01
21 февраля 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.3.0-alpha01
. Версия 1.3.0-alpha01 содержит эти коммиты.
Изменения API
- Переименованы логические параметры
MicrobenchmarkConfig
, чтобы избежать ненужного слова «следует» ( Ia8f00 , b/303387299 ). - Добавлен
BenchmarkRule.measureRepeatedOnMainThread
, чтобы тесты основных потоков (например, связанные с представлениями или пользовательскими интерфейсами создания) могли избежать срабатывания ошибок ANR, особенно в больших пакетах CI. ( I5c86d ) - Добавлен
FrameTimingGfxInfoMetric
, экспериментальная альтернативная реализацияFrameTimingMetric
с измерениями, поступающими непосредственно с платформы, а не извлеченными из трассировки Perfetto. ( I457cb , б/322232828 ) - Добавьте возможность сохранять профиль ART во время отдельных итераций
warmUp
. ( I17923 ) - Несколько изменений в API
TraceSectionMetric
:- Добавить
Mode.Min
,Mode.Max
- Добавьте аргумент метки, чтобы переопределить имя раздела как метку метрики.
- Добавлено название режима для вывода, чтобы уточнить значение метрики.
- Изменено значение по умолчанию для суммы, так как большая часть использования этой метрики предназначена для повторяющихся событий. Обратите внимание на эти изменения в использовании CI, так как это может привести к разрывам или нарушению анализа. ( Ic1e82 , б/301892382 , б/301955938 )
- Добавить
Исправление ошибок
- Улучшено сообщение об ошибке в плагине gradle базового профиля, когда указанное управляемое устройство не существует ( Idea2b , b/313803289 ).
- Исправление включения базовых профилей библиотеки в AAR до AGP 8.3.0-alpha15 ( I1d2af , b/313992099 ).
- Исправлен исходный URL-адрес базового и стартового профиля в конце задачи генерации ( I802e5 , b/313976958 ).
- Скорректированы таймауты источника данных для попытки исправить
java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)]
( I8dc7d , b/323601788 ) - Добавьте два аргумента инструментария для переопределения поведения отключения шейдера для обхода сбоев при тестировании приложений без
ProfileInstaller
1.3:-
androidx.benchmark.dropShaders.enable=true/false
: можно использовать для пропуска всех отбрасываний шейдеров (включая то, что происходит вStartupMode.Cold
запусках), особенно при тестировании приложений, которые еще не используют Profileinstaller 1.3. -
androidx.benchmark.dropShaders.throwOnFailure=true/false
: может использоваться для допуска сбоев при попытке удалить шейдеры, например, при тестировании приложений без Profileinstaller 1.3 ( I4f573 ).
-
- Пропустить трассировку метода в потоке пользовательского интерфейса, если ожидается, что она займет больше нескольких секунд, и очистить трассировку метода при выдаче. ( I6e768 )
- Выдавайте, когда имена файлов длиннее 200 символов, чтобы избежать неясных сбоев при записи или постобработке файлов. ( I4a5ab )
- Устранена проблема, из-за которой незавершенные кадры в начале и конце трассировки могли быть объединены в пары, что ошибочно регистрировалось как один очень длинный кадр. ( I39353 , б/322232828 )
- Используйте
--skip verification
на API 30+ при переустановке пакета на API 30-33, чтобы очистить профили ART в пользовательских сборках. Это помогает обойти предупреждения Play Protect, которые вызывают сбои на некоторых классах устройств. ( Ic9e36 ) - Используйте
am force-stop
чтобы закрыть приложения, если они не системные, например System UI или Launcher. ( I5e028 ) - Macrobenchmark теперь ожидает
1 second
, пока целевое приложение сбросит профиль ART (ранее оно ждало500 ms
). ( И85а50 , б/316082056 ) - Устраните ошибку
FrameTimingMetric
, когда кадры не создаются, и всегда выводите ссылку для отслеживания в случае сбоя анализа метрики, чтобы помочь в диагностике проблемы. ( I956b9 ) - Исправлен сбой в
FrameTimingMetric
из-за которого не удавалось проанализировать идентификатор кадра, особенно на некоторых OEM-устройствах. ( Ia24bc , б/303823815 , б/306235276 ) - Ослаблена строгость проверок в
FrameMetrics
и добавлена более подробная информация в сообщения об ошибках. ( Иадеде )
Версия 1.2
Версия 1.2.4
17 апреля 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.2.4
. Версия 1.2.4 содержит эти коммиты .
Исправление ошибок
- Исправлена ошибка, из-за которой базовый профиль srcset не настраивался в вариантах тестирования. Также исправлено
automaticGenerationDuringBuild
в библиотеках, вызывающее циклическую зависимость. ( I28ab7 , б/333024280 ) - Используйте
am force-stop
чтобы закрыть приложения, которые не являются системными, например System UI или Launcher. Это исправляет сбой тестовStartupMode.COLD
из-за «Пакет $package не должен быть запущен до холодного запуска!» из-за того, что процесс kill не удался полностью. ( I5e028 )
Версия 1.2.3
24 января 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.2.3
. Версия 1.2.3 содержит эти коммиты.
Исправление ошибок
- Удалено исключение из подключаемого модуля Gradle базового профиля, если версия AGP 8.3.0 или выше.
- Исправлено включение базовых профилей библиотеки в AAR до AGP 8.3.0-alpha15.
Версия 1.2.2
1 декабря 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.2
. Версия 1.2.2 содержит эти коммиты.
Базовые профили
- В журналах выполнения путь к выходному файлу базового профиля будет отображаться как URI локального файла ( aosp/2843918 , aosp/2853665 , b/313976958 ).
Версия 1.2.1
15 ноября 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.1
. Версия 1.2.1 содержит эти коммиты.
Новые возможности
- Улучшено сообщение об ошибке, когда пользователь отключает варианты тестирования ( b/307478189 ).
- Добавлены свойства для поддержки интеграции тестового запуска AS ( b/309805233 ), ( b/309116324 ).
Версия 1.2.0
18 октября 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0
. Версия 1.2.0 содержит эти коммиты.
Важные изменения с версии 1.1.0
Базовые профили
- Новый плагин Gradle Baseline Profile автоматизирует сбор и включение базовых профилей в рабочий процесс тестирования и сборки.
-
BaselineProfileRule.collect
теперь стабильная версия, оптимизированная и упрощенная версия предыдущего экспериментального APIBaselineProfileRule.collectBaselineProfile
- Просто укажите
packageName
и управляйте своим приложением.
- Просто укажите
- Для библиотек, генерирующих базовые профили, теперь вы можете фильтровать правила, сгенерированные либо в коде (аргумент
BaselineProfileRule.collect
), либо, что еще проще, в плагине gradle. - Исправления
- Исправлен сбор базовых профилей на Android U+ ( Id1392 , b/277645214 ).
Макробенчмарк
- Сборник
- Macrobenchmark теперь корректно полностью сбрасывает состояние компиляции для каждой компиляции — для этого требуется переустановить APK до Android 14, поэтому настоятельно рекомендуется проводить тестирование на Android 14+, если вы хотите сохранить состояние (например, вход пользователя) в измеряемые данные.
- Вы также можете обойти эту проблему, управляя компиляцией приложения отдельно и пропуская компиляцию с помощью
CompilationMode.Ignore()
или аргумента инструментария.
Аргументы инструментирования
- Поддержка аргумента инструментария
androidx.benchmark.dryRunMode.enable
(уже доступен в микробенчмарке) для более быстрого запуска проверки (например, при создании теста или при предварительной отправке) - Поддержка
androidx.benchmark.profiling.mode=StackSampling
иMethodTracing
. - Добавлен
androidx.benchmark.enabledRules
, позволяющий фильтровать базовый профиль во время выполнения по сравнению с тестами правил макробенчмарка. - Добавлен аргумент
androidx.benchmark.perfettoSdkTracing.enable
, позволяющий включить трассировку с помощью tracing-perfetto, например, трассировку рекомпозиции Compose. Обратите внимание, что при использовании сStartupMode.COLD
на время будет существенное влияние, поскольку библиотека трассировки загружается и включается во время запуска приложения.
- Поддержка аргумента инструментария
Требования
- Macrobenchmark теперь требует
ProfileInstaller
1.3.0 или более поздней версии в целевом приложении, чтобы включить захват/сброс профиля и очистку кэша шейдеров.
- Macrobenchmark теперь требует
Новые экспериментальные API метрик
- Добавлен экспериментальный
TraceSectionMetric
, который позволяет извлекать простое время из блоковtrace("") {}
в вашем приложении, или TraceMetric для использования всех возможностей запросов PerfettoTraceProcessor
. - Добавлен экспериментальный
PowerMetric
для сбора информации об энергопотреблении. - Добавлен экспериментальный
MemoryCountersMetric
для подсчета ошибок страниц. - Добавлен экспериментальный API
PerfettoTraceProcessor
, который используется внутри компании для извлечения метрик из системных трассировок (также известных как трассировки Perfetto).
- Добавлен экспериментальный
Исправления
- Исправлены сбои при установке или извлечении профилей из приложения, установленного из нескольких APK (например, из пакета приложений).
- Исправлено
FrameTimingMetric
игнорировавшее кадры с несогласованными идентификаторами кадров (как правило, кадры во время пульсаций в API 31+) ( I747d2 , b/279088460 ). - Исправлены ошибки анализа трассировок > 64 МБ ( Ief831 , b/269949822 )
- Уточнены ошибки, когда образ ОС устройства (особенно эмулятора) неправильно настроен для трассировки или компиляции.
- Пропустить проверку уровня заряда батареи для устройств без батареи (микро и макро)
- Улучшен вывод файлов с более четкими ошибками для недопустимых выходных каталогов и более безопасными настройками по умолчанию.
- Повышена стабильность
StartupMode.COLD
за счет последовательного удаления кэша шейдеров (также предоставляется черезMacrobenchmarkScope.dropShaderCache
). - Исправлен резервный вариант для
startActivityAndWait
.
Микробенчмарк
- Функции
- Профилирование было перенесено в отдельный этап после других показателей, поэтому один тестовый запуск может отображать как точное время , так и результаты профилирования.
- Экспериментальные API
- Добавлен экспериментальный API
MicrobenchmarkConfig
для определения пользовательских метрик и настройки трассировки и профилирования. Может использоваться для захвата трассировок методов или точек трассировки (но помните о накладных расходах на трассировку). - Добавлены экспериментальные API для управления
BenchmarkState
отдельно отBenchmarkRule
, без JUnit. - Добавлена экспериментальная запись
PerfettoTrace
, позволяющая собирать трассировки Perfetto с настраиваемой конфигурацией отдельно от API-интерфейсов тестирования.
- Добавлен экспериментальный API
- Исправления
- Обходной путь: отсутствие ведущих пробелов в результатах тестирования Android Studio.
- Устранена проблема, из-за которой предупреждения не отображались в результатах тестирования Android Studio.
- Исправлен сбой
SampledProfiling
на Android 13 (API 33) и выше. - Значительно улучшена производительность
dryRunMode
за счет пропуска трассировкиIsolationActivity
и Perfetto (режим пробного запуска до 10 раз быстрее в старых версиях ОС).
Версия 1.2.0-rc02
6 октября 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-rc02
. Версия 1.2.0-rc02 содержит эти коммиты.
Исправление ошибок
- Исправлен вывод файла Benchmark, чтобы он больше не прерывал копирование файлов подключаемого модуля
BaselineProfile
. Файлы были созданы и скопированы с устройства, но были переименованы так, что плагин gradle их не увидел. ( I8dbcc , б / 303034735 , б / 296453339 ) - Уточнены сообщения об ошибках загрузки
tracing-perfetto
при внедрении из модуля макротестирования в целевое приложение.
Версия 1.2.0-rc01
20 сентября 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-rc01
. Версия 1.2.0-rc01 содержит эти коммиты.
Исправление ошибок
- Исключение (с инструкциями по устранению) теперь выдается, когда трассировка Perfetto SDK не может инициализироваться в тесте производительности. ( I6c878 , б / 286228781 )
- Исправлен сбой OOM при преобразовании трассировки метода ART -> формат perfetto. ( I106бд , б/296905344 )
- (Macrobenchmark) Уточнена метка трассировки метода при связывании с выходными данными теста Studio, а также исправлены имена файлов трассировки методов, которые стали уникальными на устройстве/хосте, чтобы они не перезаписывались при запуске более одного теста. ( I08e65 , б / 285912360 )
- Гарантирует, что устройство активизируется при захвате базового профиля. ( I503FC )
Версия 1.2.0-бета05
30 августа 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-beta05
. Версия 1.2.0-beta05 содержит эти коммиты.
Новые возможности
- Плагин Baseline Profile Gradle теперь поддерживает плагин Android Gradle 8.3. ( аосп/2715214 )
Версия 1.2.0-бета04
23 августа 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-beta04
. Версия 1.2.0-beta04 содержит эти коммиты.
Новые возможности
- Плагин Baseline Profiles Gradle теперь поддерживает плагин Android Gradle 8.3. ( аосп/2715214 )
Исправление ошибок
- Исправьте сбои при записи/перемещении и извлечении файлов (особенно из параметризованных тестов), дополнительно очищая имена выходных файлов, избегая знаков «=» и «:» в именах выходных файлов. ( I759d8 )
Версия 1.2.0-бета03
9 августа 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-beta03
. Версия 1.2.0-beta03 содержит эти коммиты.
Изменения API
- Добавлен аргумент для фильтрации
TraceSectionMetric
только для целевого пакета по умолчанию ( Ia219b , b/292208786 ).
Исправление ошибок
- Аргумент инструментария
fullTracing.enable
переименован вperfettoSdkTracing.enable
для обеспечения соответствия имени артефакта и другим ссылкам.fullTracing.enable
продолжит работать в качестве резервного варианта. ( I7cc00 ) - Внутренние точки трассировки библиотеки тестов (включая трассировку цикла/фазы микробенчмарка) теперь будут отображаться в средстве просмотра системной трассировки Studio и вкладываться в правильный процесс в Perfetto. ( I6b2e7 , б/293510459 )
- Удалена ошибка макротеста NOT-PROFILEABLE в API 31+ и пропущена профилируемая проверка на корневых устройствах eng/userdebug. ( I2abac , б / 291722507 )
- При использовании оптимизации макета Dex правила профиля запуска теперь также считаются правилами базового профиля. ( аосп/2684246 , б/293889189 )
Версия 1.2.0-бета02
26 июля 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-beta02
. Версия 1.2.0-beta02 содержит эти коммиты.
Изменения API
- Добавлены экспериментальные API для пользовательских метрик и конфигураций microbench (например, профилировщик и трассировка). ( I86101 , б / 291820856 )
Исправление ошибок
- Сообщайте об ошибке в макросборке, когда ОС неправильно настроена для трассировки, как это было недавно исправлено в эмуляторах API 26/28 ARM64. ( I0a328 , б/282191686 )
- Добавлена информация об ошибке сброса компиляции, предлагающая обновить эмулятор, поскольку некоторые эмуляторы недавно устранили эту проблему. ( I8c815 , б / 282191686 )
- Сделайте
androidx.test.uiautomator:uiautomator:2.2.0
api
вместо зависимостиimplementation
. ( I1981e )
Версия 1.2.0-бета01
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-альфа16
21 июня 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-alpha16
. Версия 1.2.0-alpha16 содержит эти коммиты.
Изменения API
- API
BaselineProfileRule.collectBaselineProfile()
переименован вBaselineProfileRule.collect()
. ( I4b665 )
Исправление ошибок
- Поддержка Macrobenchmark для
androidx.benchmark.profiling.mode = MethodTracing
. ( I7ad37 , б/285912360 ) - Профилирование микробенчмарков перенесено в отдельный этап, поэтому оно происходит последовательно после измерения, а не заменяет его. Разделы трассировки
MethodTracing
теперь также включаются в записанную трассировку Perfetto, если таковая имеется. ( I9f657 , б / 285014599 ) - Добавьте измерение количества в
TraceSectionMetric
с помощьюMode.Sum
. ( Ic121a , б/264398606 )
Версия 1.2.0-альфа15
7 июня 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-alpha15
. Версия 1.2.0-alpha15 содержит эти коммиты.
Новые возможности
- Добавлен экспериментальный
MemoryUsageMetric
для отслеживания использования памяти целевым приложением. ( I56453 , б / 133147125 , б / 281749311 ) - Добавьте поддержку полностью пользовательских конфигураций Perfetto с помощью
PerfettoTrace.record
( If9d75 , b/280460183 ). - Добавлено свойство, позволяющее пропустить создание базового профиля. Использование:
./gradlew assemble -Pandroidx.baselineprofile.skipgeneration
. ( I37fda , б/283447020 )
Изменения API
- API
collectBaselineProfile
всегда создает стабильные базовые профили. APIcollectStableBaselineProfile
был удален, и вместо него следует использоватьcollectBaselineProfile
. ( I17262 , б / 281078707 ) - Аргумент
filterPredicate
вBaselineProfileRule
изменен на ненулевое значение с эквивалентным значением по умолчанию, чтобы поведение фильтра по умолчанию было более понятно в документации. ( I3816e )
Исправление ошибок
- Отключите трассировку
IsolationActivity
и Perfetto вdryRunMode
, чтобы значительно повысить производительность, поскольку они занимали большую часть времени выполнения. ( Ie4f7d ) - Поддержка выборки стека вызовов в Macrobenchmarks с использованием аргументов инструментального теста
androidx.benchmark.profiling.mode=StackSampling
иandroidx.benchmark.profiling.sampleFrequency
. ( I1d13b , б/282188489 ) - Исправлен сбой при сбросе шейдеров на Android U (API 34), а также на эмуляторах. ( I031ca , б/274314544 )
Версия 1.2.0-альфа14
3 мая 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-alpha14
. Версия 1.2.0-alpha14 содержит эти коммиты.
Исправление ошибок
- Исправлена ошибка, из-за которой
FrameTimingMetric
игнорировал кадры с несовместимыми идентификаторами кадров. Это привело бы к тому, что некоторые анимации в последних версиях платформы (API 31+) игнорировали многие кадры во время анимацииRenderThread
(например, во время пульсации). ( I747d2 , б / 279088460 ) - Исправлен анализ процессором трассировки трасс размером более 64 МБ. ( Ief831 , б/269949822 )
- Исправлен сбой при создании базового профиля на Android U из-за другого вывода команды
pm dump-profiles
. ( Id1392 , б/277645214 ) - Исправлен сценарий блокировки тактовой частоты графического процессора для правильного сравнения строк ( I53e54 , b/213935715 ).
Версия 1.2.0-альфа13
5 апреля 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-alpha13
. Версия 1.2.0-alpha13 содержит эти коммиты.
Изменения API
- Добавлен параметр типа профиля при создании базовых профилей для поддержки предстоящей функции профиля запуска ( Ie20d7 , b/275093123 ).
- Добавлен новый экспериментальный API
TraceMetric
для определения полностью настраиваемых метрик на основе содержимого трассировки Perfetto. ( I4ce31 , б/219851406 ) - Добавьте экспериментальную метрику, чтобы определить количество ошибок страниц во время тестирования. ( I48db0 )
Версия 1.2.0-альфа12
22 марта 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-alpha12
. Версия 1.2.0-alpha12 содержит эти коммиты.
Новые возможности
- Новый плагин gradle базового профиля выпущен в альфа-версии, что упрощает создание базового профиля и упрощает рабочий процесс разработчика.
Изменения API
- Удалена поддержка трассировки Perfetto в API 21 и 22, которая включает как Microbenchmarks, так и экспериментальные API
PerfettoTrace
. До этой версии соединенияUiAutomation
на некоторых устройствах были ненадежными. ( I78e8c ) - Добавлен общедоступный экспериментальный API для
PerfettoTraceProcessor
, позволяющий анализировать содержимое трассировки. Это шаг к полностью настраиваемым метрикам, основанным на данных трассировки Perfetto. ( I2659e , б / 219851406 )
Версия 1.2.0-альфа11
8 марта 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-alpha11
. Версия 1.2.0-alpha11 содержит эти коммиты.
Исправление ошибок
- Исправлены сбои в
MacrobenchmarkRule
иBaselineProfileRule
при переустановке или извлечении профилей из пакета приложений с несколькими APK. ( I0d8c8 , б/270587281 )
Версия 1.2.0-альфа10
22 февраля 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-alpha10
. Версия 1.2.0-alpha10 содержит эти коммиты.
Новые возможности
- В Android 14+ Macrobenchmark больше не переустанавливает целевые приложения для сброса состояния компиляции благодаря новой функции платформы. Раньше необходимо было иметь рутированное устройство или иметь дело с удалением всего состояния приложения (например, входа пользователя) перед запуском каждого теста. ( I9b08c , б/249143766 )
Исправление ошибок
- Исправьте
DryRunMode
, чтобы он больше не аварийно завершал работу с пустым профилем из-за пропуска компиляции. Вместо этого он запускает одну итерацию и извлекает профиль, чтобы что-то зафиксировать. ( I2f05d , б/266403227 ) - Исправлен сбой
PowerMetric
при проверке наличия powerstats на старых уровнях API. ( 5faaf9 , б/268253898 )
Версия 1.2.0-альфа09
11 января 2023 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-alpha09
. Версия 1.2.0-alpha09 содержит эти коммиты.
Исправление ошибок
- Включена передача
None
в аргумент инструментарияandroidx.benchmark.enabledRules
, чтобы отключить все тесты/генерацию базового профиля. ( I3d7fd , б/258671856 ) - Исправлен захват
PerfettoTrace
в модулях приложения (т. е. тестовых APK без самоинструмента) ( I12cfc ). - Исправлен порядок аргументов извлечения adb базового профиля в выходных данных Studio ( I958d1 , b/261781624 ).
- API-интерфейс 33 эмулятора руки теперь правильно распознается как таковой при попытке запустить макротест и правильно выводит предупреждение. ( 69133б , б/262209591 )
- Пропустить проверку уровня заряда батареи на устройствах без батареи в Macrobenchmark ( fe4114 , b/232448937 )
Версия 1.2.0-альфа08
7 декабря 2022 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-alpha08
. Версия 1.2.0-alpha08 содержит эти коммиты.
Изменения API
- Добавлены новые экспериментальные API
PerfettoTrace.record {}
иPerfettoTraceRule
для захвата трассировок Perfetto (также известных как системные трассировки) в рамках теста для проверки поведения и производительности теста. ( I3ba16 ) -
BaselineProfileRule
теперь принимает предикат фильтра вместо списка префиксов пакетов. Это дает тесту полный контроль над фильтрацией. ( I93240 ) - Добавьте экспериментальный API
BaselineProfileRule.collectStableBaselineProfile
, который ожидает, пока базовый профиль не станет стабильным в течение N итераций. ( I923f3 ) - Добавьте возможность указывать префикс имени выходного файла при создании базовых профилей с помощью
BaselineProfileRule
. ( I7b59f , б / 260318655 )
Исправление ошибок
- Повысить безопасность записи выходных файлов, что должно препятствовать скрытой записи/добавлению выходных файлов, особенно в API 21/22. ( If8c44 , б/227510293 )
- Исправьте вывод трассировки
simpleperf
, чтобы правильно создать и разместить файл. В более общем плане это также должно решить проблемы, когда файл безуспешно извлекается gradle. ( I12a1c , б / 259424099 ) - Улучшено сообщение об ошибке Profileinstaller, выводящееся, когда ProfileInstaller слишком старый. Теперь вам предлагается обновить версию Profileinstaller (1.2.1) для измерения базовых профилей API с 31 по 33, вместо того, чтобы говорить, что это не поддерживается. ( Я517ф , б/253519888 )
- Исправлено несколько сбоев команд оболочки при сообщении об ошибке. Печать необходимого API <=23, включая сбои двоичной настройки захвата perfetto и сбои захвата трассировки ( Ib6b87 , b/258863685 ).
- Автоматически сортируйте созданные правила профиля, чтобы минимизировать количество изменений по мере их изменения с течением времени (при возврате правил профиля в систему контроля версий). ( Ie2509 )
- Исправлен сбой в нерутированных сборках ниже Android 13 (API 33) с сообщением
Expected no stderr from echo 3 > /proc/sys/vm/drop_caches
( I6c245 , b/259508183 ).
Известные проблемы : MacrobenchmarkScope.dropShaderCache()
может привести к сбою из-за отсутствия реестра широковещательной рассылки в манифесте Profileinstaller, который еще не выпущен. ( I5c728 , b/258619948 ) Чтобы обойти проблему в profileinstaller:1.3.0-alpha02
, добавьте следующее в AndroidManifest.xml вашего приложения (не вашего теста):
<!-- workaround bug in profileinstaller 1.3.0-alpha02, remove when updating to alpha03+ -->
<receiver
android:name="androidx.profileinstaller.ProfileInstallReceiver"
android:permission="android.permission.DUMP"
android:exported="true">
<intent-filter>
<action android:name="androidx.profileinstaller.action.BENCHMARK_OPERATION" />
</intent-filter>
</receiver>
Версия 1.2.0-альфа07
9 ноября 2022 г.
Выпущен androidx.benchmark:benchmark-*:1.2.0-alpha07
. Версия 1.2.0-alpha07 содержит эти коммиты.
Изменения API
- Добавляет
PowerMetric
API для измерения энергии и мощности в Macrobenchmarks. ( Ифе601 , б/220183779 ) - Исправлен
MacrobenchmarkScope.dropShaderCache()
который фактически удалял кэш шейдеров. Это устраняет примерно 20 мс шума в тестахStartupMode.COLD
, поскольку шейдеры теперь последовательно очищаются на каждой итерации. РаньшеPartial
компиляция с использованием итераций прогрева сообщала некорректно быстрые числа, поскольку во время прогрева с большей вероятностью происходило кэширование шейдера. Для этого исправления требуется либо рутированное устройство, либо использованиеprofileinstaller:1.3.0-alpha02
в целевом приложении. Информацию об изменениях API библиотекиProfileInstaller
можно найти на странице ProfileInstaller 1.30-alpha02 . ( Я5171 , б/231455742 ) - Добавлен
TraceSectionMode("label", Mode.Sum)
, что позволяет измерять общее время, проведенное на нескольких сечениях трассировки с той же меткой. Например,TraceSectionMetric("inflate", Mode.Sum)
сообщит о метрическихinflateMs
для общего времени в макробенчмарке, потраченном на инфляцию. Также удалено требование API 29, так какTraceSectionMetric
работает вместе сandroidx.tracing.Trace
обратно к более низким уровням API с использованиемforceEnableAppTracing
в целевом приложении. ( ID7B68 , B/231455742 )
Исправление ошибок
- Улучшенная безопасность всех внутренних команд оболочки путем проверки всех выходных/ошибок. ( I5984d , b/255402908 , b/253094958 )
- Укажите устройство в базовом профиле
adb pull
-команде, чтобы команда Pull можно было просто скопировать, если подключены несколько устройств (до одного эмулятора) ( i6ac6c , b/223359380 ) - Добавьте ошибку, если MacRobenchmark Test APK не настроен как самостоятельно. Эта ошибка предотвращает Macrobenchmarking из процесса целевого приложения. В процессе Macrobench не сможет скомпилировать/убить/запустить приложение или контролировать свои собственные разрешения ( i4279b )
- Исправлена проблема в
measureRepeated()
, гдеStartupMode.COLD
не убивает целевой процесс послеsetupBlock
. ТеперьsetupBlock
взаимодействующий с приложением, не оставит процесс приложения, и неверное измерение холодного старта. ( I8ebb7 )
Версия 1.2.0-альфа06
24 октября 2022 г.
androidx.benchmark:benchmark-*:1.2.0-alpha06
выпускается. Версия 1.2.0-alpha06 содержит эти коммиты.
API меняется
-
BaselineProfileRule
больше не требует корня на Android 13 (API 33) и больше не эксперименталь. ( IE0A7D , B/250083467 , B/253094958 )- Это изменение также фиксирует, как профили из приложения промываются на диск на непрестанных устройствах, но требуют обновления зависимости профиля целевого приложения.
- Чтобы использовать
BaselineProfileRule
илиCompilationMode.Partial(warmupIterations)
на неровном устройстве, вы также должны обновить ваше целевое приложение для использованияandroidx.profileinstaller.profileinstaller:1.3.0-alpha01
. Это позволяет правильно промывать профиль на диск, чтобы его можно было собрать/извлечь.
Исправление ошибок
- Исправляет сбой
SampledProfiling
на API 33+. ( I40743 , b/236109374 )
Версия 1.2.0-альфа05
5 октября 2022 г.
androidx.benchmark:benchmark-*:1.2.0-alpha05
выпускается. Версия 1.2.0-alpha05 содержит эти коммиты.
Исправление ошибок
- Fix Frame Breakdown в Studio System Trace Viewer для просмотра тестов .
- Правильный
FrameTimingMetric
для перечисленияFrameOverrun
как требует API 31 вместо 29 ( i716dd , b/2207025554 ) - Установите итерацию в
BaselineProfileRule
и четко выбросьте, если целевой пакет не установлен (уже был сделан для Macrobenchmarkrule). ( IC09A3 , B/227991471 )
Версия 1.2.0-альфа04
21 сентября 2022 г.
androidx.benchmark:benchmark-*:1.2.0-alpha04
выпускается. Версия 1.2.0-alpha04 содержит эти коммиты.
Новые возможности
Добавьте поддержку
dryRunMode.enable
Amentleation Arcome в Macrobenchmark (уже доступный в Micro) для более быстрой локальной разработки, и проверка автоматизации приложений (например, в Presubmit). Это переопределяет итерации до 1, пропускает компиляцию, подавляет все ошибки конфигурации и отключает выход измерения .JSON. ( IB51B4 , B/175149857 )На командной строке Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.dryRunMode.enable=true
В build.gradle:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.dryRunMode.enable', 'true' } }
Исправление ошибок
- Фиксированные
StartupTimingMetric
чтобы больше не требует измеренных действий, которые должны быть запущены черезMacrobenchmarkScope.startActivityAndWait()
. Это означает, что метрика может забрать запуска из EG-уведомлений,Context.startActivity()
, навигации на основе активности в приложении или команд Shell. ( Ia2de6 , b/245414235 ) - Исправить ошибку, где
startActivityAndWait
и Timeout, пытаясь дождаться завершения запуска на эмуляторах, снижая строгость обнаружения кадров. ( IBE2C6 , B/244594339 , B/228946895 )
Версия 1.2.0-альфа03
7 сентября 2022 г.
androidx.benchmark:benchmark-*:1.2.0-alpha03
выпускается. Версия 1.2.0-alpha03 содержит эти коммиты.
Новые возможности
- Добавлены экспериментальные API для использования
BenchmarkState
независимо, отдельно отBenchmarkRule
/JUnit4
. ( ID478F , B/228489614 )
Исправление ошибок
- Добавлен запасной запасной путь для
startActivityAndWait
. ( 01ed77 , b/2428999915 )
Версия 1.2.0-альфа02
24 августа 2022 г.
androidx.benchmark:benchmark-*:1.2.0-alpha02
выпускается. Версия 1.2.0-alpha02 содержит эти коммиты.
API меняется
- По умолчанию
am force stop
дляMacrobenchmarkScope.killProcess()
, даже при укоренении, за исключением базового генерации профиля. Это может быть переопределено дополнительным логическим аргументом. ( 02cce9 , b/241214097 )
Исправление ошибок
- Поддержка базового профиля для системных приложений. ( I900b8 , b/241214097 )
- Поддержка проверки на метрики мощности ODPM на унылых устройствах. ( A38C78 , B/229623230 )
Версия 1.2.0-альфа01
27 июля 2022 г.
androidx.benchmark:benchmark-*:1.2.0-alpha01
выпускается. Версия 1.2.0-alpha01 содержит эти коммиты.
Новые возможности
- Новый компонент трассировки-перфетто-компонента, позволяющий инструментальности, чтобы обеспечить перфетто SDK-трассировку в приложении, которое его обнаруживает ( i2cc7f )
Добавлен
androidx.benchmark.enabledRules
Аргумент Инструментации, чтобы включить фильтрацию MacRobenchmark, чтобы пробежать только на контрольные показатели, или просто базовое образование профиля. Перейдите в «Macrobenchmark», или «BaselineProfile», чтобы просто запустить один тип теста, например, когда просто генерируяBaselineProfiles
на эмуляторе. Список, разделенный запятыми, также поддерживается. ( I756b7 , b/230371561 )Например, в Build.gradle вашего Macrobenchmark:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile' } }
Или из командной строки Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
API меняется
- Добавлен новый
PowerMetric
для измерения задач энергии и мощности в критериях. ( I9f39b , b/220183779 ) - Добавлен новый компиляционный режим
CompilationMode.Ignore
. ( IBBCF8 , B/230453509 ) - Добавлен новый параметр в
BaselineProfileRule#collectBaselineProfile
чтобы фильтровать выходной файл по именам пакетов ( IF7338 , B/220146561 ) - Позволяет разработчику разгрузку устройства для измерения источника питания. ( I6a6cb )
- Добавлена возможность очистить кеш шейдеров в
MacrobenchmarkScope
. ( I32122 ) - Позволяет разработчику настроить отображение типа метрического типа и деталей, желаемых категориями подсистемы. ( I810c9 )
- Ранее
UnsupportedOperationException
была брошена в эталон, если вы работаете на неподдерживаемом устройстве. Теперь UOE происходит только в том случае, если метрика используется на неподдерживаемом устройстве (т.е.PowerMetric.configure
). ( I5cf20 , b/227229375 ) - Добавлены
TotalPowerMetric
иTotalEnergyMetric
для измерения общей мощности и энергии в каждой категории системы в MacRobenchMarks. ( I3b26b , b/224557371 )
Исправление ошибок
- Исправлена проблема, в которой скомпилированные методы не были правильно сброшены между каждым макробенчмарком на непредсказуемых сборках. К сожалению, это требует переустановки APK каждую итерацию, которая будет очищать данные приложения для каждого макробанкмарка. ( I31c74 , b/230665435 )
- Исправлена сбоя записи трассировки на API 21/22 ( if7fd6 , b/227509388 , b/227510293 , b/227512788 )
- Проверка активности запуска обнаружение завершения, чтобы исправить «Невозможно прочитать исключение каких -либо метрик» в Startup Macrobenchmarks. ( IA517C )
Версия 1.1.1
Версия 1.1.1
9 ноября 2022 г.
androidx.benchmark:benchmark-*:1.1.1
выпущен. Версия 1.1.1 содержит эти коммиты.
Исправление ошибок
- Исправляет
android.system.ErrnoException: open failed: EACCES
которые произойдут на некоторых устройствах Android11 (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
для автоматического генерирования базовых профилей для данного критического путешествия пользователя.
-
Поддержка показателей распределения и профилирования во время прогонов MicroBenchmark.
Версия 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 при генерации базовых профилей с помощью MacrobenchMarks. ( AOSP/2062228 , B/228926421 )
Версия 1.1.0-rc02
11 мая 2022 г.
androidx.benchmark:benchmark-*:1.1.0-rc02
выпускается. Версия 1.1.0-rc02 содержит эти коммиты.
- Обратите внимание, что этот выпуск включает в себя изменение поведения, поскольку приложения теперь полностью переустанавливаются между каждым тестом, чтобы обеспечить точные измерения.
Исправления ошибок/изменения поведения
Исправлена проблема, в которой компиляция приложения не была правильно сброшена между макробанкмарами и вообще не сбрасывалась на разбитые сборки. Это исправляет многие случаи, когда запуск нескольких тестов приведет к тому, что
CompilationMode
практически не влияет на измерения. Для обхода этой проблемы целевое приложение теперь полностью переустанавливает каждый метод испытаний, который будет очищать данные приложения между каждым макробенчмарком. ( I31c74 , b/230665435 )Поскольку это предотвращает настройку состояния приложения перед тестами, теперь можно пропустить компиляцию / переустановку компиляции, чтобы обеспечить работу вокруг этого. Например, вы можете полностью собрать цель с помощью команды Cmd
cmd package compile -f -m speed <package>
, а затем обойти шаг компиляции MacRobenchmark.Например, в Build.gradle вашего Macrobenchmark:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.compilation.enabled, 'false' } }
Или из командной строки Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.compilation.enabled=false
Сделал возможным поделиться модулем между MacRobenchMarks и базовыми тестами, генерирующими тесты, добавив аргумент
androidx.benchmark.enabledRules
. Пропустите «Macrobenchmark», или «BaselineProfile», чтобы просто запустить один тип теста, например, при созданииBaselineProfiles
на эмуляторе. ( I756b7 , b/230371561 )Например, в Build.gradle вашего Macrobenchmark:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile' } }
Или из командной строки Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
Версия 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-бета06
6 апреля 2022 г.
androidx.benchmark:benchmark-*:1.1.0-beta06
выпускается. Версия 1.1.0-BETA06 содержит эти коммиты.
Исправление ошибок
- Исправить сбой записи трассировки на API 21/22 ( if7fd6 , b/227509388 )
- Проверка активности запуска обнаружение завершения, чтобы исправить «Невозможно прочитать исключение каких -либо метрик» в Startup Macrobenchmarks. ( IA517C )
- Исправлена метрики запуска для макробенчжников при использовании
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
для обнаружения теплового дросселя на 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 Plugin. AOSP/1977029
Версия 1.1.0-beta03
9 февраля 2022 г.
androidx.benchmark:benchmark-*:1.1.0-beta03
выпускается. Версия 1.1.0-beta03 содержит эти коммиты.
API меняется
- Добавлен
AudioUnderrunMetric
в библиотеку MacRobenchmark под экспериментальным флагом, чтобы разрешить обнаружение аудио -недостатков ( 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() // ... } ) }
Исправление ошибок
- Фиксированная проблема, в которой трассировки профилировщика микробанков не будут обновляться в последующих прогонах при связи на выходе студии ( 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 / отслеживания методов теперь связаны с выходом студии, аналогично другим выходам профилирования и не подавляют метрику распределения. ( IDCB65 , B/214440748 , B/214253245 )
- BaselineProfilerule теперь печатает команду
adb pull
в LogCat и Studio Output для извлечения сгенерированного базового профиля текстового файла. ( F08811 )
Версия 1.1.0-бета01
12 января 2022 г.
androidx.benchmark:benchmark-*:1.1.0-beta01
выпускается. Версия 1.1.0-beta01 содержит эти коммиты.
Исправление ошибок
- Исправляет аргумент Profiler, позволяющий игнорировать. ( I37373 , b/210619998 )
- Удаленные устаревшие
CompliationModes
( I98186 , B/213467659 ) - Переключенный базовый профиль arg
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 -интерфейс
android.os.Trace
илиandroidx.tracing
JetPack), чтобы избежать влияния на результаты. Это отслеживание должно быть полезно при диагностике нестабильности, особенно из источников за пределами эталона. ( I298be , b/205636583 , b/145598917 ) - Уточните
CompilationModes
в три класса - полные, нет, частично. Раньше они были непоследовательно названы в честь компиляционных аргументов (которые мы сейчас рассматриваем как детали реализации) и функции. Это делает более четкие компромиссы, потенциальные комбинации и поведение между версиями платформы. ( I3d7bf , b/207132597 ) - Настройка и мера теперь всегда в парах, по порядку. Теперь вы можете запросить имя пакета и итерацию (хотя итерация может быть
null
в определенных сценариях разминки). ( ID3B68 , B/208357448 , B/208369635 )
Исправление ошибок
- Fixed
CompilationMode.Speed
неправильно обрабатывается какNone
( I01137 )
Версия 1.1.0-Alpha12
17 ноября 2021 г.
androidx.benchmark:benchmark-*:1.1.0-alpha12
выпускается. Версия 1.1.0-Alpha12 содержит эти коммиты.
Новые возможности
- Добавьте экспериментальный следы для пользовательских измерений на основе трассировки. ( I99db1 , b/204572664 )
Исправление ошибок
- Устройство Wake Каждая итерация, чтобы убедиться, что пользовательский интерфейс может быть протестирован - требует отключения блокировки. ( IBFA28 , B/180963442 )
- Исправляет несколько сбоев в режиме профилирования StackSampling на эмуляторах и неровных устройствах ( ICDBDA , B/202719335 )
- Удал 0,5 секунды в конце каждой итерации - если вы видите пропущенные метрики с этим изменением, пожалуйста, подайте ошибку. ( Iff6aa )
- Уменьшите шансы на сброшенные данные и более низкие накладные расходы на отступление от трассировки ( ID2544 , B/199324831 , B/204448861 )
- Уменьшите размер трассировки на ~ 40%, переключившись на компактный формат хранения. ( Id5fb6 , b/199324831 )
- Обновленные реализации метрик стартапов всегда заканчиваются в конце renderThread. Это будет более содержимым в разных версиях платформы и более тесно сопоставляется с измерениями в приложении. ( 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 ) - Удаляет измеренный вариант интерфейса, который был добавлен для абонентов Java, так как это вызвало двусмысленность при завершении/разрешении метода. Абоненты Java снова должны вернуть единицу. Если это неудобство, пожалуйста, подайте ошибку, мы можем вернуться в будущую версию. ( IFB23E , B/204331495 )
Версия 1.1.0-Alpha10
27 октября 2021 г.
androidx.benchmark:benchmark-*:1.1.0-alpha10
выпускается. Версия 1.1.0-Alpha10 содержит эти коммиты.
API меняется
- Backport StartuptimingMitric для работы с API 23. Эта новая реализация также лучше обрабатывает отчеты (), чтобы подождать, пока не будет предоставлен соответствующий контент. ( IF3AC9 , B/183129298 )
- Добавлены загрузки JVMoverload в несколько методов MacRobenchMarkScope для абонентов Java. ( I644FE , B/184546459 )
- Предоставьте альтернативную функцию Macrobenchmarkrule.measurePeated, которая использует
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 )
- Переключитесь на метрики с плавающей запятой во всех эталонных библиотеках (усеченные в студийном пользовательском интерфейсе). ( I69249 , B/197008210 )
Версия 1.1.0-Alpha07
1 сентября 2021 г.
androidx.benchmark:benchmark-*:1.1.0-alpha07
выпускается. Версия 1.1.0-Alpha07 содержит эти коммиты.
API меняется
- Повышен MIN API до 21, чтобы отразить предполагаемый самый низкий уровень API, который будет поддержан в будущем. Текущий MIN API поддерживается, продолжает передаваться через обязанный () и в настоящее время 29 ( I440D6 , B/183129298 )
Исправление ошибок
- Исправляет
ProfileInstaller
, чтобы упростить приложения, используя базовые профили для запуска MacroBenchMarks с использованиемCompilationMode.BaselineProfile
. ( I42657 , B/196074999 ) Примечание. Требуется также обновлениеandroidx.profileinstaller:profileinstaller:1.1.0-alpha04
или более. -
StartupMode.COLD
+CompilationMode.None
CTECHMARDS теперь более стабильны. ( I770CD , B/196074999 )
Версия 1.1.0-альфа06
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-альфа05
4 августа 2021 г.
androidx.benchmark:benchmark-*:1.1.0-alpha05
выпускается. Версия 1.1.0-alpha05 содержит эти коммиты.
1.1.0-alpha04
был отменен до выпуска из-за спорального сбоя. б/193827052
API меняется
- SwartAtactivityAndWait для вызова запуска через
am start
, что сокращает время каждой итерации измерения примерно на 5 секунд, за счет больше не поддерживая посылки. ( I5a6f5 , b/192009149
Исправление ошибок
- Уменьшите агрессивность обнаружения тепловой дроссельной заслонки и перескажите базовую линию, если часто обнаруживаются дроссели. ( I7327b )
- Исправляет FrametimingMitric для работы на бета -версии Android ( IB60CC , B/193260119 )
- Используйте
EmptyActivity
, чтобы вывести целевое приложение из напряженного состояния, чтобы лучше поддерживатьCompilationMode.BaselineProfile
. ( ID7CAC , B/192084204 ) - Изменено расширение файла трассировки на
.perfetto-trace
в соответствии с стандартом платформы. ( I4c236 , b/174663039 ) - StartuptimingMitric теперь выводит метрику «Полностьюдрансм», чтобы измерить время до завершения вашего приложения. Чтобы определить эту метрику для вашего приложения, вызовите Activity.fortlyDrawn, когда ваш начальный контент будет готов, например, когда ваши первоначальные элементы списка загружаются из DB или сети. (Отчетный метод, доступный без проверки версий в виде сборки на компоненту факторов). Обратите внимание, что ваш тест должен работать достаточно долго, чтобы захватить метрику (StartActivity и не ждет отчетов). ( IF1141 , B/179176560 )
- Снижение стоимости добавления метаданных пользовательского интерфейса на следы на 50+ мс ( IC8390 , B/193923003 )
- Резкое увеличение частоты опроса при остановке трассировки, что может уменьшить э .
Версия 1.1.0-альфа03
16 июня 2021 г.
androidx.benchmark:benchmark-*:1.1.0-alpha03
выпускается. Версия 1.1.0-alpha03 содержит эти коммиты.
Новые возможности
- Добавлен новый
CompilationMode.BaselineProfile
для поддержки профилей, установленных с использованием библиотеки JetPack ProfileInstaller . ( AOSP/1720930 )
Исправление ошибок
Образец Gradle Code для подавления ошибок в контроле был обновлен для использования не разработанного API с синтаксисом, который также поддерживает пользователей .gradle.kts.
Например,
testInstrumentationRunnerArguments["androidx.benchmark.suppressErrors"] = "EMULATOR,LOW-BATTERY"
Версия 1.1.0-альфа02
18 мая 2021 г.
Benchmark Version 1.1.0 -Alpha02 привносит большой компонент для бенчмаркинга - Macrobenchmark. В дополнение к эталону , позволяющему измерять петли процессора, Macrobenchmark позволяет измерять взаимодействия с целым приложением, такие как запуск и прокрутка, и следы захвата. Для получения дополнительной информации см. Документацию библиотеки .
androidx.benchmark:benchmark-*:1.1.0-alpha02
выпускается. Версия 1.1.0-alpha02 содержит эти коммиты.
Новые возможности
Macrobenchmark Artifacts добавлены ( 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/1618447393 )
- Исправление для чтения устройства максимальная частота. ( I55c7a )
Версия 1.1.0-альфа01
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
- Метрика распределения - тесты теперь проводят дополнительную фазу после разминки и времени, захватывая количество распределения. Распределение может вызвать проблемы с производительностью на более старых версиях платформы (140NS в O стало 8NS в M - измерено на Nexus5x, с заблокированными часами). Эта метрика отображается в выходе консоли Android Studio, а также в
- Поддержка профилирования - теперь вы можете собирать данные профилирования для контрольного запуска, чтобы проверить, почему ваш код может работать медленно. Bendchmark поддерживает захват либо отслеживания метода, либо выборки метода из искусства. Эти файлы могут быть проверены с помощью Profiler внутри Android Studio с использованием файла> Open .
- Плагин Benchmark Gradle теперь предоставляет по умолчанию для более простой настройки:
-
testBuildType
настроен на выпуск по умолчанию, чтобы избежать использования зависимостей со встроенным покрытием кода. Выпуск BuildType также настроен в качестве строительства по умолчанию, который позволяет Android Studio автоматически выбирать правильный вариант сборки при открытии проекта в первый раз. ( B/138808399 ) -
signingConfig.debug
используется в качестве конфигурации по умолчанию ( B/153583269 )
-
** Исправление ошибок **
- Значительно уменьшило накладные расходы на разминки, где первое измерение для каждого теста было искусственно выше, чем другие. Эта проблема была более выраженной в очень маленьких критериях (1 микросекунд или меньше). ( B/142058671 )
- Исправлено
InstrumentationResultParser
. ( I64988 , B/154248456 )
Известные вопросы
- Командная строка, Gradle Призывы к тесту не распечатывайте результаты напрямую. Вы можете обойти это, работая через студию или анализируя выходной файл JSON для результатов.
- Betenchmark Reporting не может извлечь отчет с устройств с приложением, установленным с заканчиванием ApplicationId, либо «Android», либо «загрузкой» (случай нечувствительна). Пользователи, попавшие в эту проблему, должны обновить плагин 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
Тенковая библиотека позволяет вам писать контрольные показатели кода приложения и быстро получить результаты.
Он предотвращает проблемы конфигурации сборки и времени выполнения и стабилизирует производительность устройства, чтобы гарантировать, что измерения являются точными и последовательными. Запустите тесты непосредственно в Android Studio или в непрерывной интеграции , чтобы соблюдать производительность кода с течением времени и предотвратить регрессии.
Основные особенности включают:
- Стабилизация часов
- Автоматическая приоритета потока
- Поддержка тестирования производительности пользовательского интерфейса, например, в образец переработки
- JIT-AWARE разминка и цикл
- Вывод JSON Benchmark для пост-обработки
Версия 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 содержит эти коммиты .
Новые возможности
- Добавлено отслеживание систарса к тестам
Исправление ошибок
- Фиксированная проблема с нестабильностью метрики, где JIT не закончится до разогрева из -за деприоритизации ( B/140773023 )
- Unified JSON Output Directory через Android Gradle Plugin 3.5 и 3.6
Версия 1.0.0-бета01
9 октября 2019 г.
androidx.benchmark:benchmark-common:1.0.0-beta01
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-beta01
и androidx.benchmark:benchmark-junit4:1.0.0-beta01
. Версия 1.0.0-BETA01 содержит эти коммиты .
Новые возможности
- Запустите сбор мусора перед каждой разминкой, чтобы уменьшить давление в памяти с одного теста до утечки до следующего ( B/140895105 )
Исправление ошибок
- Добавлено
androidx.annotation:android-experimental-lint
зависимость, так что код Java правильно образует ошибки ворса, когда экспериментальный API не используется, аналогично тому, что обеспечивается экспериментальной аннотацией Kotlin для вызывающих котлин. - Теперь правильно обнаруживает использование аргумента
additionalTestOutputDir
Instrumentation для вывода в плагине Android Gradle 3.6, чтобы узнать, когда AGP будет обрабатывать копию данных. - Исправьте необнаруженную тактовую частоту в JSON для правильной печати
-1
( B/141945670 ).
Версия 1.0.0-альфа06
18 сентября 2019 г.
androidx.benchmark:benchmark-common:1.0.0-alpha06
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha06
и androidx.benchmark:benchmark-junit4:1.0.0-alpha06
выпускаются. Версия 1.0.0-Alpha06 содержит эти коммиты .
Новые возможности
- Добавлен проверка для неправильного использования старого пакета для тестового бегуна, который теперь предоставляет более убедительное сообщение об ошибке
API меняется
- Экспериментальная аннотационная
ExperimentalAnnotationReport
, теперь правильно общедоступна. Использование экспериментального Benchmarkstate#api отчета API теперь требует этой аннотации
Версия 1.0.0-альфа05
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 меняется
-
BenchmarkState.reportData
API теперь отмечен экспериментальным
Исправление ошибок
- Исправлена сценарий, который зажигал часы, который не удастся на устройствах, которые либо пропускали утилиты оболочки
cut
, либоexpr
. - Исправлена проблема с задачей
./gradlew lockClocks
, которая была бы настройки, которые были укоренены в более старой версии утилиты SU, которая не поддерживала флаг-c
.
Версия 1.0.0-альфа04
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
. Коммуты, включенные в эту версию, можно найти здесь .
Также была добавлена новая документация для того, как использовать контрольную библиотеку без Gradle, как для использования с различными системами сборки (таких как Bazel или Buck), так и при работе в CI. Для получения дополнительной информации см. Build Clarkmarks без Gradle и запустите тесты в непрерывной интеграции .
Новые возможности
- Плагин Gradle
- Теперь автоматически отключает тестовое покрытие и по умолчанию устанавливает
AndroidBenchmarkRunner
( B/138374050 ) - Добавлена поддержка новой копии данных на основе AGP при запуске контрольных показателей и при использовании AGP 3.6+
- Теперь автоматически отключает тестовое покрытие и по умолчанию устанавливает
- Дополнения формата JSON
- Выходное общее время теста на тесте ( B/133147694 )
-
@Parameterized
Benchmarks, которые используют строку имени (например@Parameters(name = "size={0},depth={1}")
) теперь выводится имена параметров и значения на эталон на выходе JSON ( B/132578772 )
- Режим сухого пробега ( B/138785848 )
- Добавлено режим «сухой пробежки» для запуска каждой контуры эталона только один раз, чтобы проверить ошибки/сбои без захвата измерений. Это может быть полезно, например, для быстрого запуска контрольных показателей в Presubmit, чтобы проверить, что они не сломаны.
API меняется
- Структура модуля изменилась, разделяя библиотеку ( B/138451391 )
-
benchmark:benchmark-junit4
содержит классы с зависимостью JUNIT:AndroidBenchmarkRunner
иBenchmarkRule
, оба из которых перешли в пакетandroidx.benchmark.junit4
-
benchmark:benchmark-common
содержит остальную часть логики, включая API Benchmarkstate API - Этот раскол позволит библиотеке поддерживать сравнительный анализ без API JUNIT4 в будущем
-
- Предупреждения конфигурации теперь рассматриваются как ошибки и будут сбиться с тестированием ( B/137653596 )
- Это сделано для дальнейшего поощрения точных измерений, особенно в CI
- Эти ошибки могут быть уменьшены к предупреждениям с аргументом инструментов. Например:
-e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"
Исправление ошибок
- Ошибки при записи на внешнее хранилище на устройствах 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
- Добавляет поддержку Bendal Reports на устройствах Android 10 с использованием хранения Scoped
Версия 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 )
- Дополнительная статистика добавлена в соответствии с показанной метрикой (Maximum, Median, Minimum) и упрощенной упрощенной статистикой «нанос» ( B/132713851 )
Удаленный вывод XML ( B/1327144414 )
Обнаружение теплового дроссельной заслонки, удаленное из
BenchmarkState.reportData
API ( B/132887006 )
Исправление ошибок
- Фиксированные
./gradlew lockClocks
. - Обнаружение дросса отключено для эмулятора ( B/132880807 )
Версия 1.0.0-Alpha01
7 мая 2019 г.
androidx.benchmark:benchmark:1.0.0-alpha01
выпускается. Коммуты, включенные в эту версию, доступны здесь .