Контрольный показатель
Последнее обновление | Стабильный выпуск | Кандидат на выпуск | Бета-версия | Альфа-релиз |
---|---|---|---|---|
21 августа 2024 г. | 1.3.0 | - | - | - |
Объявление зависимостей
Чтобы добавить зависимость от Benchmark, вам необходимо добавить в свой проект репозиторий Google Maven. Для получения дополнительной информации прочтите репозиторий Google Maven .
Макробенчмарк
Чтобы использовать Macrobenchmark в своем проекте, добавьте следующие зависимости в файл build.gradle
для вашего модуля макробенчмарка :
классный
dependencies { androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.3.2" }
Котлин
dependencies { androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.3.2") }
Микробенчмарк
Чтобы использовать Microbenchmark в своем проекте, добавьте следующие зависимости в файл build.gradle
для вашего модуля microbenchmark :
классный
dependencies { androidTestImplementation "androidx.benchmark:benchmark-junit4:1.3.2" } android { ... defaultConfig { ... testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Котлин
dependencies { androidTestImplementation("androidx.benchmark:benchmark-junit4:1.3.2") } android { ... defaultConfig { ... testInstrumentationRunner = "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Библиотека Microbenchmark также предоставляет плагин Gradle для использования с вашим модулем microbenchmark. Этот плагин устанавливает настройки конфигурации сборки по умолчанию для модуля, настраивает копию выходных данных теста на хост и предоставляет задачу ./gradlew lockClocks
.
Чтобы использовать плагин, включите следующую строку в блок «plugins» файла build.gradle
верхнего уровня:
классный
plugins { id 'androidx.benchmark' version '1.3.2' apply false }
Котлин
plugins { id("androidx.benchmark") version "1.3.2" apply false }
Затем примените плагин к файлу build.gradle
вашего тестового модуля.
классный
plugins { id 'androidx.benchmark' }
Котлин
plugins { id("androidx.benchmark") }
Обратная связь
Ваши отзывы помогают сделать Jetpack лучше. Дайте нам знать, если вы обнаружите новые проблемы или у вас есть идеи по улучшению этой библиотеки. Пожалуйста, ознакомьтесь с существующими проблемами в этой библиотеке, прежде чем создавать новую. Вы можете добавить свой голос к существующей проблеме, нажав кнопку со звездочкой.
Дополнительную информацию см. в документации по системе отслеживания проблем .
Версия 1.3
Версия 1.3.0
21 августа 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.3.0
. Версия 1.3.0 содержит эти коммиты .
Изменения в микробенчмарке с версии 1.2.0
- Трассировка методов включена по умолчанию в микротестах при работе на большинстве устройств.
- Отслеживание метода выполняется как отдельный этап после измерений.
- Трассировка метода на некоторых платформах и версиях ART повлияет на последующие этапы измерения — в этих версиях трассировка метода отключена по умолчанию, и на выходе Studio выводится предупреждение.
- Тесты основных потоков и ошибки ANR
- Добавлена
measureRepeatedOnMainThread
для тестов потоков пользовательского интерфейса (например, тех, которые взаимодействуют с пользовательскими интерфейсами Compose/View), чтобы избежать ошибок ANR при работе в течение многих секунд. - Трассировки метода пропускаются, если ожидается превышение крайнего срока предотвращения ошибок ANR. Установите
androidx.benchmark.profiling.skipWhenDurationRisksAnr
значение false, чтобы отключить это поведение (не рекомендуется для запусков CI).
- Добавлена
- Минимизация
- Встроенные правила proguard для улучшения микробенчмаркинга с включенной минификацией.
- Минимизация/R8 в библиотечном модуле требует AGP 8.3 и может быть включена через
android.buildTypes.release.androidTest.enableMinification
в вашемbuild.gradle
- Добавлен экспериментальный API
BlackHole.consume()
для предотвращения устранения мертвого кода ( If6812 , b/286091643 ).
- Метрики
- Экспериментальная функция счетчика событий процессора (метрики из
perf_event_open
, для которой требуется root в большинстве версий платформы), доступ черезInstrumentationArgument
androidx.benchmark.cpuEventCounter.enable
(можно установить значениеtrue
), а также можно установитьandroidx.benchmark.cpuEventCounter.events
например (Instructions,CpuCycles
). Это должно поддерживаться в некоторых эмуляторах пользовательской отладки, но поддержка не тестировалась.
- Экспериментальная функция счетчика событий процессора (метрики из
Изменения в MACRObenchmark с версии 1.2.0
- Переработка метода трассировки макротестов.
- Теперь трассировки метода ограничены длительностью
measureBlock
и могут захватывать несколько сеансов, если процесс запускается несколько раз. - Раньше трассировка метода работала только для тестов
StartupMode.COLD
и ничего не фиксировала дляmeasureBlocks
, которые не перезапустили целевой процесс. - Исправлено удаление трассировок методов в макробенчмарке, поэтому трассировки методов должны быть полностью записаны и действительны даже на более медленных устройствах. ( I6349a , б/329904950 )
- Теперь трассировки метода ограничены длительностью
- Корректно выгружать профиль ART во время отдельных итераций
warmUp
, когда процесс завершается, чтобы измеренияCompilationMode.Partial(warmup=N)
были более точными. ( I17923 ) - Сообщение об ошибке трансляции Drop Shader
- Добавлены предложения по отладке для удаления сообщения об ошибке трансляции шейдера.
- Добавьте два аргумента инструментария для переопределения поведения отключения шейдера для обхода сбоев при тестировании приложений без
ProfileInstaller
1.3:-
androidx.benchmark.dropShaders.enable=true/false
: можно использовать для пропуска всех отбрасываний шейдеров (включая то, что происходит вStartupMode.Cold
запусках), особенно при тестировании приложений, которые еще не используют Profileinstaller 1.3. -
androidx.benchmark.dropShaders.throwOnFailure=true/false
: может использоваться для допуска сбоев при попытке удалить шейдеры, например, при тестировании приложений без Profileinstaller 1.3 ( I4f573 ).
-
- Добавлен экспериментальный вариант
MacrobenchmarkRule#measureRepeated
, который использует специальныйPerfettoConfig
для полностью настраиваемой записи трассировки Perfetto. Обратите внимание, что неправильно настроенные конфигурации могут привести к сбою встроенных классов метрик. ( Idfd3d , б/309841164 , б/304038384 ) - Отмените фоновые задания dexopt перед запуском Macrobenchmark, чтобы уменьшить помехи. ( I989ed )
- Macrobenchmark теперь ожидает 1 секунду, пока целевое приложение очистит профиль ART (ранее оно ждало 500 мс). ( И85а50 , б/316082056 )
- TraceSectionMetric капитальный ремонт
- Примечание . Изменения
TraceSectionMetric
приведенные ниже, могут повлиять на выходные данные при использовании CI и могут привести к разрывам или нарушению синтаксического анализа. - Сумма теперь используется по умолчанию, так как эта метрика чаще всего используется для повторяющихся событий, и в этих случаях сначала данные отбрасываются.
- Изменено, чтобы сделать его более настраиваемым, с большим количеством доступных режимов.
- Имена режимов теперь встроены в имя выходного показателя метрики (в Studio и JSON).
- Теперь поддерживает фрагменты, созданные с помощью
Trace.{begin|end}AsyncSection
.
- Примечание . Изменения
- Метрики
- Питание — добавлены
PowerMetric.deviceSupportsHighPrecisionTracking
,PowerMetric.deviceBatteryHasMinimumCharge()
иPowerMetric.deviceSupportsPowerEnergy()
-
Metric.getResult
переименован вgetMeasurements
в соответствии с типом возвращаемого значения. - Добавлены метки log.w/Exception для всех ошибок обнаружения запуска. Это не меняет текущего поведения (поэтому некоторые выдают ошибки, а другие молча не обнаруживают запуск), просто делает его более понятным. Обычно те, которые
Log.w()
не сообщают о показателях запуска, — это те, в которых отсутствуют события, не связанные с кадрами, исключения выдаются при обнаружении запуска, за исключением информации о синхронизации кадра (из срезов UI/RT). ( Id240f , б/329145809 ) - В
FrameTimingMetric
добавленоframeCount
чтобы помочь обнаружить сценарии, в которых измерения изменяются из-за изменения количества созданных кадров (добавлены новые анимации, исправлены проблемы с недействительностью). ( I1e5aa ) - Уточнено, что
frameOverrunMs
является предпочтительной метрикой для отслеживания, когда она доступна в документах, и почему. ( I18749 , б/329478323 ) - Устранена проблема, из-за которой незавершенные кадры в начале и конце трассировки могли быть объединены в пары, что ошибочно регистрировалось как один очень длинный кадр. ( I39353 , б/322232828 )
- Устраните ошибку
FrameTimingMetric
, когда кадры не создаются, и всегда выводите ссылку для отслеживания в случае сбоя анализа метрики, чтобы помочь в диагностике проблемы. ( I956b9 ) - Исправлен сбой в
FrameTimingMetric
из-за которого не удавалось проанализировать идентификатор кадра, особенно на некоторых OEM-устройствах. ( Ia24bc , б/303823815 , б/306235276 ) - Ослаблена строгость проверок в
FrameMetrics
и добавлена более подробная информация в сообщения об ошибках. ( Иадеде )
- Питание — добавлены
Захват базового профиля / изменения в плагине Gradle с версии 1.2.0
- Максимальная рекомендуемая версия AGP увеличена до 9.0.0-alpha01.
- Убедитесь, что задачи
mergeArtProfile
иmergeStartupProfile
всегда ожидают создания базового профиля. ( I623d6 , б/343086054 ) - При успешном создании базового профиля будет выведена сводка того, что изменилось ( I824c8 , b/269484510 ).
- Добавлен DSL для отключения предупреждений ( Ic4deb , b/331237001 ).
- Исправлено, чтобы гарантировать, что тесты используют сгенерированные базовые профили, когда
automaticGenerationDuringBuild
отключен ( Ic144f , b/333024280 ). - Исправьте переопределение свойств плагина Gradle
BaselineProfile
, чтобы включить генерацию базового профиля и тестирование при настройке типа сборкиnonMinified
или эталонного теста. ( Ib8f05 , b/324837887 ) - Исправлено включение базовых профилей библиотеки в AAR до AGP 8.3.0-alpha15. ( I1d2af , б/313992099 )
- Исправлен исходный URL-адрес базового и стартового профиля в конце задачи генерации. ( I802e5 , б/313976958 )
Другие существенные изменения с версии 1.2.0
- Захват трассировки
- Уменьшена ошибка EXITCODE 2 при запуске perfetto с ошибки на зарегистрированное предупреждение.
- Включить трассировку AIDL по умолчанию в тестах (требуется API 28) ( Ia0af2 , b/341852305 )
- Включите трассировку тегов портера по умолчанию в тестах. Это фиксирует, например, точки трассировки блокировки. ( Icfe44 , р/286551983 )
- Увеличено время ожидания начала захвата трассировки, чтобы избежать сбоев при запуске трассировки на более медленных устройствах ( I98841 , b/329145808 ).
- Добавлены общедоступные API-интерфейсы
PerfettoTraceProcessor.Session.queryMetrics
с вариантами JSON, textproto и proto двоичными (некодированными). Они позволяют запрашивать метрики, встроенные вTraceProcessor
( I54d7f , b/304038382 ). - Включите блокировку запуска записи трассировки Perfetto, чтобы снизить риск потери данных в начале трассировки. Поддерживается только в API 33+. ( Ie6e41 , b/310760059 )
- Вывод JSON
- Добавлена дополнительная информация в контексте теста в выводе JSON:
-
context.artMainlineVersion
— целочисленная версия основного модуля Art (если он присутствует на устройстве, в противном случае-1
) -
context.build.id
– равен android.os.Build.ID. -
context.build.version.codename
— равно android.os.Build.VERSION.CODENAME -
context.build.version.abbreviatedCodename
— соответствует первой букве кодового имени предварительной версии (в том числе в сборках выпуска) ( Ie5020 ).
-
- Добавлен список
profilerOutput
в выходные данные JSON для упрощения работы с трассировками профилирования (например, трассировки Perfetto, Method) ( I05ddd , b/332604449 ). - Добавлено предупреждение при использовании Android Test Orchestrator в модулях тестирования, так как это приведет к многократной перезаписи выходных файлов JSON для каждого модуля. ( Ia1af6 , б/286899049 )
- Выдавайте, когда имена файлов длиннее 200 символов, чтобы избежать неясных сбоев при записи или постобработке файлов. ( I4a5ab )
- Добавлена дополнительная информация в контексте теста в выводе JSON:
Версия 1.3.0-rc01
7 августа 2024 г.
Выпущен androidx.benchmark:benchmark-*:1.3.0-rc01
. Версия 1.3.0-rc01 содержит эти коммиты .
Исправления ошибок
- Исправлена ошибка, из-за которой
androidx.benchmark.cpuEventCounter
создавал поврежденные значения для событий, не связанных с инструкциями ( I7386a , b/286306579 ). - Исправьте
resumeTiming
/runWithTimingDisabled
чтобы соблюдать порядок приоритетов метрик и значительно уменьшить влияние приостановки/возобновления метрик с более низким приоритетом на результаты метрик с более высоким приоритетом. Например, если использовать счетчики производительности процессора через аргумент инструментарияcpuEventCounter.enable
, timeNs больше не будет значительно уменьшаться при возникновении паузы или возобновления. ( I39c2e , б / 286306579 , б / 307445225 ) - Уменьшена вероятность того, что выборка стека приведет к тому, что
measureRepeatedOnMainThread
достигнет жесткого тайм-аута основного потока, за счет перемещения преобразования выборки стека за пределы основного потока. ( I487a8 , б/342237318 ) - Убрано ручное определение доступа к API новой платформы, поскольку это происходит автоматически посредством моделирования API при использовании R8 с AGP 7.3 или новее (например, R8 версии 3.3) и для всех сборок при использовании AGP 8.1 или новее (например, D8 версии 8.1). Клиентам, не использующим AGP, рекомендуется выполнить обновление до D8 версии 8.1 или более поздней. Более подробную информацию можно найти в этой статье . ( I9496c , б / 345472586 )
- Добавлена проверка версии agp для отправки имени пакета в качестве instr arg. До версии AGP 8.4.0 имя пакета целевого приложения нельзя было отправить в приложение инструментирования через аргументы инструментария. ( 0c72a3f )
Версия 1.3.0-бета02
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 ). - Исправлены переопределения свойств плагина
BaselineProfile
gradle, чтобы включить генерацию базового профиля и тестирование при настройке типа сборки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 ) - Профилирование MicroBenchmark перемещалось в отдельную фазу, поэтому оно происходит в последовательности после измерения, вместо того, чтобы заменить его. Разделы трассировки
MethodTracing
и теперь также включены в захваченную трассу перфетто, если присутствуют. ( I9f657 , b/285014599 ) - Добавьте измерение счета в
TraceSectionMetric
сMode.Sum
. ( IC121A , B/264398606 )
Версия 1.2.0-Альфа15
7 июня 2023 г.
androidx.benchmark:benchmark-*:1.2.0-alpha15
выпускается. Версия 1.2.0-Alpha15 содержит эти коммиты.
Новые возможности
- Добавлена экспериментальная
MemoryUsageMetric
, чтобы отслеживать использование памяти целевого приложения. ( I56453 , b/133147125 , b/281749311 ) - Добавьте поддержку для полностью настраиваемых конфигураций перфетто с помощью
PerfettoTrace.record
( if9d75 , b/280460183 ) - Добавлено свойство, чтобы пропустить базовый профиль. Использование:
./gradlew assemble -Pandroidx.baselineprofile.skipgeneration
. ( I37FDA , B/283447020 )
Изменения API
- API
collectBaselineProfile
всегда генерирует стабильные базовые профили. APIcollectStableBaselineProfile
был удален, и вместо этого следует использоватьcollectBaselineProfile
. ( I17262 , B/281078707 ) - Изменено
BaselineProfileRule
filterPredicate
Arg на NON-NULL, с эквивалентным значением по умолчанию, так что поведение фильтра по умолчанию более ясное в DOCS. ( I3816e )
Исправления ошибок
- Отключить
IsolationActivity
и отслеживание перфетто вdryRunMode
, чтобы значительно повысить производительность, так как это было большинство времени выполнения. ( IE4F7D ) - Поддержка выборки стека вызовов в MacRobenchMarks с использованием аргументов испытаний на инструмент
androidx.benchmark.profiling.mode=StackSampling
иandroidx.benchmark.profiling.sampleFrequency
. ( I1d13b , b/282188489 ) - Исправляет сбой при сброске шейдеров на Android U (API 34), а также на эмуляторы. ( I031CA , B/274314544 )
Версия 1.2.0-Альфа14
3 мая 2023 г.
androidx.benchmark:benchmark-*:1.2.0-alpha14
выпускается. Версия 1.2.0-Alpha14 содержит эти коммиты.
Исправления ошибок
- Исправьте
FrameTimingMetric
игнорирующие рамки с непоследовательными идентификаторами кадра. Это приведет к тому, что некоторые анимации в недавних версиях платформы (API 31+) игнорируют многие кадры, в то время какRenderThread
анимировал (например, во время Ripple). ( I747d2 , b/279088460 ) - Фиксированный анализ процессора трассировки для следов более 64 МБ. ( IEF831 , B/269949822 )
- Фиксированная базовая генерация профиля на Android U сбой из-за различных выводов команды
pm dump-profiles
. ( ID1392 , B/277645214 ) - Исправить сценарий блокировки часов GPU для правильного сравнения строк ( i53e54 , b/213935715 )
Версия 1.2.0-Альфа13
5 апреля 2023 г.
androidx.benchmark:benchmark-*:1.2.0-alpha13
выпускается. Версия 1.2.0-Alpha13 содержит эти коммиты.
Изменения API
- Добавлен параметр типа профиля при генерации базовых профилей для поддержки предстоящей функции профиля запуска ( IE20D7 , B/275093123 )
- Добавлен новый экспериментальный
TraceMetric
API для определения полностью индивидуальных метрик на основе содержания перфетто. ( I4ce31 , b/219851406 ) - Добавьте экспериментальную метрику, чтобы определить количество разломов страниц во время эталона. ( I48db0 )
Версия 1.2.0-Альфа12
22 марта 2023 г.
androidx.benchmark:benchmark-*:1.2.0-alpha12
выпускается. Версия 1.2.0-Alpha12 содержит эти коммиты.
Новые возможности
- Новый плагин Gradle Baseline Profile выпущен в версии Alpha, что облегчает генерацию базового профиля и упрощает рабочий процесс разработчика.
Изменения API
- Удаленная поддержка трассировки перфетто на API 21 и 22, которая включает в себя как микробенчки, так и экспериментальные API
PerfettoTrace
. До этой версии соединенияUiAutomation
были ненадежными на некоторых устройствах. ( I78e8c ) - Добавлен общедоступный экспериментальный API для
PerfettoTraceProcessor
, чтобы обеспечить содержание трассировки. Это шаг к полностью пользовательским показателям на основе данных трассировки перфетто. ( I2659e , b/219851406 )
Версия 1.2.0-Альфа11
8 марта 2023 г.
androidx.benchmark:benchmark-*:1.2.0-alpha11
выпускается. Версия 1.2.0-альфа11 содержит эти коммиты.
Исправления ошибок
- Фиксированные сбои в
MacrobenchmarkRule
иBaselineProfileRule
при переустановке или извлечении профилей из пакета приложений с несколькими APK. ( I0d8c8 , b/270587281 )
Версия 1.2.0-Альфа10
22 февраля 2023 г.
androidx.benchmark:benchmark-*:1.2.0-alpha10
выпускается. Версия 1.2.0-Alpha10 содержит эти коммиты.
Новые возможности
- На Android 14+ Macrobenchmark больше не переустанавливает целевые приложения для сброса состояния компиляции благодаря новой функции платформы. Ранее необходимо было иметь корневое устройство или иметь дело со всем состоянием приложения (например, вход пользователя), который удаляется перед каждым бланком. ( I9b08c , b/249143766 )
Исправления ошибок
- Исправьте
DryRunMode
чтобы больше не сбой с пустым профилем, из -за пропуска компиляции. Вместо этого он запускает одну итерацию и извлекает профиль, чтобы гарантировать, что что -то запечатлело. ( I2f05d , b/266403227 ) - Исправьте
PowerMetric
Crash при проверке присутствия PowerStats на старых уровнях API. ( 5FAAF9 , B/268253898 )
Версия 1.2.0-Alpha09
11 января 2023 г.
androidx.benchmark:benchmark-*:1.2.0-alpha09
выпускается. Версия 1.2.0-Alpha09 содержит эти коммиты.
Исправления ошибок
- Включено передавать
None
вandroidx.benchmark.enabledRules
Инструментация Arg, чтобы отключить все тесты / генерацию базового профиля. ( I3d7fd , b/258671856 ) - Исправить захват
PerfettoTrace
в модулях приложений (т.е. не взыскание испытательных APK) ( i12CFC ) - Фиксированный базовый профиль ADB Порядок вытягивания аргумента на выходе студии ( I958D1 , B/261781624 )
- Emulator Api 33 теперь правильно распознается как таковой при попытке запустить макробенч -маркирство и правильно распечатать предупреждение. ( 69133b , b/262209591 )
- Проверка проверки уровня батареи на устройствах без батареи в Macrobenchmark ( FE4114 , B/232448937 )
Версия 1.2.0-Alpha08
7 декабря 2022 г.
androidx.benchmark:benchmark-*:1.2.0-alpha08
выпускается. Версия 1.2.0-Alpha08 содержит эти коммиты.
Изменения API
- Добавлено экспериментальное новое APIS
PerfettoTrace.record {}
иPerfettoTraceRule
для захвата трассов перфетто (также известных как системные следы) как часть теста, чтобы осмотреть поведение и производительность тестирования. ( I3ba16 ) -
BaselineProfileRule
теперь принимает предикат фильтра вместо списка префиксов пакетов. Это дает тест полный контроль на фильтрации. ( I93240 ) - Добавьте экспериментальный API
BaselineProfileRule.collectStableBaselineProfile
, который ожидает, пока базовый профиль не станет стабильным для n итераций. ( I923f3 ) - Добавьте возможность указать префикс имени выходного файла при генерации базовых профилей с использованием
BaselineProfileRule
. ( I7b59f , b/260318655 )
Исправления ошибок
- Повышение безопасности вывода файлов, что должно предотвратить тихие не писать / добавленные выходные файлы, особенно на API 21/22. ( If8c44 , b/227510293 )
- Исправьте
simpleperf
Trace Toplow, чтобы правильно создать и поместить файл. Это также должно более широко исправлять проблемы, когда Файл безуспешно вытягивается Gradle. ( I12A1C , B/259424099 ) - Улучшить сообщение об ошибке ProfileInstaller, напечатанное, когда ProfileInstaller слишком старый. Теперь это говорит вам обновить версию ProfileInstaller (1.2.1) для измерения базовых профилей на API с 31 по 33, вместо того, чтобы сказать, что она не поддерживается. ( IA517F , B/253519888 )
- Исправьте несколько сбоев команды оболочки Onerror Print Print Nead API <= 23, включая неудачную бинарную настройку перфетто и сбои захвата трассировки ( IB6B87 , B/258863685 )
- Автоматически сортируют сгенерированные правила профиля, чтобы минимизировать количество изменений при изменении с течением времени (при регистрации правил профиля в управление источником). ( IE2509 )
- Исправлено сбой на непредубежденных сборках ниже Android 13 (API 33) с сообщением
Expected no stderr from echo 3 > /proc/sys/vm/drop_caches
( i6c245 , b/259508183 )
Известные проблемы - MacrobenchmarkScope.dropShaderCache()
может сбои из -за отсутствующего реестра вещания в Manifest ProfileInstaller, который еще не был выпущен. ( I5c728 , b/258619948 ) для обходного profileinstaller:1.3.0-alpha02
<!-- workaround bug in profileinstaller 1.3.0-alpha02, remove when updating to alpha03+ -->
<receiver
android:name="androidx.profileinstaller.ProfileInstallReceiver"
android:permission="android.permission.DUMP"
android:exported="true">
<intent-filter>
<action android:name="androidx.profileinstaller.action.BENCHMARK_OPERATION" />
</intent-filter>
</receiver>
Версия 1.2.0-Alpha07
9 ноября 2022 г.
androidx.benchmark:benchmark-*:1.2.0-alpha07
выпускается. Версия 1.2.0-Alpha07 содержит эти коммиты.
Изменения API
- Добавляет
PowerMetric
API для измерения энергии и мощности в макробенчах. ( IFE601 , B/220183779 ) - Исправлено
MacrobenchmarkScope.dropShaderCache()
чтобы фактически отбросить шейдерный кэш. Это удаляет примерно 20 мс шума изStartupMode.COLD
Clardmars, поскольку шейды теперь последовательно очищают каждую итерацию. РаньшеPartial
компиляция с использованием итераций разминки сообщала о неправильно быстрых числах, так как кэширование шейдера с большей вероятностью произошло во время разминки. Это исправление требует либо корневого устройства, либо для использованияprofileinstaller:1.3.0-alpha02
в целевом приложении. Для изменений API библиотекиProfileInstaller
, пожалуйста, обратитесь к странице ProfileInstaller 1.30-ALPHA02 . ( IA5171 , B/231455742 ) - Добавлен
TraceSectionMode("label", Mode.Sum)
, что позволяет измерять общее время, проведенное на нескольких сечениях трассировки с той же меткой. Например,TraceSectionMetric("inflate", Mode.Sum)
сообщит о метрическихinflateMs
для общего времени в макробенчмарке, потраченном на инфляцию. Также удалено требование API 29, так какTraceSectionMetric
работает вместе сandroidx.tracing.Trace
обратно к более низким уровням API с использованиемforceEnableAppTracing
в целевом приложении. ( ID7B68 , B/231455742 )
Исправления ошибок
- Улучшенная безопасность всех внутренних команд оболочки путем проверки всех выходных/ошибок. ( I5984d , b/255402908 , b/253094958 )
- Укажите устройство в базовом профиле
adb pull
-команде, чтобы команда тяги можно было просто скопировать, если подключены несколько устройств (до одного эмулятора) ( i6ac6c , b/223359380 ) - Добавьте ошибку, если MacRobenchmark Test APK не настроен как самостоятельно. Эта ошибка предотвращает Macrobenchmarking из процесса целевого приложения. В процессе Macrobench не сможет скомпилировать/убить/запустить приложение или контролировать свои собственные разрешения ( i4279b )
- Исправлена проблема в
measureRepeated()
, гдеStartupMode.COLD
не убивает целевой процесс послеsetupBlock
. ТеперьsetupBlock
взаимодействующий с приложением, не оставит процесс приложения, и неверное измерение холодного старта. ( I8ebb7 )
Версия 1.2.0-Alpha06
24 октября 2022 г.
androidx.benchmark:benchmark-*:1.2.0-alpha06
выпускается. Версия 1.2.0-Alpha06 содержит эти коммиты.
Изменения API
-
BaselineProfileRule
больше не требует корня на Android 13 (API 33) и больше не эксперименталь. ( IE0A7D , B/250083467 , B/253094958 )- Это изменение также фиксирует, как профили из приложения промываются на диск на непрестанных устройствах, но требуют обновления зависимости профиля целевого приложения.
- Чтобы использовать
BaselineProfileRule
илиCompilationMode.Partial(warmupIterations)
на неровном устройстве, вы также должны обновить ваше целевое приложение для использованияandroidx.profileinstaller.profileinstaller:1.3.0-alpha01
. Это позволяет правильно промывать профиль на диск, чтобы его можно было собрать/извлечь.
Исправления ошибок
- Исправляет сбой
SampledProfiling
на API 33+. ( I40743 , b/236109374 )
Версия 1.2.0-Alpha05
5 октября 2022 г.
androidx.benchmark:benchmark-*:1.2.0-alpha05
выпускается. Версия 1.2.0-Alpha05 содержит эти коммиты.
Исправления ошибок
- Fix Frame Breakdown в Studio System Trace Viewer для просмотра тестов .
- Правильный
FrameTimingMetric
для перечисленияFrameOverrun
как требует API 31 вместо 29 ( i716dd , b/2207025554 ) - Установите итерацию в
BaselineProfileRule
и четко выбросьте, если целевой пакет не установлен (уже был сделан для Macrobenchmarkrule). ( IC09A3 , B/227991471 )
Версия 1.2.0-Alpha04
21 сентября 2022 г.
androidx.benchmark:benchmark-*:1.2.0-alpha04
выпускается. Версия 1.2.0-Alpha04 содержит эти коммиты.
Новые возможности
Добавьте поддержку
dryRunMode.enable
Amentleation Arcome в Macrobenchmark (уже доступный в Micro) для более быстрой локальной разработки, и проверка автоматизации приложений (например, в Presubmit). Это переопределяет итерации до 1, пропускает компиляцию, подавляет все ошибки конфигурации и отключает выход измерения .JSON. ( IB51B4 , B/175149857 )На командной строке Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.dryRunMode.enable=true
В build.gradle:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.dryRunMode.enable', 'true' } }
Исправления ошибок
- Фиксированные
StartupTimingMetric
чтобы больше не требует измеренных действий, которые должны быть запущены черезMacrobenchmarkScope.startActivityAndWait()
. Это означает, что метрика может забрать запуска из EG-уведомлений,Context.startActivity()
, навигации на основе активности в приложении или команд Shell. ( Ia2de6 , b/245414235 ) - Исправить ошибку, где
startActivityAndWait
и Timeout, пытаясь дождаться завершения запуска на эмуляторах, снижая строгость обнаружения кадров. ( IBE2C6 , B/244594339 , B/228946895 )
Версия 1.2.0-Alpha03
7 сентября 2022 г.
androidx.benchmark:benchmark-*:1.2.0-alpha03
выпускается. Версия 1.2.0-Alpha03 содержит эти коммиты.
Новые возможности
- Добавлены экспериментальные API для использования
BenchmarkState
независимо, отдельно отBenchmarkRule
/JUnit4
. ( ID478F , B/228489614 )
Исправления ошибок
- Добавлен запасной запасной путь для
startActivityAndWait
. ( 01ed77 , b/2428999915 )
Версия 1.2.0-Alpha02
24 августа 2022 г.
androidx.benchmark:benchmark-*:1.2.0-alpha02
выпускается. Версия 1.2.0-Alpha02 содержит эти коммиты.
Изменения API
- По умолчанию
am force stop
дляMacrobenchmarkScope.killProcess()
, даже при укоренении, за исключением базового генерации профиля. Это может быть переопределено дополнительным логическим аргументом. ( 02cce9 , b/241214097 )
Исправления ошибок
- Поддержка базового профиля для системных приложений. ( I900b8 , b/241214097 )
- Поддержка проверки на метрики мощности ODPM на унылых устройствах. ( A38C78 , B/229623230 )
Версия 1.2.0-Alpha01
27 июля 2022 г.
androidx.benchmark:benchmark-*:1.2.0-alpha01
выпускается. Версия 1.2.0-Alpha01 содержит эти коммиты.
Новые возможности
- Новый компонент трассировки-перфетто-компонента, позволяющий инструментальности, чтобы обеспечить перфетто SDK-трассировку в приложении, которое его обнаруживает ( i2cc7f )
Добавлен
androidx.benchmark.enabledRules
Аргумент Инструментации, чтобы включить фильтрацию MacRobenchmark, чтобы пробежать только на контрольные показатели, или просто базовое образование профиля. Перейдите в «Macrobenchmark», или «BaselineProfile», чтобы просто запустить один тип теста, например, когда просто генерируяBaselineProfiles
на эмуляторе. Список, разделенный запятыми, также поддерживается. ( I756b7 , b/230371561 )Например, в Build.gradle вашего Macrobenchmark:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile' } }
Или из командной строки Gradle:
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
Изменения API
- Добавлен новый
PowerMetric
для измерения задач энергии и мощности в критериях. ( I9f39b , b/220183779 ) - Добавлен новый компиляционный режим
CompilationMode.Ignore
. ( IBBCF8 , B/230453509 ) - Добавлен новый параметр в
BaselineProfileRule#collectBaselineProfile
чтобы фильтровать выходной файл по именам пакетов ( IF7338 , B/220146561 ) - Позволяет разработчику разгрузку устройства для измерения источника питания. ( I6a6cb )
- Добавлена возможность очистить кеш шейдеров в
MacrobenchmarkScope
. ( I32122 ) - Позволяет разработчику настроить отображение типа метрического типа и деталей, желаемых категориями подсистемы. ( I810c9 )
- Ранее
UnsupportedOperationException
была брошена в эталон, если вы работаете на неподдерживаемом устройстве. Теперь 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-бета04
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-бета02
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-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
был отменен до выпуска из-за спорального сбоя. б/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-Alpha03
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-Alpha02
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-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
- Метрика распределения - тесты теперь проводят дополнительную фазу после разминки и времени, захватывая количество распределения. Распределение может вызвать проблемы с производительностью на более старых версиях платформы (140NS в O стало 8NS в M - измерено на Nexus5x, с заблокированными часами). Эта метрика отображается в выходе консоли Android Studio, а также в
- Поддержка профилирования - теперь вы можете собирать данные профилирования для контрольного запуска, чтобы проверить, почему ваш код может работать медленно. Bendchmark поддерживает захват либо отслеживания метода, либо выборки метода из искусства. Эти файлы могут быть проверены с помощью Profiler внутри Android Studio с использованием файла> Open .
- Плагин Benchmark Gradle теперь предоставляет по умолчанию для более простой настройки:
-
testBuildType
настроен на выпуск по умолчанию, чтобы избежать использования зависимостей со встроенным покрытием кода. The release buildType is also configured as the default buildType, which allows Android Studio to automatically select the correct build variant when opening a project for the first time. ( b/138808399 ) -
signingConfig.debug
is used as the default signing config ( b/153583269 )
-
** Bug Fixes **
- Significantly reduced the warmup transition overhead, where the first measurement for each benchmark was artificially higher than others. This issue was more pronounced in very small benchmarks (1 microsecond or less). ( b/142058671 )
- Fixed
InstrumentationResultParser
error printed for each benchmark when running from command line. ( I64988 , b/154248456 )
Известные проблемы
- Command line, gradle invocations of Benchmark do not print out results directly. You can work around this by either running through Studio, or parsing the JSON output file for results.
- Benchmark reporting fails to pull the report from devices that have an app installed with an applicationId ending with either “android” or “download” (case insensitive). Users hitting this issue should upgrade the Android Gradle Plugin to 4.2-alpha01 or later.
Версия 1.0.0
Benchmark Version 1.0.0
20 ноября 2019 г.
androidx.benchmark:benchmark-common:1.0.0
, androidx.benchmark:benchmark-gradle-plugin:1.0.0
, and androidx.benchmark:benchmark-junit4:1.0.0
are released with no changes from 1.0.0-rc01. Version 1.0.0 contains these commits .
Major features of 1.0.0
The Benchmark library allows you to write performance benchmarks of app code and get results quickly.
It prevents build and runtime configuration issues and stabilizes device performance to ensure that measurements are accurate and consistent. Run the benchmarks directly in Android Studio , or in Continuous Integration to observe code performance over time, and to prevent regressions.
Major features include:
- Clock stabilization
- Automatic thread prioritization
- Support for UI performance testing, such as in the RecyclerView Sample
- JIT-aware warmup and looping
- JSON benchmark output for post-processing
Version 1.0.0-rc01
23 октября 2019 г.
androidx.benchmark:benchmark-common:1.0.0-rc01
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-rc01
, and androidx.benchmark:benchmark-junit4:1.0.0-rc01
are released. Version 1.0.0-rc01 contains these commits .
Новые возможности
- Added systrace tracing to benchmarks
Исправления ошибок
- Fixed metric instability issue where JIT wouldn't finish before warm up due to deprioritization ( b/140773023 )
- Unified JSON output directory across Android Gradle Plugin 3.5 and 3.6
Version 1.0.0-beta01
9 октября 2019 г.
androidx.benchmark:benchmark-common:1.0.0-beta01
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-beta01
, and androidx.benchmark:benchmark-junit4:1.0.0-beta01
are released. Version 1.0.0-beta01 contains these commits .
Новые возможности
- Run garbage collection before each warmup to reduce memory pressure from one benchmark to leak to the next ( b/140895105 )
Исправления ошибок
- Added
androidx.annotation:android-experimental-lint
dependency, so that Java code will correctly produce lint errors when experimental API is not used, similar to what is provided by the Kotlin experimental annotation for Kotlin callers. - Now correctly detects usage of
additionalTestOutputDir
instrumentation argument for output in Android Gradle Plugin 3.6, to know when AGP will handle data copy. - Fix undetected clock frequency in JSON to correctly print
-1
( b/141945670 ).
Версия 1.0.0-альфа06
18 сентября 2019 г.
androidx.benchmark:benchmark-common:1.0.0-alpha06
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha06
, and androidx.benchmark:benchmark-junit4:1.0.0-alpha06
are released. Version 1.0.0-alpha06 contains these commits .
Новые возможности
- Added a check for incorrectly using the old package for the test runner, which now provides a more-helpful error message
Изменения API
- The experimental annotation
ExperimentalAnnotationReport
is now correctly public. Usage of the experimental BenchmarkState#report API now requires this annotation
Версия 1.0.0-альфа05
5 сентября 2019 г.
androidx.benchmark:benchmark-common:1.0.0-alpha05
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05
, and androidx.benchmark:benchmark-junit4:1.0.0-alpha05
are released. Коммиты, включенные в эту версию, можно найти здесь .
Изменения API
-
BenchmarkState.reportData
API is now marked experimental
Исправления ошибок
- Fix for the clock-locking script, which would fail on devices that were either missing the
cut
orexpr
shell utilities. - Fixed an issue with
./gradlew lockClocks
task that would hang on devices that were rooted with an older version of the su utility, which did not support the-c
flag.
Версия 1.0.0-альфа04
7 августа 2019 г.
androidx.benchmark:benchmark-common:1.0.0-alpha04
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04
, and androidx.benchmark:benchmark-junit4:1.0.0-alpha04
are released. Коммиты, включенные в эту версию, можно найти здесь .
New documentation has also been added for how to use the Benchmark library without Gradle, both for usage with different build systems (such as Bazel or Buck), and when running in CI. For more information, see Build benchmarks without Gradle and Run benchmarks in Continuous Integration .
Новые возможности
- Gradle plugin
- Now automatically disables test coverage, and sets the
AndroidBenchmarkRunner
by default ( b/138374050 ) - Added support for new AGP-based data copy, when running benchmarks and when using AGP 3.6+
- Now automatically disables test coverage, and sets the
- JSON format additions
- Output total benchmark test run time ( b/133147694 )
-
@Parameterized
benchmarks that use a name string (for example@Parameters(name = "size={0},depth={1}")
) now output parameter names and values per benchmark in the JSON output ( b/132578772 )
- Dry Run mode ( b/138785848 )
- Added a "dry run" mode for running each benchmark loop only once, to check for errors/crashes without capturing measurements. This can be useful eg for, for example, quickly running benchmarks in presubmit to check that they're not broken.
Изменения API
- Module structure has changed, splitting the library ( b/138451391 )
-
benchmark:benchmark-junit4
contains classes with JUnit dependency:AndroidBenchmarkRunner
, andBenchmarkRule
, both of which have moved into theandroidx.benchmark.junit4
package -
benchmark:benchmark-common
contains the rest of the logic, including the BenchmarkState API - This split will allow the library to support benchmarking without JUnit4 APIs in the future
-
- Configuration warnings are now treated as errors, and will crash the test ( b/137653596 )
- This is done to further encourage accurate measurements, especially in CI
- These errors can be reduced back to warnings with an instrumentation argument. For example:
-e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"
Исправления ошибок
- Errors when writing to external storage on Q devices provide more-descriptive messages, with suggestions of how to resolve the issue
- Screens are automatically turned on during benchmark runs, instead of failing when the screen is off
External contributions
- Thanks to Sergey Zakharov for contributing JSON output improvements and the fix for screen off issues!
Версия 1.0.0-альфа03
2 июля 2019 г.
androidx.benchmark:benchmark:1.0.0-alpha03
and androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha03
are released. Коммиты, включенные в эту версию, можно найти здесь .
Новые возможности
- Expose sleep duration due to thermal throttling per benchmark in the full JSON report
Исправления ошибок
- The Gradle plugin should no longer be required to be applied after Android plugins and the Android block
- Adds support for benchmark reports on Android 10 devices using scoped storage
Версия 1.0.0-альфа02
6 июня 2019 г.
androidx.benchmark:1.0.0-alpha02
and androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02
are released. Коммиты, включенные в эту версию, можно найти здесь .
Note that we are treating the JSON schema as an API. We plan to follow the same stability constraints as other APIs: stable (with very rare exceptions) once in beta, and fixed in final release, with only additions in minor releases and changes/removals in major releases.
Изменения API
Overhauled JSON schema. Further changes to the JSON schema are likely to be limited to additions:
- Reorganized the result object structure to support additional metric groups in the future ( b/132713021 )
- Added test run context information, such as device and build info and whether clocks are locked, to the top-level object ( b/132711920 )
- Time metric names now have 'ns' in their name ( b/132714527 )
- Additional stats added per reported metric (maximum, median, minimum), and removed simplified 'nanos' summary stat ( b/132713851 )
Removed XML output ( b/132714414 )
Thermal throttle detection removed from
BenchmarkState.reportData
API ( b/132887006 )
Исправления ошибок
- Fixed
./gradlew lockClocks
not sticking on some recent OS devices ( b/133424037 ) - Throttling detection disabled for emulator ( b/132880807 )
Версия 1.0.0-альфа01
7 мая 2019 г.
androidx.benchmark:benchmark:1.0.0-alpha01
is released. The commits included in this version are available here .