Контрольный показатель

Точно измеряйте производительность вашего кода в Android Studio.
Последнее обновление Стабильный выпуск Релиз-кандидат Бета-версия Альфа-релиз
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 теперь стабильная версия, оптимизированная и упрощенная версия предыдущего экспериментального API BaselineProfileRule.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 или более поздней версии в целевом приложении, чтобы включить захват/сброс профиля и очистку кэша шейдеров.
  • Новые экспериментальные API метрик

    • Добавлен экспериментальный TraceSectionMetric , который позволяет извлекать простое время из блоков trace("") {} в вашем приложении, или TraceMetric для использования всех возможностей запросов Perfetto TraceProcessor .
    • Добавлен экспериментальный 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-интерфейсов тестирования.
  • Исправления
    • Обходной путь: отсутствие ведущих пробелов в результатах тестирования 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 всегда создает стабильные базовые профили. API collectStableBaselineProfile был удален, и вместо него следует использовать 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

Версия 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 содержит эти коммиты.

Новые возможности

Исправление ошибок

  • Образец 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 выпускается. Коммуты, включенные в эту версию, доступны здесь .