Сравнение

Точно измеряйте производительность кода в Android Studio.
Последнее обновление Основная версия Релиз-кандидат Бета-версия Альфа-версия
7 октября 2026 г. 1.5.0 - - 1.6.0-alpha01

Как объявлять зависимости

Чтобы добавить зависимость от Benchmark, добавьте в проект репозиторий Google Maven. Подробную информацию можно найти в статье Репозиторий Google Maven.

Макротест

Чтобы использовать Macrobenchmark в проекте, добавьте в файл build.gradle для модуля macrobenchmark следующие зависимости:

классный

dependencies {
  androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.5.0"
}

Котлин

dependencies {
  androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.5.0")
}

Микротест

Чтобы использовать Microbenchmark в проекте, добавьте в файл build.gradle для модуля microbenchmark следующие зависимости:

классный

dependencies {
    androidTestImplementation "androidx.benchmark:benchmark-junit4:1.5.0"
}

android {
    ...
    defaultConfig {
        ...
        testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner"
    }
}

Котлин

dependencies {
    androidTestImplementation("androidx.benchmark:benchmark-junit4:1.5.0")
}

android {
    ...
    defaultConfig {
        ...
        testInstrumentationRunner = "androidx.benchmark.junit4.AndroidBenchmarkRunner"
    }
}

Библиотека Microbenchmark также предоставляет плагин Gradle для использования с вашим модулем microbenchmark. Этот плагин устанавливает настройки конфигурации сборки по умолчанию для модуля, настраивает копию выходных данных теста на хост и предоставляет задачу ./gradlew lockClocks .

Чтобы использовать плагин, включите следующую строку в блок `plugins` вашего файла build.gradle верхнего уровня:

классный

plugins {
  id 'androidx.benchmark' version '1.5.0' apply false
}

Котлин

plugins {
  id("androidx.benchmark") version "1.5.0" apply false
}

Затем примените плагин к файлу build.gradle вашего тестового модуля.

классный

plugins {
  id 'androidx.benchmark'
}

Котлин

plugins {
    id("androidx.benchmark")
}

Отзыв

Ваши отзывы помогают нам улучшать Jetpack. Если вы обнаружите новые проблемы или у вас появятся идеи по улучшению этой библиотеки, сообщите нам. Прежде чем сообщать о новых ошибках, изучите уже добавленные. Чтобы проголосовать за существующую проблему, нажмите на значок звездочки.

Как создать новую проблему

Дополнительную информацию можно найти в документации по системе отслеживания ошибок.

Версия 1.6

Версия 1.6.0-alpha01

7 октября 2026 г.

Выход androidx.benchmark:benchmark-*:1.6.0-alpha01. Версия 1.6.0-alpha01 содержит эти коммиты.

Новые функции

  • Задача :lockClocks теперь использует режим "Производительность", если он доступен. Ранее использовалась реализация только с root-доступом. Это означает, что вы можете заблокировать тактовую частоту на гораздо большем количестве физических устройств для получения стабильных результатов, особенно полезных для стабильных микротестов. Если вы столкнетесь с проблемами, связанными с троттлингом, сообщите нам об этом. (I0d032)

Изменения в API

  • Добавлено свойство MemoryProfilingConfig в ExperimentalConfig, чтобы разрешить макротестам использовать профилирование кучи Perfetto. (Ibc931)

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

  • Исправлена ошибка в микротесте, из-за которой иногда пропускалась запись трассировки метода, чтобы избежать ошибок ANR. (Ifc307)
  • Исправлена проблема с захватом базового профиля для процессов, в которых не используется шаблон именования :<suffix>. (I512ab)
  • Ссылки на трассировку профилировщика теперь указываются в отдельном разделе "Трассировка профилирования" в сводках IDE. (Id639f)
  • Исправлена ошибка при очистке виртуальных файлов, из-за которой возникала ошибка Unable to flush profiles for <packagename>. (I48ccc)
  • Исправлена синхронизация в трассировках методов, встроенных в трассировку системы. Ifd2e33 b/537688349
  • Плагин Baseline Profile Gradle. Улучшена функция CollectBaselineProfileTask, чтобы она могла находить файлы test-result.pb в подкаталогах. Это обеспечивает совместимость с новой встроенной тестовой платформой. Id9c488 b/543799367

Версия 1.5

Версия 1.5.0

9 сентября 2026 г.

Выход сингла "androidx.benchmark:benchmark-*:1.5.0". Версия 1.5.0 содержит эти коммиты.

Версия 1.5.0-rc02

26 августа 2026 г.

Выход androidx.benchmark:benchmark-*:1.5.0-rc02. Версия 1.5.0-rc02 содержит эти коммиты.

Версия 1.5.0-rc01

12 августа 2026 г.

Выход сингла "androidx.benchmark:benchmark-*:1.5.0-rc01". Версия 1.5.0-rc01 содержит эти коммиты.

Версия 1.5.0-beta01

29 июля 2026 г.

Выход сингла "androidx.benchmark:benchmark-*:1.5.0-beta01". Версия 1.5.0-beta01 содержит эти коммиты.

Изменения в API

  • PerfettoCapture и PerfettoTraceRule теперь могут захватывать трассировки в процессе и объединять их для целевого пакета. (I9a00b, b/497959820)

Версия 1.5.0-alpha07

1 июля 2026 г.

Выход сингла "androidx.benchmark:benchmark-*:1.5.0-alpha07". Версия 1.5.0-alpha07 содержит эти коммиты.

Изменения в API

  • Упрощенный сбор данных трассировки Perfetto на устройстве. (I48810)
  • Переместите экспериментальные API расширений TraceProcessor.runServer из androidx.benchmark:benchmark-macro в androidx.benchmark:benchmark-common и в пакет androidx.benchmark. Это позволит использовать их в микротестах в будущем. (Ie25bb, b/393640753)

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

  • Обновите реализацию traceprocessor (а также несвязанный захват трассировки Perfetto) до версии Perfetto 56.0 (I8fb9d).
  • По умолчанию для параметров androidx.benchmark.requireAot и androidx.benchmark.requireAot задано значение true. Эти более безопасные настройки по умолчанию гарантируют, что компиляция выполняется до запуска микротестов (включено по умолчанию с плагином Gradle для тестирования при использовании AGP 8.4+), а measureRepeated не используется в основном потоке, где это может вызвать ошибки ANR. (I1bc3c, b/379115078)
  • Время ожидания принудительного завершения Perfetto увеличено с 5 до 30 секунд (только для сеансов Perfetto, записанных в ходе тестирования производительности). Добавлена более понятная регистрация ошибок, возникающих при возникновении проблемы. (If188f, b/435589290)

Версия 1.5.0-alpha06

6 мая 2026 г.

Выход сингла "androidx.benchmark:benchmark-*:1.5.0-alpha06". Версия 1.5.0-alpha06 содержит эти коммиты.

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

  • Корректно обрабатывать многопользовательские среды при перемещении файлов из выходного каталога теста производительности в дополнительный выходной каталог теста. (I90da5, b/489358149)

Версия 1.5.0-alpha05

25 марта 2026 г.

Выход сингла "androidx.benchmark:benchmark-*:1.5.0-alpha05". Версия 1.5.0-alpha05 содержит эти коммиты.

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

  • Обновлен ArtMetric для учета пакетов верхнего уровня, что особенно важно при использовании AGP/R8 9.1+ или глобального параметра -repackageclasses. Ранее ArtMetric не мог обнаружить эти загрузки классов в своих измерениях artClassLoad.... (If8a35, b/487402058)

Новые функции - Добавлен новый аргумент инструментария androidx.benchmark.requireLockedClocks, который позволяет включить проверку того, заблокированы ли тактовые частоты ЦП для устройств с настроенным root-доступом. (Id82e8, b/468039042)

Версия 1.5.0-alpha04

11 марта 2026 г.

Выход сингла "androidx.benchmark:benchmark-*:1.5.0-alpha04". Версия 1.5.0-alpha04 содержит эти коммиты.

Изменения в API

  • Добавлены объекты JvmOverloads в PowerMetric.Energy и PowerMetric.Power (Iac0d0, b/481371562).

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

  • Обновлен ArtMetric для учета пакетов верхнего уровня, что особенно важно при использовании AGP/R8 9.1+ или глобального параметра -repackageclasses. Ранее ArtMetric не мог обнаружить эти загрузки классов в своих измерениях artClassLoad.... (I207ca, b/487402058)

Версия 1.5.0-alpha03

11 февраля 2026 г.

Выход сингла "androidx.benchmark:benchmark-*:1.5.0-alpha03". Версия 1.5.0-alpha03 содержит эти коммиты.

  • Добавлена зависимость от UiAutomator 2.4 beta.

Версия 1.5.0-alpha02

28 января 2026 г.

Выход androidx.benchmark:benchmark-*:1.5.0-alpha02. Версия 1.5.0-alpha02 содержит эти коммиты.

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

  • Добавлена частичная поддержка создания профилей базовой конфигурации для мультиплатформенных модулей Kotlin. Обычно зависимости от профилей можно определить с помощью конфигурации Gradle baselineProfile в блоке зависимостей, но в настоящее время это не работает для модулей KMP.

    kotlin {
      androidLibrary {
        namespace = "com.example.namespace"
        compileSdk = 36
      }
      sourceSets {
        androidMain.dependencies {
          // THIS DOES NOT WORK
          // baselineProfile(":yourProducerProject")
        }
      }
    }
    
  • Вместо этого зависимости нужно определять с помощью расширения baselineProfile. (Ie19c4)

    plugins {
        id("org.jetbrains.kotlin.multiplatform")
        id("com.android.kotlin.multiplatform.library")
        id("androidx.baselineprofile.consumer")
    }
    
    kotlin {
      androidLibrary {
        namespace = "com.example.namespace"
        compileSdk = 36
      }
      sourceSets {
        androidMain.dependencies {
          // ...
        }
      }
    }
    // Define dependencies
    // This works !
    baselineProfile {
      variants {
        androidMain {
          from(project(":yourProducerProject"))
        }
      }
    }
    

Версия 1.5.0-alpha01

17 декабря 2025 г.

Выход сингла "androidx.benchmark:benchmark-*:1.5.0-alpha01". Версия 1.5.0-alpha01 содержит эти коммиты.

  • В Macrobenchmark 1.5 используется UiAutomator 2.4, что упрощает взаимодействие с измеряемым приложением. Объект MacrobenchmarkScope теперь расширяет UiAutomatorTestScope, что позволяет использовать современные API UiAutomator, например onElement { ... }.click().
  • Подробнее о UiAutomator 2.4 рассказывается в документации.

Новые функции

  • Плагин Gradle для профиля базовой конфигурации больше не требует newDsl=false в AGP 9.0 (Iaaac7, b/443311090)
  • Расширьте конфигурацию трассировки, чтобы включить размер ядра (например, маленький/большой) в системные/perfetto трассировки, зафиксированные в тесте. (I8e397, b/457469959)

Изменения в API

  • (В UiAutomator) Изменено ожидание startActivity, чтобы дождаться нового окна. (I35da6, b/440021797)
  • Стабилизация API BlackHole в androidx.benchmark. (I2b67e, b/451749438)
  • Добавьте @JvmOverloads для удобных конструкторов для PerfettoTraceRule. (I1510a, b/443763207)

Версия 1.4

Версия 1.4.1

10 сентября 2025 г.

Выход androidx.benchmark:benchmark-*:1.4.1. Версия 1.4.1 содержит эти коммиты.

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

  • Исправлена ошибка, из-за которой perfettoSdkTracing=true (например, при трассировке Compose в микротесте) завершал целевой процесс, если он уже выполнялся, а StartupMode не был указан. (Ib2c1f)

Версия 1.4.0

30 июля 2025 г.

Выход androidx.benchmark:benchmark-*:1.4.0. Версия 1.4.0 содержит эти коммиты.

Важные изменения с версии 1.3.0

Микротест

  • Задачи Gradle lockClocks и unlockClocks перенесены в проекты тестирования производительности, а не на верхний уровень, чтобы соблюсти изоляцию проектов Gradle.
  • Проведен рефакторинг BenchmarkRule для создания на основе сопрограмм и улучшения работы yield(). Это должно значительно снизить риск возникновения ошибок ANR во время выполнения тестов, особенно длительных тестов непрерывной интеграции. Примечание. Тесты производительности интерфейса должны выполняться с measureRepeatedOnMainThread.

Macrobenchmark

  • Добавлено временное решение для API 34 и более поздних версий, чтобы устранить проблему с производительностью CompilationMode.None(), которая возникала из-за того, что ART частично компилировал приложения после первого запуска.
  • Экспериментальная функция "Статистика запуска" может выделять некоторые распространенные проблемы в макротесте запуска, передавая MacrobenchmarkRule(..., experimentalConfig = ExperimentalConfig(StartupInsightsConfig(isEnabled = true))).
  • Добавлен класс ArtMetric, который можно использовать для обнаружения JIT-компиляции и неоптимизированной загрузки классов. Обе эти функции полезны для проверки оптимизации базового профиля.

Профили базовой конфигурации

  • BaselineProfileRule теперь собирает профили для многопроцессных приложений.

Другие изменения

  • TraceProcessor вынесен в отдельную библиотеку (androidx.benchmark:benchmark-traceprocessor), чтобы его можно было использовать не только для показателей Macrobenchmark, но и в других случаях. Его также можно запустить на виртуальной машине Java для компьютеров, определив собственный ServerLifecycleManager.

Версия 1.4.0-rc01

18 июня 2025 г.

Выход androidx.benchmark:benchmark-*:1.4.0-rc01. Версия 1.4.0-rc01 содержит эти коммиты.

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

  • Добавлено временное решение для изображений времени выполнения, из-за которых CompilationMode.None() не измеряет производительность в худшем случае после первой итерации. К сожалению, это обходное решение требует задержки в 5 секунд, чтобы намеренно повредить образ среды выполнения в начале каждого набора макротестов (I4a4f1).

Версия 1.4.0-beta02

4 июня 2025 г.

Выход androidx.benchmark:benchmark-*:1.4.0-beta02. Версия 1.4.0-beta02 содержит эти коммиты.

Изменения в API

  • Добавлен метод BaselineProfileConfig.Builder, чтобы разработчикам на Java было проще вызывать BaselineProfileRule.collectWithResults(). (I94905)

Версия 1.4.0-beta01

7 мая 2025 г.

Выход сингла "androidx.benchmark:benchmark-*:1.4.0-beta01". Версия 1.4.0-beta01 содержит эти коммиты.

Изменения в API

  • Добавлен вариант конструктора PerfettoTraceRule, который принимает PerfettoConfig (Ie53ba).

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

  • Изменен формат ссылки на статистику запуска TraceProcessor, чтобы использовать правильный плагин и более понятный разделитель (: короче, чем %3A, но оба поддерживаются) (Ie18ef).
  • Для завершения процессов всегда используйте принудительную остановку, даже если у вас есть root-доступ и вы закрываете системные приложения. Исправляет исключения формы: Expected no stdout/stderr from killall ... No such process. (Idca2c)

Внешний вклад

  • Добавлен обработчик исключений прокси-сервера для TraceProcessorHttpServer (I480f5).

Версия 1.4.0-alpha11

9 апреля 2025 г.

Выход сингла "androidx.benchmark:benchmark-*:1.4.0-alpha11". Версия 1.4.0-alpha11 содержит эти коммиты.

Изменения в API

  • Изменен аргумент timeout в TraceProcessor: Duration заменен на timeoutMs long для удобства вызывающего объекта Java. (I9fbb5)
  • Отметьте конструктор TraceProcessor как внутренний. Вызывающие стороны должны использовать TraceProcessor.startServer или TraceProcessor.runServer. Ia8c5b

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

  • При завершении работы приложения с помощью команды MacrobenchmarkScope.killProcess проверьте результаты команды завершения, чтобы предотвратить незаметный сбой и ошибку времени ожидания. (I84555)

Обновление зависимостей

  • Теперь эта библиотека предназначена для Kotlin 2.0 и требует KGP 2.0.0 или более поздней версии. (Idb6b5)

Версия 1.4.0-alpha10

26 марта 2025 г.

Выход сингла "androidx.benchmark:benchmark-*:1.4.0-alpha10". Версия 1.4.0-alpha10 содержит эти коммиты.

Изменения в API

  • Время ожидания по умолчанию для загрузки сервера TraceProcessor и запросов к нему увеличено до 120 секунд (ранее оно составляло 60 и 30 секунд соответственно). Теперь оба значения можно задать с помощью одного параметра. (Ifec87)

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

  • Исправлены ошибки, которые возникали при тестировании или создании профилей приложений без profileinstaller, и добавлена поддержка BroadcastReciever. Это влияет только на запуски на устройствах с root-доступом. (Ied308)

Версия 1.4.0-alpha09

12 марта 2025 г.

Выход сингла "androidx.benchmark:benchmark-*:1.4.0-alpha09". Версия 1.4.0-alpha09 содержит эти коммиты.

Изменения в API

  • Добавлены TraceProcessor и Session API с закрываемыми дескрипторами для упрощения использования с пользовательскими жизненными циклами. Это также шаг к упрощению использования Coroutine и Java API. Функции расширения для TraceProcessor.runServer {} теперь отмечены как экспериментальные, поскольку в будущем они, вероятно, будут перенесены и станут неэкспериментальными. (I358b4)

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

  • Исправлена ошибка, из-за которой сбор данных для тестирования производительности и профиля базовой конфигурации не работал с API 36. Это было связано с изменением в toybox pgrep, из-за которого теперь для вывода полной командной строки требуется -a. (Idc991)
  • Отфильтруйте конфигурацию трассировки по умолчанию, чтобы снизить риск потери данных в трассировках на более новых уровнях API. (I54e8a)
  • Добавлен экспериментальный аргумент androidx.benchmark.killExistingPerfettoRecordings, который можно задать как false, чтобы разрешить продолжение сбора данных с помощью существующего инструментария Perfetto. По умолчанию существующие на устройстве записи трассировки Perfetto завершаются, чтобы избежать конфликтов. (I02a3c)
  • Поле JSON context.osCodenameAbbreviated теперь будет иметь значение REL для выпущенных версий ОС с API 35 и выше, поскольку нечисловые кодовые названия больше не поддерживаются базовой платформой. (Ib17fd)
  • Исправлена ошибка, из-за которой происходил сбой в FrameTimingMetric при повторной синхронизации кадров. (I7c6f4, b/394610806)
  • Больше не предполагается, что Choreographer#doFrame находится в верхней части стекового фрейма в основном потоке для FrameTimingQuery. (Iee0e0, b/340206285)

Версия 1.4.0-alpha08

12 февраля 2025 г.

Выход сингла "androidx.benchmark:benchmark-*:1.4.0-alpha08". Версия 1.4.0-alpha08 содержит эти коммиты.

Изменения в API

  • Перенесены API расширений TraceProcessor.runSession() в экспериментальные, поскольку в Android они, скорее всего, будут преобразованы в конкретные конструкторы. (Ib0528, b/393640753)
  • Большая часть реализации Startup Insights теперь является общедоступной или экспериментальной и перенесена в артефакт TraceProcessor. Подробнее StartupInsights… (I0aa00)
  • Мы отказались от использования параметра BenchmarkRule.runWithTimingDisabled {} в пользу параметра BenchmarkRule.runWithMeasurementDisabled {}, который более точно описывает поведение: все показатели приостановлены. Кроме того, мы добавили суперкласс MicrobenchmarkScope, поскольку нельзя переопределить функцию runWithMeasurementDisabled, чтобы открыть доступ, так как она встроена. (I9e23b, b/389149423, b/149979716)
  • Библиотеки Benchmark перенесены в Kotlin 2.0. (I9d1e0)
  • Удален аргумент инструментария androidx.benchmark.startupProfiles.enable. Он больше не нужен, так как его можно контролировать с помощью аргумента includeInStartupProfile в BaselineProfileRule.collect(). (I39eb4)

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

  • Уменьшено количество внутренних вызовов функций Microbenchmark во время профилирования, чтобы сделать, например, трассировку методов более понятной (Ifaed8).
  • Предположительное исправление сбоев: "Не удалось остановить [ProcessPid(processName=perfetto, pid=...)]". Теперь Benchmark будет регистрировать сообщение вместо сбоя, когда фоновый процесс Perfetto не удается остановить перед запуском теста. (I37d3e, b/323601788)
  • Исправлена ошибка IllegalStateExceptions с ярлыком Expected pm dump-profiles stdout, которая возникала из-за слишком строгой проверки формата выходных данных. (I358dc)

Версия 1.4.0-alpha07

29 января 2025 г.

Выход сингла "androidx.benchmark:benchmark-*:1.4.0-alpha07". Версия 1.4.0-alpha07 содержит эти коммиты.

Новые функции

  • В BaselineProfileRule теперь есть API collectWithResults(...), который включает список путей к вычисленным профилям. (I056f8)
  • Добавлен аргумент инструментирования androidx.benchmark.measureRepeatedOnMainThread.throwOnDeadline, который можно установить в значение false, чтобы отключить поведение throw on deadline для measureRepeatedOnMainThread при локальном тестировании. В других случаях это не рекомендуется, так как повышает вероятность ошибок ANR во время тестирования. (Idbeec, b/353226476)

Изменения в API

  • В конструктор MicrobenchmarkConfig добавлен параметр @JvmOverloads. (I13fd3)
  • Переработан код BenchmarkRule, чтобы он был основан на сопрограммах и лучше поддерживал поведение yield(). В результате рефакторинга было удалено несколько экспериментальных API BenchmarkState, но при необходимости они будут заменены. Кроме того, добавлено примечание runWithMeasurementDisabled, чтобы уточнить поведение (все отслеживание приостановлено). В будущем поддержка правила runWithTimingDisabled будет прекращена. (I19837, b/389149423, b/311242861)
  • Переместите PerfettoTraceProcessor в TraceProcessor в новом артефакте androidx.benchmark:benchmark-traceprocessor и сделайте большую часть его API неэкспериментальной. Если вы используете собственные TraceMetric или другие инструменты, считывающие данные из трассировок, вам нужно будет перейти на новый импорт TraceProcessor. Новый API TraceProcessor работает точно так же, как и старый, но представляет собой отдельную библиотеку интерфейсов (в некотором роде аналогичную уровню androidx.sqlite из Room) с реализацией для Android, встроенной в macrobenchmark. Новый артефакт можно использовать и на JVM, но сейчас вам нужно запустить собственную копию двоичного файла TraceProcessor и указать порт для подключения к нему. (I3a767, I62563, b/381134564)

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

  • Теперь при сбое в целевом процессе и невозможности запустить его с помощью MacrobenchmarkScope.startActivityAndWait будет показываться более понятное сообщение об ошибке, а не сообщение "Не удалось подтвердить запуск действия" (I3539b).
  • Исправлены синтаксические ошибки в примерах кода на Kotlin и подсветка синтаксиса в примерах кода на Java и build.gradle. (Ib3808)
  • Уточнена документация по параметрам ArtMetric и CaptureInfo. (I96e60)

Версия 1.4.0-alpha06

11 декабря 2024 г.

Выход сингла "androidx.benchmark:benchmark-*:1.4.0-alpha06". Версия 1.4.0-alpha06 содержит эти коммиты.

Изменения в API

  • Удалено использование @Language("sql") в PerfettoTraceProcessor.Session.query(), так как выделение/синтаксический анализ в Studio не работает. (Idc2fa, b/377733398)

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

  • Теперь в этой библиотеке используются аннотации JSpecify для проверки на наличие нулевых значений, которые применяются к типам. Разработчикам на Kotlin следует использовать следующий аргумент компилятора, чтобы обеспечить правильное использование: -Xjspecify-annotations=strict (это значение по умолчанию, начиная с версии 2.1.0 компилятора Kotlin). (I46810, b/326456246)
  • Исправлена ошибка, из-за которой ArtMetric сообщал о загрузке класса, а не об инициализации. Документация дополнена пояснениями о поведении во время выполнения. (I9915c)
  • В многопользовательском режиме Android выполняйте команды от имени root только на устройствах с настроенным root-доступом. (I88b44)

Версия 1.4.0-alpha05

13 ноября 2024 г.

Выход androidx.benchmark:benchmark-*:1.4.0-alpha05. Версия 1.4.0-alpha05 содержит эти коммиты.

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

  • Исправлена проблема на устройствах с API 34 и более поздних версий, из-за которой функция CompilationMode.None() работала нестабильно и не показывала исходную производительность в худшем случае. Это позволяет обойти изменение платформы, которое позволяет ART частично компилировать приложения (влияет только на загрузку классов) вскоре после первого запуска.verify (Ie48d0)
  • Исправлена проблема, из-за которой в некоторых случаях (особенно при коротких трассировках) не удавалось получить данные о встроенных показателях Macrobenchmark Metrics, поскольку в трассировке Perfetto было усечено название процесса. Теперь макротест обходит эту проблему, ища усеченное название пакета во всех встроенных запросах в дополнение к ожидаемому названию пакета. Обратите внимание, что специальные реализации TraceMetric или другие прямые вызовы PerfettoSession.query могут реализовывать такое же поведение, заменяя process.name LIKE "$packageName" в запросе Perfetto на (process.name LIKE "$packageName" OR process.name LIKE "$(packageName.takeLast(15))"). (I5bf01, b/377565760)

Версия 1.4.0-alpha04

30 октября 2024 г.

Выход сингла "androidx.benchmark:benchmark-*:1.4.0-alpha04". Версия 1.4.0-alpha04 содержит эти коммиты.

Новые функции

  • (Экспериментальная функция) Включить создание профиля базовой конфигурации и тестирование приложений, установленных для дополнительного пользователя, например любого приложения на устройствах Android Auto без дисплея. Мы протестировали эту функцию в некоторых сценариях, но если у вас она не работает, сообщите нам об ошибке. (I9fcbe, b/356684617, b/373641155)

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

  • isProfileable теперь всегда переопределяется в сборках для тестирования производительности, а isDebuggable – в сборках для тестирования производительности и сборках nonMinified (захват профиля базовой конфигурации). I487fa, b/369213505
  • Исправлено обнаружение компиляции на некоторых физических устройствах до API 28. Это влияет на JSON context.compilationMode, а также на поведение androidx.benchmark.requireAot=true (больше не выдает ошибку) (Ic3e08, b/374362482).
  • В показателях CpuEventCounter теперь выдается ошибка, если обнаружены недопустимые измерения, например instructions/cpucycles==0 (I8c503).

Версия 1.4.0-alpha03

16 октября 2024 г.

Выход сингла "androidx.benchmark:benchmark-*:1.4.0-alpha03". Версия 1.4.0-alpha03 содержит эти коммиты.

Изменения в API

  • Macrobenchmark. Добавляет ArtMetric, который можно использовать для проверки охвата профиля или общей производительности Android RunTime. Регистрирует количество и общую продолжительность JIT-компиляции, инициализации классов (если доступно) и проверки классов. Кроме того, изменения CaptureInfo включают необязательную основную версию ART по умолчанию. (I930f7)
  • Добавьте coefficientOfVariation в выходные данные JSON для сравнения, чтобы показать стабильность в рамках определенного запуска. (Ib14ea)

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

  • Исправлена ошибка CollectBaselineProfileTask, возникавшая, когда в названии устройства AVD были пробелы. (Ia0225, b/371642809)
  • Предполагаемое исправление ошибок, связанных с исключениями StartupMode.COLD: Package <packagename> must not be running prior to cold start!. Теперь MacrobenchmarkScope.killProcess() (включая запуск перед каждой итерацией, используемый для реализации поведения StartupMode.COLD) будет ждать подтверждения того, что все процессы приложения остановлены. (I60aa6, b/351582215)
  • Исправлена ошибка UNLOCKED_, которая возникала на некоторых эмуляторах с root-доступом. (Ic5117)
  • Теперь в этой библиотеке используются аннотации JSpecify nullness, которые относятся к типу type-use. Разработчикам на Kotlin следует использовать следующий аргумент компилятора, чтобы обеспечить правильное использование: -Xjspecify-annotations=strict (это значение по умолчанию, начиная с версии 2.1.0 компилятора Kotlin). (I7104f, b/326456246)

Версия 1.4.0-alpha02

2 октября 2024 г.

Выход сингла "androidx.benchmark:benchmark-*:1.4.0-alpha02". Версия 1.4.0-alpha02 содержит эти коммиты.

Изменения в API

  • Задачи Gradle lockClocks и unlockClocks перенесены в проекты тестирования производительности и больше не доступны на верхнем уровне. Это изменение было необходимо, поскольку, к сожалению, невозможно зарегистрировать эти действия как действия верхнего уровня, не нарушая изоляцию проекта. (I02b8f, b/363325823)

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

  • Теперь BaselineProfileRule собирает профили для многопроцессных приложений, отправляя сигнал каждому запущенному процессу в конце блока для выгрузки профилей. Если компиляция на основе профиля не находит процесс для трансляции, она завершается ошибкой, поскольку в ней не должно быть данных профиля. Кроме того, добавлен аргумент инструментария для управления длительностью ожидания дампа: androidx.benchmark.saveProfileWaitMillis (I0f519, b/366231469)
  • Из версии Benchmark 1.3.2: исправлена ошибка, из-за которой Firebase Test Lab (FTL) не удавалось извлечь файлы базового профиля или результаты макротестирования из плагина Gradle для базового профиля. (I2f678, b/285187547)

Чтобы использовать FTL, примените плагин к базовому модулю профиля в блоке плагинов, указав:

  plugins {
      ...
      id("com.google.firebase.testlab")
  }

а затем настройте Firebase Test Lab, указав:

  firebaseTestLab {

      // Credentials for FTL service
      serviceAccountCredentials.set(file("credentials.json"))

      // Creates one or more managed devices to run the tests on.
      managedDevices {
          "ftlDeviceShiba34" {
              device = "shiba"
              apiLevel = 34
          }
      }

      // Ensures the baseline profile is pulled from the device.
      // Note that this will be automated as well later with aosp/3272935.
      testOptions {
          results {
              directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
          }
      }
  }

Кроме того, созданное устройство FTL необходимо добавить в расширение базового профиля:

  baselineProfile {
      managedDevices += "ftlDeviceShiba34"
      useConnectedDevices = false
  }

Версия 1.4.0-alpha01

18 сентября 2024 г.

Выход сингла "androidx.benchmark:benchmark-*:1.4.0-alpha01". Версия 1.4.0-alpha01 содержит эти коммиты.

Новая функция – статистика запуска приложения

  • В Macrobenchmark можно включить первую версию статистики запуска приложения. (09fae38)

Чтобы включить в тест запуска:

  @Test
  fun startup {
      macrobenchmarkRule.measureRepeated(
          …
          packageName = "com.example.my.application.id"
          metrics = listOf(StartupTimingMetric()),
          iterations = 5,
          startupMode = StartupMode.COLD,
          compilationMode = CompilationMode.None(),
          experimentalConfig = ExperimentalConfig(startupInsightsConfig = StartupInsightsConfig(isEnabled = true))
          ) {
          scope.startActivityAndWait(...)
      }
  }

Затем при запуске теста запуска будет проанализирована трассировка на предмет распространенных проблем и выведена после метрик в выходные данные теста Studio на вкладке теста, например:

StartupBenchmark_startup[startup=COLD,compilationMode=None]
├── Metrics
│   ├──   timeToFullDisplayMs                min  1,147.2,   median  1,208.8,   max  1,307.4
│   └──   timeToInitialDisplayMs             min  1,147.2,   median  1,208.8,   max  1,307.4
├── App Startup Insights
│   ├── App in debuggable mode (expected: false)
│   │   └── seen in iterations: 0(true) 1(true) 2(true) 3(true) 4(true) 5(true) 6(true) 7(true) 8(true) 9(true)
│   ├── Potential CPU contention with another process (expected: < 100000000ns)
│   │   └── seen in iterations: 4(105022546ns)
│   └── Main Thread - Binder transactions blocked (expected: false)
│       └── seen in iterations: 7(true)
└── Traces
    └── Iteration 0 1 2 3 4 5 6 7 8 9

Эта функция все ещё находится на стадии разработки, и в дальнейшем мы планируем улучшить документацию и расширяемость. Мы будем рады вашим отзывам.

Новые функции

  • Добавлено свойство gradle androidx.baselineprofile.suppressWarnings, чтобы скрыть все предупреждения о профиле базовой конфигурации. (314153a)
  • Показатели Microbench теперь отображаются в трассировках Perfetto в виде счетчиков. (3214854)
  • Добавлены экспериментальные скрипты для отключения JIT (требуются root-права или перезапуск среды выполнения) и сброса состояния производительности/тестирования устройства. В настоящее время они не публикуются как задачи Gradle. (7c3732b)
  • Добавлен аргумент benchmark, позволяющий пропускать тесты при запуске в эмуляторе. Если включена сборка automaticGenerationDuring, тесты производительности также будут запускать создание профиля базовой конфигурации. Если используются эмуляторы, произойдет сбой. С новым аргументом skipBenchmarksOnEmulator мы можем пропустить тест. (0c2ddcd)
  • Изменена логика включения событий производительности для API 23 и более поздних версий (2550048).

Изменения в API

  • Существующий экспериментальный аргумент PerfettoConfig для MacrobenchmarkRule.measureRepeated() перемещен в новый объект ExperimentalConfig.

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

  • Увеличить количество попыток повтора lockClocks.sh (99e9dac)
  • Не создавайте типы сборки nonMinified и benchmark, если они уже существуют. Из-за ошибки типы сборки nonMinified и benchmark создавались заново, даже если они уже существовали. (e75f0a5)
  • Игнорировать нетерминальные срезы из TraceSectionMetric результатов. (a927d20)
  • Улучшена проверка эмулятора с учетом префикса sdk_. (1587de8)
  • Считать невыполненные пакеты очищенными в FrameTimingGfxInfoMetric. (35cc79c)
  • Исправлена ошибка, из-за которой androidx.benchmark.cpuEventCounter создавал поврежденные значения для событий, не связанных с инструкциями. (06edd59)
  • Исправлена ошибка resumeTiming/runWithTimingDisabled, из-за которой не соблюдался порядок приоритета показателей и приостановка или возобновление показателей с низким приоритетом значительно влияли на результаты показателей с высоким приоритетом. Например, если вы используете счетчики производительности ЦП с помощью аргумента инструментария cpuEventCounter.enable, то при приостановке и возобновлении работы значение timeNs больше не будет значительно уменьшаться. (5de0968)

Версия 1.3

Версия 1.3.4

26 марта 2025 г.

Выход androidx.benchmark:benchmark-*:1.3.4. Версия 1.3.4 содержит эти коммиты.

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

  • Исправлены несовместимости с изоляцией проектов Gradle в плагине Benchmark Baseline Gradle. (b/404523257)

Версия 1.3.3

16 октября 2024 г.

Выход сингла "androidx.benchmark:benchmark-*:1.3.3". Версия 1.3.3 содержит эти коммиты.

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

  • Исправлена ошибка CollectBaselineProfileTask, возникавшая, когда в названии устройства AVD были пробелы (Ia0225, b/371642809).

Версия 1.3.2

2 октября 2024 г.

Выход сингла "androidx.benchmark:benchmark-*:1.3.2". Версия 1.3.2 содержит эти коммиты.

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

  • Исправлена ошибка, из-за которой Firebase Test Lab не удавалось получить файлы результатов профиля базовой конфигурации или Macrobenchmark из плагина Gradle для профиля базовой конфигурации. (I2f678, b/285187547)

Чтобы использовать FTL, примените плагин к модулю профиля базовой конфигурации в блоке плагина:

  plugins {
      ...
      id("com.google.firebase.testlab")
  }

а затем настройте Firebase Test Lab, указав:

  firebaseTestLab {

      // Credentials for FTL service
      serviceAccountCredentials.set(file("credentials.json"))

      // Creates one or more managed devices to run the tests on.
      managedDevices {
          "ftlDeviceShiba34" {
              device = "shiba"
              apiLevel = 34
          }
      }

      // Ensures the baseline profile is pulled from the device.
      // Note that this will be automated as well later with aosp/3272935.
      testOptions {
          results {
              directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
          }
      }
  }

Кроме того, созданное устройство FTL необходимо добавить в расширение базового профиля:

  baselineProfile {
      managedDevices += "ftlDeviceShiba34"
      useConnectedDevices = false
  }

Версия 1.3.1

18 сентября 2024 г.

Выход androidx.benchmark:benchmark-*:1.3.1. Версия 1.3.1 содержит эти коммиты.

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

  • Добавлено свойство gradle androidx.baselineprofile.suppressWarnings, чтобы скрыть все предупреждения о профиле базовой конфигурации (I7c36e, b/349646646).
  • Исправлена ошибка, из-за которой плагин Gradle для базового профиля использовал существующие nonMinified… и benchmark…, если они были созданы приложением, вместо того чтобы создавать оболочки. (Ia8934, b/361370179)
  • Исправлена ошибка java.lang.AssertionError: ERRORS (not suppressed): EMULATOR, возникавшая при включении automaticGenerationDuringBuild в эмуляторах. Новый аргумент используется для пропуска теста. (If3f51, b/355515798)
  • Минимизация микротестов – сохранение подклассов org.junit.runner.notification.RunListener в библиотеке бенчмаркинга proguard (Ic8ed5, b/354264743)
  • Исправьте TraceSectionMetric, чтобы игнорировать незавершенные фрагменты. Ранее при суммировании или поиске минимальной продолжительности такие видео считались имеющими продолжительность -1. (If74b7)
  • Исправлена ошибка в FrameTimingGfxInfoMetric, из-за которой запуск показателя приводил к сбою, если процесс ещё не был запущен. (I6e412)

Версия 1.3.0

21 августа 2024 г.

Выход сингла "androidx.benchmark:benchmark-*:1.3.0". Версия 1.3.0 содержит эти коммиты.

Изменения в Microbenchmark с версии 1.2.0

  • Трассировка методов по умолчанию включена в микротестах на большинстве устройств.
    • Трассировка методов выполняется как отдельный этап после измерений. Это позволяет получить точные измерения и трассировки методов в рамках одного запуска теста.
    • Трассировка методов в некоторых версиях ОС Android и ART влияет на последующие этапы сбора данных. В этих версиях трассировка методов отключена по умолчанию, и в выходных данных Studio выводится предупреждение.
  • Контрольные показатели основного потока и ошибки ANR
    • Добавлен measureRepeatedOnMainThread для тестов производительности потока UI (например, взаимодействующих с интерфейсами Compose/View), чтобы избежать ошибок ANR при выполнении в течение многих секунд.
    • Трассировка методов пропускается, если ожидается, что она превысит крайний срок для предотвращения ANR. Чтобы отключить это поведение, задайте для androidx.benchmark.profiling.skipWhenDurationRisksAnr значение false (не рекомендуется для непрерывной интеграции, так как ошибки ANR могут вызвать проблемы при длительных запусках).
  • Минификация
    • Встроенные правила ProGuard для улучшения микротестирования с включенной минификацией.
    • Для минификации или R8 в модуле библиотеки требуется AGP 8.3. Включить их можно с помощью android.buildTypes.release.androidTest.enableMinification в build.gradle.
    • Добавлен экспериментальный API BlackHole.consume(), чтобы предотвратить удаление неиспользуемого кода (If6812, b/286091643).
  • Показатели
    • Экспериментальная функция счетчика событий ЦП (показатели из perf_event_open, для которых в большинстве версий платформы требуются root-права), доступ через InstrumentationArgument androidx.benchmark.cpuEventCounter.enable (можно задать значение true), а для androidx.benchmark.cpuEventCounter.events можно задать, например, Instructions,CpuCycles. Эта функция должна поддерживаться в некоторых эмуляторах userdebug, но поддержка не тестировалась во всех доступных эмуляторах.

Изменения в MACRObenchmark с версии 1.2.0

  • Переработанный метод трассировки для макротестов.
    • Теперь трассировки методов ограничены продолжительностью measureBlock и могут охватывать несколько сеансов, если процесс запускается несколько раз.
    • Ранее трассировка методов работала только для тестов StartupMode.COLD и не захватывала данные для measureBlocks, которые не перезапускали целевой процесс.
    • В макротестах метод flush для трассировки фиксируется, поэтому трассировка методов должна быть полностью записана и действительна даже на медленных устройствах. (I6349a, b/329904950)
  • Исправлена ошибка, из-за которой при завершении процесса во время отдельных итераций warmUp дамп профиля ART создавался некорректно. Теперь измерения CompilationMode.Partial(warmup=N) точнее. (I17923)
  • Сообщение о сбое трансляции Drop Shader
    • В сообщение об ошибке трансляции шейдера добавлены советы по устранению неполадок
    • Добавьте два аргумента инструментирования, чтобы переопределить поведение при удалении шейдеров и избежать сбоев при тестировании приложений без 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. Обратите внимание, что неправильно настроенные конфигурации могут привести к сбоям встроенных классов Metric. (Idfd3d, b/309841164, b/304038384)
  • Отмените фоновые задачи dexopt перед запуском Macrobenchmark, чтобы уменьшить помехи. (I989ed)
  • Теперь Macrobenchmark ожидает одну секунду, пока целевое приложение очистит профиль ART (ранее ожидание длилось 500 мс). (I85a50, b/316082056)
  • TraceSectionMetric overhaul
    • Примечание. Указанные ниже изменения в TraceSectionMetric могут повлиять на результаты использования CI, а также привести к разрывам или ошибкам при синтаксическом анализе.
    • Теперь по умолчанию используется сумма, поскольку этот показатель чаще всего применяется для повторяющихся событий, а при использовании первого значения данные в таких случаях отбрасываются.
    • Изменения, позволяющие настраивать режим работы и выбирать его из большего числа вариантов
    • Названия режимов теперь встроены в названия выходных показателей (в Творческой студии и JSON).
    • Теперь поддерживаются фрагменты, созданные с помощью Trace.{begin|end}AsyncSection.
  • Показатели
    • Питание – добавлены PowerMetric.deviceSupportsHighPrecisionTracking, PowerMetric.deviceBatteryHasMinimumCharge() и PowerMetric.deviceSupportsPowerEnergy()
    • Переименовано Metric.getResult в getMeasurements, чтобы соответствовать типу возвращаемого значения.
    • Добавлены ярлыки log.w / exception для всех сбоев при обнаружении запуска. Это не меняет текущее поведение (поэтому некоторые ошибки вызывают сбои, а другие не позволяют обнаружить запуск), а просто делает его более понятным. Обычно Log.w() и не передают показатели запуска те приложения, в которых отсутствуют события, не связанные с кадрами, и при обнаружении запуска возникают исключения, за исключением информации о времени формирования кадра (из фрагментов UI/RT). (Id240f, b/329145809)
    • Добавлен показатель frameCount в FrameTimingMetric, чтобы помочь в обнаружении сценариев, в которых показатели меняются из-за изменения количества созданных кадров (добавлены новые анимации, исправлены проблемы с недействительностью). (I1e5aa)
    • Добавлено пояснение, что frameOverrunMs – предпочтительный показатель для отслеживания, если он доступен в документах, и почему. (I18749, b/329478323)
    • Исправлена ошибка, из-за которой незавершенные кадры в начале и конце трассировки могли объединяться в пару, что приводило к неверному отчету о едином чрезвычайно длинном кадре. (I39353, b/322232828)
    • Улучшено сообщение об ошибке FrameTimingMetric, когда кадры не создаются. Теперь при сбое синтаксического анализа показателей всегда выводится ссылка на трассировку, чтобы помочь в диагностике проблемы. (I956b9)
    • Устранен сбой в FrameTimingMetric, который возникал из-за того, что не удавалось проанализировать идентификатор кадра, особенно на некоторых устройствах производителей оригинального оборудования. (Ia24bc, b/303823815, b/306235276)
    • Снижена строгость проверок в FrameMetrics и добавлена более подробная информация в сообщения об ошибках. (Iadede)

Изменения в захвате профиля базовой конфигурации и плагине Gradle с версии 1.2.0

  • Максимальная рекомендуемая версия AGP увеличена до 9.0.0-alpha01.
  • Убедитесь, что задачи mergeArtProfile и mergeStartupProfile всегда ожидают создания профиля базовой конфигурации. (I623d6, b/343086054)
  • При успешном создании базового профиля будет выведена сводка изменений (I824c8, b/269484510).
  • Добавлен DSL для отключения предупреждений (Ic4deb, b/331237001).
  • Исправлена ошибка, из-за которой при отключенной функции automaticGenerationDuringBuild в контрольных показателях использовались сгенерированные базовые профили (Ic144f, b/333024280).
  • Исправлены переопределения свойств плагина Gradle BaselineProfile, чтобы включить создание профиля базовой конфигурации и тестирование производительности при настройке типа сборки nonMinified или тестирования производительности. (Ib8f05, b/324837887)
  • Исправлена ошибка, из-за которой профили базовой конфигурации библиотек включались в AAR до AGP 8.3.0-alpha15. (I1d2af, b/313992099)
  • Исправлена ошибка, из-за которой в конце задачи по созданию профиля не показывался URL выходных данных. (I802e5, b/313976958)

Другие важные изменения по сравнению с версией 1.2.0

  • Запись трассировки
    • Ошибка EXITCODE 2 при запуске Perfetto заменена на предупреждение в журнале.
    • Включено отслеживание AIDL по умолчанию в тестах производительности(требуется API 28) (Ia0af2, b/341852305).
    • Включить отслеживание тегов Porter по умолчанию в контрольных показателях. Например, это позволяет отслеживать точки трассировки wakelock. (Icfe44, b/286551983)
    • Увеличен тайм-аут начала сбора данных трассировки, чтобы избежать сбоев при запуске трассировки на более медленных устройствах (I98841, b/329145808).
    • Добавлены общедоступные API PerfettoTraceProcessor.Session.queryMetrics с вариантами JSON, textproto и proto binary (недекодированный). Они позволяют запрашивать показатели, встроенные в TraceProcessor (I54d7f, b/304038382).
    • Включите блокировку начала записи трассировки Perfetto, чтобы снизить риск потери данных в начале трассировки. Поддерживается только на устройствах с API 33 и выше. (Ie6e41, b/310760059)
  • Вывод в формате JSON
    • В контекст тестирования в выходных данных JSON добавлена дополнительная информация:
      • context.artMainlineVersion – целочисленная версия основного модуля Art (если он есть на устройстве, иначе – -1).
      • context.build.id – соответствует android.os.Build.ID.
      • context.build.version.codename – соответствует android.os.Build.VERSION.CODENAME.
      • context.build.version.abbreviatedCodename – соответствует первой букве кодового названия предварительного выпуска (в том числе в конечных сборках) (Ie5020).
    • В выходные данные JSON добавлен список profilerOutput, чтобы упростить работу с инструментами для трассировки профилирования, такими как Perfetto и трассировка методов (I05ddd, b/332604449).
    • Добавлено предупреждение о том, что при использовании Инструмента оркестрации тестов Android в модулях тестирования производительности выходные JSON-файлы для каждого модуля будут перезаписываться. (Ia1af6, b/286899049)
    • Выдавать ошибку, если длина названия файла превышает 200 символов, чтобы избежать непонятных сбоев при записи или постобработке файлов. (I4a5ab)

Версия 1.3.0-rc01

7 августа 2024 г.

Выход сингла "androidx.benchmark:benchmark-*:1.3.0-rc01". Версия 1.3.0-rc01 содержит эти коммиты.

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

  • Исправлена ошибка, из-за которой androidx.benchmark.cpuEventCounter создавал поврежденные значения для событий, не связанных с инструкциями (I7386a, b/286306579).
  • Исправлена ошибка resumeTiming/runWithTimingDisabled, из-за которой не соблюдался приоритет показателей. Теперь приостановка или возобновление показателей с более низким приоритетом значительно меньше влияет на результаты показателей с более высоким приоритетом. Например, если вы используете счетчики производительности ЦП с аргументом инструментирования cpuEventCounter.enable, значение timeNs больше не будет значительно уменьшаться при приостановке и возобновлении. (I39c2e, b/286306579, b/307445225)
  • Снижена вероятность того, что выборка стека вызовет ошибку measureRepeatedOnMainThread из-за жесткого тайм-аута основного потока. Для этого преобразование выборки стека вызовов было перенесено из основного потока. (I487a8, b/342237318)
  • Удалено ручное структурирование доступа к новым API платформы, поскольку это происходит автоматически с помощью моделирования API при использовании R8 с AGP 7.3 или более поздней версии (например, R8 версии 3.3) и для всех сборок при использовании AGP 8.1 или более поздней версии (например, D8 версии 8.1). Клиентам, которые не используют AGP, рекомендуется перейти на D8 версии 8.1 или более поздней. Подробнее об этом читайте здесь. (I9496c, b/345472586)
  • Добавлена проверка версии AGP для отправки названия пакета в качестве аргумента инструкции. До версии 8.4.0 AGP название целевого пакета приложения нельзя было передать приложению для тестирования с помощью аргументов. (0c72a3f)

Версия 1.3.0-beta02

10 июля 2024 г.

Выход androidx.benchmark:benchmark-*:1.3.0-beta02. Версия 1.3.0-beta02 содержит эти коммиты.

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

  • При запуске Perfetto корректно обрабатывается EXITCODE 2: регистрируется предупреждение, но процесс продолжается.

Версия 1.3.0-beta01

12 июня 2024 г.

Выход androidx.benchmark:benchmark-*:1.3.0-beta01. Версия 1.3.0-beta01 содержит эти коммиты.

Изменения в API

  • Для единообразия название MethodTracing.affectsMeasurementOnThisDevice изменено на AFFECTS_MEASUREMENT_ON_THIS_DEVICE. (I1bdfa)
  • Добавлен экспериментальный API BlackHole.consume(), который предотвращает удаление неиспользуемого кода в микротестах. (If6812, b/286091643)
  • Теперь микротест будет правильно вызывать исключение, чтобы трассировка методов не влияла на результаты измерений. Это происходит на некоторых устройствах, когда принудительно включена трассировка метода (с помощью аргументов инструментирования или MicrobenchmarkConfig) и если измерение выполняется после трассировки метода. Проблема затрагивает устройства с API 26–30 или определенными версиями основного модуля ART. Их можно обнаружить во время выполнения с помощью ProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice. (Iafb92, b/303660864)

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

  • Максимальная рекомендуемая версия AGP теперь 9.0.0-alpha01. (I5bbb0)
  • В контекст тестирования добавлен режим компиляции (If5612, b/325512900).
  • Включить трассировку AIDL по умолчанию (требуется API 28) (Ia0af2, b/341852305)
  • Добавлена дополнительная информация в контекст контрольных показателей в выходных данных JSON:
    • context.artMainlineVersion – целочисленная версия основного модуля Art (если он есть на устройстве, в противном случае – -1).
    • context.build.id равно android.os.Build.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, b/341851833)
  • Убедитесь, что задачи mergeArtProfile и mergeStartupProfile всегда ожидают создания профиля базовой конфигурации. (I623d6, b/343086054)
  • Принимая решение о том, следует ли включить вариант, учитывайте его статус. (I5d19e, b/343249144)
  • Увеличено время ожидания по умолчанию для запуска обработчика трассировки Perfetto. (I87e8c, b/329145808)

Версия 1.3.0-alpha05

14 мая 2024 г.

Выход сингла "androidx.benchmark:benchmark-*:1.3.0-alpha05". Версия 1.3.0-alpha05 содержит эти коммиты.

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

  • Теперь при возврате нулевых значений для всех итераций показателя макротеста выдается более понятное исключение (Iab58f, b/314931695).
  • В правила ProGuard для микротестов добавлены дополнительные правила обходных решений, в том числе поддержка правил прослушивателей и других наблюдаемых предупреждений и ошибок. (I14d8f, b/329126308, b/339085669)
  • Трассировка методов выполняется как отдельный этап во время макротестирования и больше не влияет на измерения. (If9a50, b/285912360, b/336588271)
  • В сообщение об ошибке при сбое трансляции шейдера добавлены дополнительные советы по устранению неполадок. (I5efa6, b/325502725)

Версия 1.3.0-alpha04

1 мая 2024 г.

Выход androidx.benchmark:benchmark-*:1.3.0-alpha04. Версия 1.3.0-alpha04 содержит эти коммиты.

Изменения в API

  • Добавлен экспериментальный вариант MacrobenchmarkRule#measureRepeated, который принимает пользовательский PerfettoConfig для полностью настраиваемой записи трассировки Perfetto. Обратите внимание, что неправильно настроенные конфигурации могут привести к сбоям встроенных классов Metric. Idfd3d, b/309841164, b/304038384
  • Переименование PowerMetric.deviceSupportsPowerEnergy в PowerMetric.deviceSupportsHighPrecisionTracking для ясности (I5b82f)
  • Добавлены параметры PowerMetric.deviceBatteryHasMinimumCharge() и PowerMetric.deviceSupportsPowerEnergy(), позволяющие изменять или пропускать тесты в зависимости от возможностей устройства по измерению энергопотребления. (I6a591, b/322121218)

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

  • Добавлено сравнение с предыдущим профилем базовой конфигурации (I824c8, b/269484510).
  • Добавлен DSL для отключения предупреждений (Ic4deb, b/331237001).
  • Изменено исключение для журнала информации, когда варианты тестирования отключены (I8a517, b/332772491).
  • Упрощен сбор трассировок методов для Macrobenchmark, ограниченных продолжительностью фактического measureBlock(). Ранее он запускался при запуске целевого процесса и поддерживал только холодный запуск (Iee85a, b/300651094).
  • Исправлена ошибка, из-за которой происходил сбой, когда процессор трассировки Perfetto запускался медленно (I98841, b/329145808).

Версия 1.3.0-alpha03

17 апреля 2024 г.

Выход сингла "androidx.benchmark:benchmark-*:1.3.0-alpha03". Версия 1.3.0-alpha03 содержит эти коммиты.

Новые функции

  • Добавляет общедоступные API PerfettoTraceProcessor.Session.queryMetrics с вариантами JSON, textproto и proto binary (недекодированный). Они позволяют запрашивать показатели, встроенные в TraceProcessor (I54d7f, b/304038382).
  • В выходные данные JSON добавлено поле profilerOutput, чтобы упростить работу с инструментами для трассировки профилирования (например, Perfetto, трассировка методов). (I05ddd, b/332604449)
  • Добавлен тег питания для тестирования Perfetto Config. Например, это позволяет отслеживать точки трассировки wakelock. (Icfe44, b/286551983)
  • Добавлен аргумент inst androidx.benchmark.profiling.skipWhenDurationRisksAnr, которому можно присвоить значение false, чтобы не пропускать трассировки методов, когда ожидаемая продолжительность может вызвать ошибку ANR. Настоятельно рекомендуем избегать этого при непрерывной интеграции.
  • Добавлен экспериментальный аргумент inst androidx.benchmark.profiling.perfCompare.enable. Установите для него значение true, чтобы сравнить время между этапами измерения и профилирования. Полезно, например, для оценки накладных расходов на трассировку методов. (I61fb4, b/329146942)

Изменения в API

  • Изменен тип TraceSectionMetric.Mode на запечатанный класс, чтобы в будущем можно было расширять его без нарушения исчерпывающих операторов when (I71f7b).
  • Добавлены аргументы TraceSectionMetric.Mode.Average и .Count, а также изменен порядок аргументов, чтобы более распространенный аргумент (mode) находился раньше в списке аргументов, что снижает необходимость указывать имена параметров. (Ibf0b0, b/315830077, b/322167531)
  • Название Metric.getResult изменено на getMeasurements в соответствии с типом возвращаемого значения (I42595).

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

  • Исправлена ошибка, из-за которой в тестах производительности использовались сгенерированные профили базовой конфигурации, когда параметр automaticGenerationDuringBuild был отключен (Ic144f, b/333024280).
  • Исправлены переопределения свойств плагина Gradle BaselineProfile, чтобы можно было создавать базовые профили и проводить тестирование при настройке типа сборки nonMinified или типа сборки для тестирования. (Ib8f05, b/324837887)
  • Исправлена очистка трассировок методов в Macrobenchmark, чтобы они полностью записывались и были действительными даже на медленных устройствах. (I6349a, b/329904950)
  • Включите блокировку запуска при записи трассировки Perfetto, чтобы снизить риск потери данных в начале трассировки. Поддерживается только в API 33 и более поздних версиях (Ie6e41, b/310760059).
  • Добавлено предупреждение об использовании Инструмента оркестрации тестов Android в модулях тестирования производительности, так как это приведет к многократной перезаписи выходных JSON-файлов для каждого модуля. (Ia1af6, b/286899049)
  • Принудительное использование запятой в качестве разделителя групп разрядов в Творческой студии независимо от региональных настроек устройства (I3e921, b/313496656).
  • TraceSectionMetric теперь поддерживает фрагменты, созданные с помощью Trace.{begin|end}AsyncSection. (I91b32, b/300434906)
  • Добавлены ярлыки log.w / exception для всех сбоев при обнаружении запуска. Это не изменит текущее поведение (некоторые ошибки будут вызывать исключения, а другие – нет), но сделает его более понятным. Обычно Log.w() и не могут передать показатели запуска те приложения, в которых отсутствуют события, не связанные с кадрами, и при обнаружении запуска возникают исключения, за исключением информации о времени формирования кадра (из фрагментов UI/RT). (Id240f, b/329145809)
  • Отмените фоновые задачи dexopt перед запуском Macrobenchmark, чтобы уменьшить помехи. (I989ed)
  • Добавлен показатель frameCount в FrameTimingMetric, чтобы помочь в обнаружении сценариев, в которых показатели меняются из-за изменения количества созданных кадров (добавлены новые анимации, исправлены проблемы с недействительностью). (I1e5aa)
  • Добавлено пояснение, что frameOverrunMs – предпочтительный показатель для отслеживания, если он доступен в документах, и почему. (I18749, b/329478323)

Версия 1.3.0-alpha02

20 марта 2024 г.

Выход сингла "androidx.benchmark:benchmark-*:1.3.0-alpha02". Версия 1.3.0-alpha02 содержит эти коммиты.

Новые функции

  • Экспериментальная поддержка R8 в микротестах с помощью встроенных правил ProGuard. Обратите внимание, что эта поддержка является экспериментальной и для минификации тестов модулей библиотеки требуется AGP 8.3. Чтобы включить минификацию и оптимизацию R8 в файле build.gradle модуля тестирования, используйте следующий код. Это должно значительно повысить производительность в зависимости от рабочей нагрузки. (I738a3, b/184378053)

    android {
        buildTypes.release.androidTest.enableMinification = true
    }
    

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

  • Предупреждение о трассировке метода теперь показывается на отдельной строке от выходных данных микротеста. (I0455c, b/328308833)

Версия 1.3.0-alpha01

21 февраля 2024 г.

Выход сингла "androidx.benchmark:benchmark-*:1.3.0-alpha01". Версия 1.3.0-alpha01 содержит следующие коммиты:

Изменения в API

  • Переименованы логические параметры MicrobenchmarkConfig, чтобы избежать ненужного слова should (Ia8f00, b/303387299).
  • Добавлено BenchmarkRule.measureRepeatedOnMainThread, чтобы тесты основного потока (например, те, которые касаются представлений или интерфейсов Compose) не вызывали ошибки ANR, особенно во время больших наборов в CI. (I5c86d)
  • Добавлен класс FrameTimingGfxInfoMetric – экспериментальная альтернативная реализация класса FrameTimingMetric, в которой измерения поступают непосредственно с платформы, а не извлекаются из трассировки Perfetto. (I457cb, b/322232828)
  • Добавлена возможность выгружать профиль ART во время отдельных итераций warmUp. (I17923)
  • В API TraceSectionMetric внесены следующие изменения:
    • Добавить Mode.Min, Mode.Max
    • Добавьте аргумент ярлыка, чтобы переопределить название раздела в качестве ярлыка показателя.
    • В выходные данные добавлено название режима, чтобы уточнить значение показателя.
    • По умолчанию теперь используется сумма, поскольку этот показатель чаще всего применяется для повторяющихся событий. Учитывайте эти изменения при использовании CI, так как они могут привести к разрывам или ошибкам при анализе. (Ic1e82, b/301892382, b/301955938)

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

  • Улучшено сообщение об ошибке в плагине Gradle для профиля базовой линии, когда указанное управляемое устройство не существует (Idea2b, b/313803289)
  • Исправлена ошибка, из-за которой профили базовой конфигурации библиотек включались в AAR до AGP 8.3.0-alpha15 (I1d2af, b/313992099).
  • Исправлена ошибка, из-за которой в конце задачи по созданию профиля запуска и базового профиля выводился URL (I802e5, b/313976958).
  • Изменены тайм-ауты источников данных, чтобы устранить проблему java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)] (I8dc7d, b/323601788)
  • Добавьте два аргумента инструментирования, чтобы переопределить поведение при удалении шейдеров и избежать сбоев при тестировании приложений без ProfileInstaller 1.3:
    • androidx.benchmark.dropShaders.enable=true/false – позволяет пропустить удаление всех шейдеров (в том числе при запуске StartupMode.Cold), особенно при тестировании приложений, которые ещё не используют profileinstaller 1.3.
    • androidx.benchmark.dropShaders.throwOnFailure=true/false – можно использовать для обработки сбоев при попытке удалить шейдеры, например при тестировании приложений без profileinstaller 1.3 (I4f573).
  • Пропускать трассировку метода в потоке UI, если ожидается, что она займет больше нескольких секунд, и очищать трассировки методов при возникновении ошибки. (I6e768)
  • Выбрасывать исключение, если длина названия файла превышает 200 символов, чтобы избежать неясных сбоев при записи или постобработке файлов. (I4a5ab)
  • Исправлена ошибка, из-за которой незавершенные кадры в начале и конце трассировки могли быть объединены, что приводило к неправильному отображению одного очень длинного кадра. (I39353, b/322232828)
  • Используйте --skip verification в API 30 и более поздних версий при переустановке пакета в API 30–33, чтобы очистить профили ART в пользовательских сборках. Это позволяет обойти предупреждения Play Защиты, которые вызывают сбои на некоторых устройствах. (Ic9e36)
  • Используйте am force-stop, чтобы закрывать приложения, если они не являются системными, например "Системный интерфейс" или "Панель запуска". (I5e028)
  • Теперь Macrobenchmark ждет 1 second, пока целевое приложение не сбросит профиль ART (ранее ожидание составляло 500 ms). (I85a50, b/316082056)
  • Улучшено сообщение об ошибке FrameTimingMetric, когда кадры не создаются. Теперь при сбое синтаксического анализа показателей всегда выводится ссылка на трассировку, чтобы помочь в диагностике проблемы. (I956b9)
  • Устранен сбой в FrameTimingMetric, который возникал из-за того, что не удавалось проанализировать идентификатор кадра, особенно на некоторых устройствах производителей оригинального оборудования. (Ia24bc, b/303823815, b/306235276)
  • Снижена строгость проверок в FrameMetrics и добавлена более подробная информация в сообщения об ошибках. (Iadede)

Версия 1.2

Версия 1.2.4

17 апреля 2024 г.

Выход androidx.benchmark:benchmark-*:1.2.4. Версия 1.2.4 содержит эти коммиты.

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

  • Исправлена ошибка, из-за которой в вариантах для тестирования не настраивался атрибут srcset профиля базовой конфигурации. Также исправлена ошибка automaticGenerationDuringBuild в библиотеках, вызывающая циклическую зависимость. (I28ab7, b/333024280)
  • Используйте am force-stop, чтобы закрывать приложения, если они не являются системными, например "Системный интерфейс" или "Панель запуска". Исправлена ошибка, из-за которой тесты StartupMode.COLD завершались сбоем и сообщением "Package $package must not be running prior to cold start!" (Пакет $package не должен быть запущен до холодного запуска), поскольку процесс не был полностью завершен. (I5e028)

Версия 1.2.3

24 января 2024 г.

Выход сингла "androidx.benchmark:benchmark-*:1.2.3". Версия 1.2.3 содержит эти коммиты.

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

  • Удалено исключение из плагина Gradle для базового профиля, когда версия AGP – 8.3.0 или выше.
  • Исправлена ошибка, из-за которой профили базовой конфигурации библиотек включались в AAR до AGP 8.3.0-alpha15.

Версия 1.2.2

1 декабря 2023 г.

Выход сингла "androidx.benchmark:benchmark-*:1.2.2". Версия 1.2.2 содержит эти коммиты.

Профили базовой конфигурации

  • В журналах выполнения путь к выходному файлу профиля базовой конфигурации будет указан как URI локального файла (aosp/2843918, aosp/2853665, b/313976958).

Версия 1.2.1

15 ноября 2023 г.

Выход androidx.benchmark:benchmark-*:1.2.1. Версия 1.2.1 содержит эти коммиты.

Новые функции

  • Улучшено сообщение об ошибке, которое появляется, когда пользователь отключает тестовые варианты (b/307478189).
  • Добавлены свойства для поддержки интеграции тестового запуска AS (b/309805233), (b/309116324).

Версия 1.2.0

18 октября 2023 г.

Выход сингла "androidx.benchmark:benchmark-*:1.2.0". Версия 1.2.0 содержит эти коммиты.

Важные изменения с версии 1.1.0

Профили базовой конфигурации

  • Новый плагин Gradle для базового профиля автоматизирует захват и включение базовых профилей в рабочий процесс тестирования и сборки.
  • BaselineProfileRule.collect – стабильная, упрощенная версия экспериментального API BaselineProfileRule.collectBaselineProfile.
    • Просто укажите packageName и управляйте приложением.
  • Теперь при создании базовых профилей для библиотек можно фильтровать сгенерированные правила в коде (аргумент BaselineProfileRule.collect) или с помощью плагина Gradle.
  • Исправления
    • Исправлен сбор профилей базовой конфигурации на Android U+ (Id1392, b/277645214).

Macrobenchmark

  • Сборник
    • Теперь Macrobenchmark правильно сбрасывает состояние компиляции для каждой компиляции. Для этого требуется переустановить APK до Android 14, поэтому настоятельно рекомендуется проводить тестирование на Android 14 и более поздних версиях, если вы хотите сохранить состояние (например, вход пользователя) в том, что измеряется.
    • Вы также можете управлять компиляцией приложения отдельно и пропускать ее с помощью CompilationMode.Ignore() или аргумента инструментирования.
  • Аргументы инструментирования

    • Поддержка аргумента androidx.benchmark.dryRunMode.enable (уже доступна в микротестировании) для более быстрой проверки (например, при создании контрольного показателя или перед отправкой).
    • Поддержка androidx.benchmark.profiling.mode=StackSampling и MethodTracing.
    • Добавлен тег androidx.benchmark.enabledRules, позволяющий фильтровать тесты правил базового профиля и макротестов во время выполнения.
    • Добавлен аргумент androidx.benchmark.perfettoSdkTracing.enable, позволяющий включить трассировку с помощью tracing-perfetto, например трассировку рекомпозиции Compose. Обратите внимание, что при использовании с StartupMode.COLD время будет значительно затронуто, поскольку библиотека трассировки загружается и включается во время запуска приложения.
  • Требования

    • Теперь для Macrobenchmark требуется ProfileInstaller версии 1.3.0 или более поздней в целевом приложении, чтобы включить захват или сброс профиля и очистку кеша шейдеров.
  • Новые экспериментальные Metric API

    • Добавлен экспериментальный класс TraceSectionMetric, который позволяет извлекать простые временные данные из блоков trace("") {} в приложении, и класс TraceMetric, который позволяет использовать все возможности запросов Perfetto TraceProcessor.
    • Добавлена экспериментальная функция PowerMetric для сбора информации об энергопотреблении.
    • Добавлено экспериментальное поле MemoryCountersMetric для подсчета отказов страницы.
    • Добавлен экспериментальный API PerfettoTraceProcessor, который используется внутри системы для извлечения показателей из трассировок системы (также известных как трассировки Perfetto).
  • Исправления

    • Исправлены сбои при установке или извлечении профилей из приложения, установленного из нескольких APK-файлов (например, из набора App Bundle).
    • Исправлена ошибка, из-за которой FrameTimingMetric игнорировал кадры с несовпадающими идентификаторами (обычно это кадры во время пульсаций на устройствах с API 31 и выше) (I747d2, b/279088460).
    • Исправлены ошибки синтаксического анализа трассировок размером более 64 МБ (Ief831, b/269949822).
    • Уточнены ошибки, возникающие, когда образ ОС устройства (особенно эмулятора) неправильно настроен для трассировки или компиляции.
    • Пропускать проверку уровня заряда батареи для устройств без батареи (микро и макро)
    • Улучшен вывод файлов, добавлены более понятные сообщения об ошибках при указании недопустимых выходных каталогов и более безопасные значения по умолчанию.
    • Повышена стабильность StartupMode.COLD за счет постоянного сброса кеша шейдеров (также доступно через MacrobenchmarkScope.dropShaderCache).
    • Исправлена ошибка, из-за которой в startActivityAndWait не работало резервное объявление в режиме Leanback.

Микротестирование

  • Функции
    • Профилирование было перенесено на отдельный этап после других показателей, поэтому один запуск теста может отображать как точное время, так и результаты профилирования.
  • Экспериментальные API
    • Добавлен экспериментальный API MicrobenchmarkConfig для определения специальных показателей и настройки трассировки и профилирования. Можно использовать для записи трассировок методов или точек трассировки (но помните о накладных расходах на трассировку).
    • Добавлены экспериментальные API для управления BenchmarkState отдельно от BenchmarkRule без JUnit.
    • Добавлена экспериментальная запись PerfettoTrace, позволяющая записывать трассировки Perfetto с пользовательской конфигурацией отдельно от API для тестирования производительности.
  • Исправления
    • Исправлена ошибка, из-за которой в выводе теста производительности Android Studio отсутствовали начальные пробелы.
    • Исправлена проблема, из-за которой предупреждения не печатались в выходных данных контрольных показателей Android Studio.
    • Исправлен сбой SampledProfiling на устройствах с Android 13 (API уровня 33) и более поздними версиями.
    • Значительно улучшена производительность dryRunMode за счет пропуска IsolationActivity и трассировки Perfetto (в режиме пробного выполнения на старых версиях ОС скорость увеличилась до 10 раз).

Версия 1.2.0-rc02

6 октября 2023 г.

Выход androidx.benchmark:benchmark-*:1.2.0-rc02. Версия 1.2.0-rc02 содержит следующие коммиты:

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

  • Исправлена ошибка, из-за которой выходные данные файла контрольных показателей нарушали копирование файлов плагинов BaselineProfile. Файлы были созданы и скопированы с устройства, но переименованы так, что плагин Gradle не мог их обнаружить. I8dbcc, b/303034735, b/296453339
  • Уточнены сообщения об ошибках загрузки tracing-perfetto при внедрении из модуля макротестирования в целевое приложение.

Версия 1.2.0-rc01

20 сентября 2023 г.

Выход сингла "androidx.benchmark:benchmark-*:1.2.0-rc01". Версия 1.2.0-rc01 содержит эти коммиты.

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

  • Теперь при сбое инициализации трассировки Perfetto SDK в Benchmark выдается исключение с инструкциями по устранению проблемы. (I6c878, b/286228781)
  • Исправлен сбой из-за нехватки памяти при преобразовании трассировки метода ART в формат Perfetto. (I106bd, b/296905344)
  • (Macrobenchmark) Уточнено название трассировки метода при наличии ссылки в выходных данных теста Studio. Исправлены названия файлов трассировки метода, чтобы они были уникальными на устройстве/хосте и не перезаписывались при запуске нескольких тестов производительности. (I08e65, b/285912360)
  • Устройство должно быть активным при создании базового профиля. (I503fc)

Версия 1.2.0-beta05

30 августа 2023 г.

Выход сингла "androidx.benchmark:benchmark-*:1.2.0-beta05". Версия 1.2.0-beta05 содержит эти коммиты.

Новые функции

  • Плагин Baseline Profile Gradle теперь поддерживает плагин Android Gradle 8.3. (aosp/2715214)

Версия 1.2.0-beta04

23 августа 2023 г.

Выход сингла "androidx.benchmark:benchmark-*:1.2.0-beta04". Версия 1.2.0-beta04 содержит следующие коммиты:

Новые функции

  • Плагин Gradle для базовых профилей теперь поддерживает плагин Android Gradle 8.3. (aosp/2715214)

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

  • Исправлены ошибки при записи, перемещении и извлечении файлов (особенно из параметризованных тестов) за счет дополнительной очистки названий выходных файлов, в которых не должно быть символов "=" и ":". (I759d8)

Версия 1.2.0-beta03

9 августа 2023 г.

Выход сингла "androidx.benchmark:benchmark-*:1.2.0-beta03". Версия 1.2.0-beta03 содержит следующие коммиты:

Изменения в API

  • Добавлен аргумент для фильтрации TraceSectionMetric только по целевому пакету, включен по умолчанию (Ia219b, b/292208786).

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

  • Аргумент инструментирования fullTracing.enable переименован в perfettoSdkTracing.enable для согласованности с названием артефакта и другими ссылками. fullTracing.enable будет работать как резервный вариант. (I7cc00)
  • Внутренние точки трассировки библиотеки Benchmark (включая трассировку циклов и фаз микротестов) теперь будут отображаться в средстве просмотра трассировки системы Android Studio и вкладываться в правильный процесс в Perfetto. (I6b2e7, b/293510459)
  • Удалена ошибка NOT-PROFILEABLE в Macrobenchmark на устройствах с API 31 и более поздних версий. Проверка profileable пропускается на устройствах с настроенным root-доступом и сборками eng/userdebug. (I2abac, b/291722507)
  • При использовании оптимизации макета DEX правила профиля запуска теперь также считаются правилами профиля базовой конфигурации. (aosp/2684246, b/293889189)

Версия 1.2.0-beta02

26 июля 2023 г.

Выход сингла "androidx.benchmark:benchmark-*:1.2.0-beta02". Версия 1.2.0-beta02 содержит следующие коммиты:

Изменения в API

  • Добавлены экспериментальные API для специальных показателей и конфигурации микротестов (например, профилировщика и трассировки). (I86101, b/291820856)

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

  • Сообщение об ошибке в макротесте, когда ОС неправильно настроена для трассировки, как было недавно исправлено в эмуляторах API 26/28 ARM64. (I0a328, b/282191686)
  • Добавлена информация о сбое сброса компиляции, чтобы предложить обновить эмулятор, поскольку в некоторых эмуляторах эта проблема недавно была исправлена. (I8c815, b/282191686)
  • Сделайте androidx.test.uiautomator:uiautomator:2.2.0 зависимостью api вместо implementation. (I1981e)

Версия 1.2.0-beta01

18 июля 2023 г.

Выход сингла "androidx.benchmark:benchmark-*:1.2.0-beta01". Версия 1.2.0-beta01 содержит эти коммиты.

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

  • Исправлена ошибка, из-за которой предупреждения иногда не отображались в выходных данных Benchmark в Studio. Также устранены проблемы с начальными пробелами в выходных данных Benchmark, которые не отображались в Studio (Ia61d0, b/227205461, b/286306579, b/285912360).
  • Исправлен комментарий для FrameTimingMetric. Дополнительный показатель называется frameDurationCpuMs. (Ib097f, b/288830934).

Версия 1.2.0-alpha16

21 июня 2023 г.

Выход сингла "androidx.benchmark:benchmark-*:1.2.0-alpha16". Версия 1.2.0-alpha16 содержит эти коммиты.

Изменения в API

  • BaselineProfileRule.collectBaselineProfile() API теперь называется BaselineProfileRule.collect(). (I4b665)

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

  • Поддержка Macrobenchmark для androidx.benchmark.profiling.mode = MethodTracing. (I7ad37, b/285912360)
  • Профилирование микротестов перенесено на отдельный этап, поэтому оно происходит после измерения, а не вместо него. MethodTracing теперь также включаются в захваченную трассировку Perfetto, если они присутствуют. (I9f657, b/285014599)
  • Добавьте отслеживание количества в TraceSectionMetric с помощью Mode.Sum. (Ic121a, b/264398606)

Версия 1.2.0-alpha15

7 июня 2023 г.

Выход androidx.benchmark:benchmark-*:1.2.0-alpha15. Версия 1.2.0-alpha15 содержит эти коммиты.

Новые функции

  • Добавлен экспериментальный тег MemoryUsageMetric для отслеживания использования памяти целевым приложением. (I56453, b/133147125, b/281749311)
  • Добавлена поддержка полностью настраиваемых конфигураций Perfetto с помощью PerfettoTrace.record (If9d75, b/280460183).
  • Добавлено свойство, позволяющее пропустить создание профиля базовой конфигурации. Использование: ./gradlew assemble -Pandroidx.baselineprofile.skipgeneration. (I37fda, b/283447020)

Изменения в API

  • API collectBaselineProfile всегда создает стабильные базовые профили. API collectStableBaselineProfile больше не поддерживается. Вместо него следует использовать collectBaselineProfile. (I17262, b/281078707)
  • Аргумент filterPredicate метода BaselineProfileRule теперь не может быть нулевым. Для него задано эквивалентное значение по умолчанию, чтобы в документации было понятнее, как работает фильтр по умолчанию. (I3816e)

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

  • Отключите IsolationActivity и трассировку Perfetto в dryRunMode, чтобы значительно повысить производительность, поскольку они занимают большую часть времени выполнения. (Ie4f7d)
  • Поддержка выборки стека вызовов в Macrobenchmark с использованием аргументов инструментального теста androidx.benchmark.profiling.mode=StackSampling и androidx.benchmark.profiling.sampleFrequency. (I1d13b, b/282188489)
  • Исправлен сбой при перетаскивании шейдеров в Android U (API 34), а также в эмуляторах. (I031ca, b/274314544)

Версия 1.2.0-alpha14

3 мая 2023 г.

Выход сингла "androidx.benchmark:benchmark-*:1.2.0-alpha14". Версия 1.2.0-alpha14 содержит эти коммиты.

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

  • Исправлена ошибка, из-за которой FrameTimingMetric игнорировал фреймы с несогласованными идентификаторами. Из-за этого некоторые анимации в последних версиях платформы (API 31+) игнорировали множество кадров, пока анимировался RenderThread (например, во время пульсации). (I747d2, b/279088460)
  • Исправлена обработка трассировок размером более 64 МБ. (Ief831, b/269949822)
  • Исправлена ошибка, из-за которой не удавалось создать базовый профиль на Android U из-за другого результата команды pm dump-profiles. (Id1392, b/277645214)
  • Исправлен скрипт блокировки тактовой частоты графического процессора, чтобы строки сравнивались корректно (I53e54, b/213935715).

Версия 1.2.0-alpha13

5 апреля 2023 г.

Выход сингла "androidx.benchmark:benchmark-*:1.2.0-alpha13". Версия 1.2.0-alpha13 содержит эти коммиты.

Изменения в API

  • Добавлен параметр типа профиля при создании профилей базовой конфигурации для поддержки предстоящей функции профиля запуска (Ie20d7, b/275093123).
  • Добавлен новый экспериментальный API TraceMetric для определения полностью пользовательских показателей на основе содержимого трассировки Perfetto. (I4ce31, b/219851406)
  • Добавьте экспериментальный показатель, чтобы определить количество ошибок отсутствия страницы во время тестирования. (I48db0)

Версия 1.2.0-alpha12

22 марта 2023 г.

Выход androidx.benchmark:benchmark-*:1.2.0-alpha12. Версия 1.2.0-alpha12 содержит эти коммиты.

Новые функции

  • Новый плагин Gradle для базового профиля выпущен в альфа-версии. Он упрощает создание базового профиля и рабочий процесс разработчика.

Изменения в API

  • Удалена поддержка трассировки Perfetto в API 21 и 22, включая микротесты и экспериментальные API PerfettoTrace. До этой версии подключение UiAutomation на некоторых устройствах было нестабильным. (I78e8c)
  • Добавлен общедоступный экспериментальный API для PerfettoTraceProcessor, позволяющий анализировать контент трассировки. Это шаг к созданию полностью настраиваемых показателей на основе данных трассировки Perfetto. (I2659e, b/219851406)

Версия 1.2.0-alpha11

8 марта 2023 г.

Выход androidx.benchmark:benchmark-*:1.2.0-alpha11. Версия 1.2.0-alpha11 содержит эти коммиты.

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

  • Исправлены сбои в MacrobenchmarkRule и BaselineProfileRule при переустановке или извлечении профилей из набора App Bundle с несколькими APK-файлами. (I0d8c8, b/270587281)

Версия 1.2.0-alpha10

22 февраля 2023 г.

Выход сингла "androidx.benchmark:benchmark-*:1.2.0-alpha10". Версия 1.2.0-alpha10 содержит следующие коммиты:

Новые функции

  • В Android 14 и более поздних версиях Macrobenchmark больше не переустанавливает целевые приложения, чтобы сбросить состояние компиляции, благодаря новой функции платформы. Раньше для этого требовалось устройство с настроенным root-доступом или удаление всех данных о состоянии приложения (например, о входе пользователя) перед каждым запуском теста. (I9b08c, b/249143766)

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

  • Исправлена ошибка, из-за которой приложение DryRunMode аварийно завершало работу, если профиль был пустым, поскольку компиляция пропускалась. Вместо этого выполняется одна итерация и извлекается профиль, чтобы гарантировать, что что-то будет записано. (I2f05d, b/266403227)
  • Исправлен сбой PowerMetric при проверке наличия powerstats на старых уровнях API. (5faaf9, b/268253898)

Версия 1.2.0-alpha09

11 января 2023 г.

Выход androidx.benchmark:benchmark-*:1.2.0-alpha09. Версия 1.2.0-alpha09 содержит следующие коммиты:

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

  • Включена передача аргумента None в androidx.benchmark.enabledRules, чтобы отключить все тесты и создание профиля базовой конфигурации. (I3d7fd, b/258671856)
  • Исправлена ошибка, из-за которой в модулях приложений (например, в тестовых APK-файлах без самоинструментирования) не фиксировались данные PerfettoTrace (I12cfc).
  • Исправлен порядок аргументов adb pull для профиля базовой конфигурации в выходных данных Android Studio (I958d1, b/261781624).
  • Эмулятор Arm API 33 теперь правильно распознается при попытке запустить макротест и корректно выводит предупреждение. (69133b,b/262209591)
  • Пропуск проверки уровня заряда батареи на устройствах без батареи в Macrobenchmark (fe4114, b/232448937).

Версия 1.2.0-alpha08

7 декабря 2022 г.

Выход сингла "androidx.benchmark:benchmark-*:1.2.0-alpha08". Версия 1.2.0-alpha08 содержит следующие коммиты:

Изменения в API

  • Добавлены экспериментальные новые API PerfettoTrace.record {} и PerfettoTraceRule для сбора трассировок Perfetto (также известных как системные трассировки) в рамках теста, чтобы изучить поведение и производительность теста. (I3ba16)
  • Теперь BaselineProfileRule принимает предикат фильтра вместо списка префиксов пакетов. Это позволяет полностью контролировать фильтрацию. (I93240)
  • Добавлен экспериментальный API BaselineProfileRule.collectStableBaselineProfile, который ожидает, пока базовый профиль не станет стабильным в течение N итераций. (I923f3)
  • Добавлена возможность указывать префикс названия выходного файла при создании профилей базовой конфигурации с помощью BaselineProfileRule. (I7b59f, b/260318655)

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

  • Повышена безопасность записи выходных файлов, что должно предотвратить случаи, когда выходные файлы не записываются или не добавляются без уведомления, особенно в API 21/22. (If8c44, b/227510293)
  • Исправьте вывод трассировки simpleperf, чтобы создать и разместить файл правильно. Это также должно устранить проблемы, из-за которых Gradle не удается получить файл. (I12a1c, b/259424099)
  • Улучшено сообщение об ошибке, которое выводится, когда версия profileinstaller слишком старая. Теперь вместо сообщения о том, что измерение профилей базовой конфигурации не поддерживается, вы увидите предложение обновить profileinstaller до версии 1.2.1. (Ia517f, b/253519888)
  • Исправлены некоторые ошибки командной строки, возникавшие при выводе сообщения об ошибке Print needed API <=23, в том числе ошибки настройки двоичного файла для записи Perfetto и ошибки записи трассировки (Ib6b87, b/258863685).
  • Автоматически сортировать сгенерированные правила профиля, чтобы минимизировать количество изменений по мере их изменения с течением времени (при проверке правил профиля в системе контроля версий). (Ie2509)
  • Исправлен сбой на устройствах без root-доступа с версией ОС ниже Android 13 (API 33) с сообщением Expected no stderr from echo 3 > /proc/sys/vm/drop_caches (I6c245, b/259508183)

Известные проблемы - MacrobenchmarkScope.dropShaderCache() может аварийно завершать работу из-за отсутствия реестра трансляций в манифесте profileinstaller, который ещё не выпущен. I5c728, b/258619948 Чтобы обойти эту проблему в profileinstaller:1.3.0-alpha02, добавьте в файл AndroidManifest.xml приложения (не теста производительности) следующий код:

  <!-- workaround bug in profileinstaller 1.3.0-alpha02, remove when updating to alpha03+ -->
  <receiver
    android:name="androidx.profileinstaller.ProfileInstallReceiver"
    android:permission="android.permission.DUMP"
    android:exported="true">
    <intent-filter>
        <action android:name="androidx.profileinstaller.action.BENCHMARK_OPERATION" />
    </intent-filter>
  </receiver>

Версия 1.2.0-alpha07

9 ноября 2022 г.

Выход сингла "androidx.benchmark:benchmark-*:1.2.0-alpha07". Версия 1.2.0-alpha07 содержит эти коммиты.

Изменения в API

  • Добавлен API PowerMetric для измерения энергии и мощности в макротестах. (Ife601, b/220183779)
  • Исправлена ошибка, из-за которой параметр MacrobenchmarkScope.dropShaderCache() не удалял кеш шейдеров. Это позволяет удалить из результатов тестирования StartupMode.COLD примерно 20 мс шума, поскольку теперь шейдеры очищаются при каждой итерации. Ранее при компиляции Partial с использованием итераций прогрева сообщались неверные данные о скорости, поскольку кеширование шейдеров с большей вероятностью происходило во время прогрева. Для этого требуется устройство с настроенным root-доступом или использование profileinstaller:1.3.0-alpha02 в целевом приложении. Изменения в API библиотеки ProfileInstaller описаны на странице ProfileInstaller 1.30-alpha02. (Ia5171, b/231455742)
  • Добавлен метод TraceSectionMode("label", Mode.Sum), позволяющий измерять общее время, затраченное на несколько разделов трассировки с одним и тем же ярлыком. Например, TraceSectionMetric("inflate", Mode.Sum) сообщит показатель inflateMs, который отражает общее время, затраченное на инфляцию в макротесте. Также удалено требование к API 29, поскольку TraceSectionMetric работает с androidx.tracing.Trace на более низких уровнях API с использованием forceEnableAppTracing в целевом приложении. (Id7b68, b/231455742)

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

  • Повышена безопасность всех внутренних команд оболочки за счет проверки всех выходных данных и ошибок. (I5984d, b/255402908, b/253094958)
  • Укажите устройство в команде базового профиля adb pull, чтобы команду pull можно было просто скопировать, если подключено несколько устройств (до одного эмулятора) (I6ac6c, b/223359380).
  • Добавлена ошибка, если APK-файл макротеста не настроен как самоинструментируемый. Эта ошибка не позволяет выполнять макротестирование в процессе целевого приложения. В процессе выполнения макротеста не удастся скомпилировать, завершить или запустить приложение с холодного старта, а также управлять его разрешениями (I4279b).
  • Исправлена проблема в measureRepeated(), из-за которой StartupMode.COLD не завершал целевой процесс после setupBlock. Теперь setupBlock взаимодействие с приложением не приведет к тому, что процесс приложения останется запущенным, и к недействительному измерению холодного запуска. (I8ebb7)

Версия 1.2.0-alpha06

24 октября 2022 г.

Выход сингла "androidx.benchmark:benchmark-*:1.2.0-alpha06". Версия 1.2.0-alpha06 содержит следующие коммиты:

Изменения в API

  • BaselineProfileRule больше не требует root-доступа на устройствах с Android 13 (API 33) и не является экспериментальной функцией. (Ie0a7d, b/250083467, b/253094958)
    • Это изменение также исправляет способ сброса профилей из приложения на диск на устройствах без root-доступа, но требует обновления зависимости profileinstaller целевого приложения.
    • Чтобы использовать BaselineProfileRule или CompilationMode.Partial(warmupIterations) на устройстве без root-доступа, вам также нужно обновить целевое приложение, чтобы использовать androidx.profileinstaller.profileinstaller:1.3.0-alpha01. Это позволяет правильно записать профиль на диск, чтобы его можно было скомпилировать или извлечь.

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

  • Исправлена ошибка SampledProfiling на устройствах с API 33 и более поздних версий. (I40743, b/236109374)

Версия 1.2.0-alpha05

5 октября 2022 г.

Выход сингла "androidx.benchmark:benchmark-*:1.2.0-alpha05". Версия 1.2.0-alpha05 содержит эти коммиты.

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

  • Исправлена разбивка кадров в средстве просмотра трассировки системы Studio для трассировок, полученных в результате тестирования производительности (I3f3ae, b/239677443).
  • Исправлена ошибка FrameTimingMetric, из-за которой в списке FrameOverrun указывалось, что для работы требуется API 31, а не 29 (I716dd, b/220702554).
  • Установите итерацию в BaselineProfileRule и явно сообщите об ошибке, если целевой пакет не установлен (это уже сделано для MacrobenchmarkRule). (Ic09a3, b/227991471)

Версия 1.2.0-alpha04

21 сентября 2022 г.

Выход androidx.benchmark:benchmark-*:1.2.0-alpha04. Версия 1.2.0-alpha04 содержит следующие коммиты:

Новые функции

  • Добавлена поддержка аргумента инструментирования dryRunMode.enable для макротестов (уже доступно в микротестах), чтобы ускорить локальную разработку и проверку автоматизации в приложениях (например, при предварительной отправке). Это позволяет задать количество итераций равным 1, пропустить компиляцию, подавить все ошибки конфигурации и отключить вывод файла .json для измерений. (Ib51b4, b/175149857)

    В командной строке Gradle:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.dryRunMode.enable=true
    

    В файле build.gradle:

    android {
        defaultConfig {
            testInstrumentationRunnerArgument 'androidx.benchmark.dryRunMode.enable', 'true'
        }
    }
    

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

  • Исправлена ошибка, из-за которой для отслеживания действий в StartupTimingMetric требовалось запускать их через MacrobenchmarkScope.startActivityAndWait(). Это значит, что показатель может учитывать запуски, например, из уведомлений, Context.startActivity(), навигации на основе действий в приложении или команд оболочки. (Ia2de6, b/245414235)
  • Исправлена ошибка, из-за которой startActivityAndWait не удавалось дождаться завершения запуска на эмуляторах из-за слишком строгих требований к обнаружению кадров. (Ibe2c6, b/244594339, b/228946895)

Версия 1.2.0-alpha03

7 сентября 2022 г.

Выход androidx.benchmark:benchmark-*:1.2.0-alpha03. Версия 1.2.0-alpha03 содержит эти коммиты.

Новые функции

  • Добавлены экспериментальные API для использования BenchmarkState независимо от BenchmarkRule / JUnit4. (Id478f, b/228489614)

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

  • Добавлено резервное объявление Leanback для startActivityAndWait. (01ed77, b/242899915)

Версия 1.2.0-alpha02

24 августа 2022 г.

Выход сингла "androidx.benchmark:benchmark-*:1.2.0-alpha02". Версия 1.2.0-alpha02 содержит следующие коммиты:

Изменения в API

  • По умолчанию используется am force stop для MacrobenchmarkScope.killProcess(), даже если есть root-доступ, за исключением случаев, когда создается профиль базовой конфигурации. Это значение можно переопределить с помощью необязательного логического аргумента. (02cce9, b/241214097)

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

  • Поддержка создания профилей базовой конфигурации для системных приложений. (I900b8, b/241214097)
  • Добавлена поддержка проверки показателей энергопотребления ODPM на устройствах без root-доступа. (a38c78, b/229623230)

Версия 1.2.0-alpha01

27 июля 2022 г.

Выход androidx.benchmark:benchmark-*:1.2.0-alpha01. Версия 1.2.0-alpha01 содержит следующие коммиты:

Новые функции

  • Новый компонент tracing-perfetto-common, позволяющий инструментам включать трассировку Perfetto SDK в приложении, которое ее поддерживает (I2cc7f).
  • Добавлен аргумент androidx.benchmark.enabledRules для фильтрации запусков макротестов по тестам или по созданию базового профиля. Передайте Macrobenchmark или BaselineProfile, чтобы запустить только один тип теста, например при создании BaselineProfiles в эмуляторе. Также поддерживается список, разделенный запятыми. (I756b7, b/230371561)

    Например, в файле build.gradle для макротеста:

    android {
        defaultConfig {
            testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile'
        }
    }
    

    или в командной строке Gradle:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
    

Изменения в API

  • Добавлен новый PowerMetric для измерения энергопотребления и мощности в тестах производительности. (I9f39b, b/220183779)
  • Добавлен новый режим компиляции CompilationMode.Ignore, позволяющий пропускать сброс профиля и компиляцию. (Ibbcf8, b/230453509)
  • В BaselineProfileRule#collectBaselineProfile добавлен новый параметр, позволяющий фильтровать выходной файл по названиям пакетов (If7338, b/220146561).
  • Разработчик может разрядить устройство, чтобы измерить энергопотребление. (I6a6cb)
  • Добавлена возможность очищать кеш шейдеров в MacrobenchmarkScope. (I32122)
  • Позволяет разработчику настроить отображение типа показателя и детализировать нужные категории подсистем. (I810c9)
  • Ранее при запуске на неподдерживаемом устройстве в бенчмарке возникала ошибка UnsupportedOperationException. Теперь исключение UOE возникает, только если показатель используется на неподдерживаемом устройстве (например, PowerMetric.configure). (I5cf20, b/227229375)
  • Добавлены TotalPowerMetric и TotalEnergyMetric для измерения общей мощности и энергии в каждой категории системы в макротестах. (I3b26b, b/224557371)

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

  • Исправлена проблема, из-за которой скомпилированные методы неправильно сбрасывались между каждым макротестом на устройствах без root-доступа. К сожалению, для этого требуется переустанавливать APK-файл на каждой итерации, что приведет к очистке данных приложения для каждого макротеста. (I31c74, b/230665435)
  • Исправлен сбой при записи трассировки на устройствах с API 21/22 (If7fd6, b/227509388, b/227510293, b/227512788).
  • Переработана система обнаружения завершения запуска активности, чтобы исправить исключение "Не удалось прочитать ни одного показателя" в макротестах запуска. (Ia517c)

Версия 1.1.1

Версия 1.1.1

9 ноября 2022 г.

Выход androidx.benchmark:benchmark-*:1.1.1. Версия 1.1.1 содержит эти коммиты.

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

  • Исправлена ошибка android.system.ErrnoException: open failed: EACCES, которая возникала на некоторых устройствах с Android 11 (API 30) и более поздних версий. Это выборочно скопированное исправление из 1.2.0-alpha01. (aosp/2072249)

Версия 1.1.0

Версия 1.1.0

15 июня 2022 г.

Выход сингла "androidx.benchmark:benchmark-*:1.1.0". Версия 1.1.0 содержит эти коммиты.

  • Эта версия идентична androidx.benchmark:benchmark-*:1.1.0-rc03.

Важные изменения с версии 1.0.0

Версия 1.1.0-rc03

1 июня 2022 г.

Выход androidx.benchmark:benchmark-*:1.1.0-rc03. Версия 1.1.0-rc03 содержит следующие коммиты:

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

  • Не переустанавливайте целевой пакет на каждой итерации теста. ( aosp/​​2093027, b/231976084)

  • Удалить задержку (300ms) из действия "pressHome()". (aosp/2086030, b/231322975)

  • Улучшена скорость итерации Macrobenchmark за счет оптимизации команд оболочки, используемых в фоновом режиме. (aosp/2086023, b/231323582)

  • Поддержка управляемых устройств Gradle при создании базовых профилей с помощью макротестов. (aosp/2062228, b/228926421)

Версия 1.1.0-rc02

11 мая 2022 г.

Выход сингла "androidx.benchmark:benchmark-*:1.1.0-rc02". Версия 1.1.0-rc02 содержит эти коммиты.

  • Обратите внимание, что в этом выпуске изменилось поведение: теперь приложения полностью переустанавливаются между каждым тестом, чтобы обеспечить точность измерений.

Исправление ошибок и изменения в работе

  • Исправлена ошибка, из-за которой компиляция приложения неправильно сбрасывалась между макротестами и не сбрасывалась на устройствах без root-доступа. Это решает проблему, когда при проведении нескольких тестов CompilationMode почти не влияет на результаты. Чтобы обойти эту проблему, целевое приложение теперь полностью переустанавливается при каждом методе тестирования, что позволяет очищать данные приложения между каждым макротестом. (I31c74, b/230665435)

  • Поскольку это мешает приложениям настраивать состояние перед тестированием, теперь можно пропустить компиляцию или переустановку, чтобы обойти эту проблему. Например, вы можете полностью скомпилировать целевой объект с помощью команды оболочки cmd package compile -f -m speed <package>, а затем пропустить этап компиляции в Macrobenchmark.

    Например, в файле build.gradle для макротеста:

    android {
        defaultConfig {
            testInstrumentationRunnerArgument 'androidx.benchmark.compilation.enabled, 'false'
        }
    }
    

    Или в командной строке Gradle:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.compilation.enabled=false
    
  • Добавлена возможность использовать один модуль для макротестов и тестов, генерирующих профили базовой конфигурации, с помощью аргумента инструментирования androidx.benchmark.enabledRules. Передайте Macrobenchmark или BaselineProfile, чтобы запустить только один тип теста, например при создании BaselineProfiles в эмуляторе. (I756b7, b/230371561)

    Например, в файле build.gradle для макротеста:

    android {
        defaultConfig {
            testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile'
        }
    }
    

    или в командной строке Gradle:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
    

Версия 1.1.0-rc01

20 апреля 2022 г.

Выход сингла "androidx.benchmark:benchmark-*:1.1.0-rc01". Версия 1.1.0-rc01 содержит следующие коммиты:

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

  • Ссылки на выходные данные базового профиля в Android Studio теперь используют уникальное название файла. Таким образом, в выходных данных всегда будут отражены последние результаты использования BaselineProfileRule. ( aosp/2057008, b/228203086 )

Версия 1.1.0-beta06

6 апреля 2022 г.

Выход androidx.benchmark:benchmark-*:1.1.0-beta06. Версия 1.1.0-beta06 содержит эти коммиты.

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

  • Исправлена ошибка записи трассировки на устройствах с API 21/22 (If7fd6, b/227509388).
  • Переработана система обнаружения завершения запуска активности, чтобы исправить исключение "Не удалось прочитать ни одного показателя" в макротестах запуска. (Ia517c)
  • Исправлены показатели запуска для Macrobenchmark при использовании CompilationMode.None(). До этого изменения CompilationMode.Partial() казался медленнее, чем Compilation.None(). (611ac9).

Версия 1.1.0-beta05

23 марта 2022 г.

Выход androidx.benchmark:benchmark-*:1.1.0-beta05. Версия 1.1.0-beta05 содержит эти коммиты.

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

  • Принудительно останавливать пакет после пропуска установки профиля при использовании CompilationMode.None. (aosp/1991373)
  • Исправлена ошибка, из-за которой Macrobenchmarks не может собирать показатели запуска при использовании StartupMode.COLD. (aosp/2012227, b/218668335)

Версия 1.1.0-beta04

23 февраля 2022 г.

Выход сингла "androidx.benchmark:benchmark-*:1.1.0-beta04". Версия 1.1.0-beta04 содержит следующие коммиты:

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

  • Исправлена ошибка, из-за которой в Android 10 и NoSuchElementException не отображались показатели, поскольку названия процессов неверно записывались в трассировках. (Ib4c17, b/218668335)

  • Используйте PowerManager для обнаружения троттлинга из-за перегрева на устройствах с Android Q (API 29) и более поздних версий. Это значительно снижает частоту ложных срабатываний при обнаружении теплового троттлинга (повторная попытка теста после 90-секундного охлаждения) и значительно ускоряет тесты в пользовательских сборках. Кроме того, он позволяет обнаруживать троттлинг, даже если тактовая частота заблокирована (если она слишком высока для физической среды устройства). (I9c027, b/217497678, b/131755853)

  • Профилирование выборки simpleperf теперь фильтруется только по потоку measureRepeated, чтобы упростить проверку (Ic3e12, b/217501939).

  • Поддержка показателей из именованных подпроцессов интерфейса в многопроцессных приложениях (Ice6c0, b/215988434)

  • Добавлена фильтрация правил профиля базовой конфигурации для Android 9 (SDK 28). aosp/1980331 b/216508418

  • Пропустить установку профиля при использовании Compilation.None(). Кроме того, мы добавили предупреждения, которые будут показываться, если приложение использует более старую версию androidx.profileinstaller и плагина Android Gradle. aosp/1977029

Версия 1.1.0-beta03

9 февраля 2022 г.

Выход androidx.benchmark:benchmark-*:1.1.0-beta03. Версия 1.1.0-beta03 содержит эти коммиты.

Изменения в API

  • В библиотеку макротестов добавлен флаг AudioUnderrunMetric, позволяющий обнаруживать недозагрузку аудио (Ib5972).
  • BaselineProfileRule больше не принимает блокировку setup, поскольку она выполняла те же функции, что и profileBlock. (Ic7dfe, b/215536447)

    Пример:

    @Test
    fun collectBaselineProfile() {
        baselineRule.collectBaselineProfile(
            packageName = PACKAGE_NAME,
            setupBlock = {
                startActivityAndWait()
            },
            profileBlock = {
                // ...
            }
        )
    }
    
    @Test
    fun collectBaselineProfile() {
        baselineRule.collectBaselineProfile(
            packageName = PACKAGE_NAME,
            profileBlock = {
                startActivityAndWait()
                // ...
            }
        )
    }
    

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

  • Исправлена ошибка, из-за которой трассировки профилировщика microbench не обновлялись при последующих запусках, если они были связаны в выходных данных Studio (I5ae4d, b/214917025).
  • Запрет команд оболочки компиляции в API 23 (Ice380)
  • Переименованы FrameCpuTime -> FrameDurationCpu, FrameUiTime -> FrameDurationUi, чтобы уточнить, что это длительность, а не временные метки, и сопоставить префиксы. (I0eba3, b/216337830)

Версия 1.1.0-beta02

26 января 2022 г.

Выход сингла "androidx.benchmark:benchmark-*:1.1.0-beta02". Версия 1.1.0-beta02 содержит эти коммиты.

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

  • Результаты профилирования Microbenchmark Stack Sampling и Method Tracing теперь связаны с выходными данными Studio, как и другие результаты профилирования, и не подавляют показатель распределения. (Idcb65, b/214440748, b/214253245)
  • BaselineProfileRule теперь выводит команду adb pull в logcat и Studio для извлечения сгенерированного текстового файла BaselineProfile. (f08811)

Версия 1.1.0-beta01

12 января 2022 г.

Выход сингла "androidx.benchmark:benchmark-*:1.1.0-beta01". Версия 1.1.0-beta01 содержит следующие коммиты:

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

  • Исправлена ошибка, из-за которой игнорировался аргумент enable профилировщика. (I37373, b/210619998)
  • Удалена устаревшая функция CompliationModes (I98186, b/213467659)
  • Аргумент профиля базовой конфигурации CompilationMode.Partial заменен на перечисление во избежание неясности. (Id67ea)

Версия 1.1.0-alpha13

15 декабря 2021 г.

Выход сингла "androidx.benchmark:benchmark-*:1.1.0-alpha13". Версия 1.1.0-alpha13 содержит эти коммиты.

Изменения в API

  • Добавлена функция трассировки системы с низкими накладными расходами в выходные данные микротестов на устройствах Android Q (API 29 и выше). Обратите внимание, что в настоящее время она не захватывает пользовательскую трассировку (через API Jetpack android.os.Trace или androidx.tracing), чтобы не влиять на результаты. Эта трассировка может быть полезна для диагностики нестабильности, особенно если ее источники находятся за пределами контрольных показателей. (I298be, b/205636583, b/145598917)
  • Разделите CompilationModes на три класса: "Полное", "Отсутствует" и "Частичное". Ранее они назывались по-разному в зависимости от аргументов компиляции (которые мы теперь рассматриваем как детали реализации) и функций. Это позволяет лучше понять компромиссы, возможные комбинации и поведение на разных версиях платформы. (I3d7bf, b/207132597)
  • Теперь настройка и отслеживание всегда идут парами и в определенном порядке. Теперь вы можете запрашивать название пакета и итерацию (хотя в некоторых сценариях прогрева итерация может быть равна null). (Id3b68, b/208357448, b/208369635)

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

  • Исправлена ошибка, из-за которой CompilationMode.Speed неправильно обрабатывался как None (I01137).

Версия 1.1.0-alpha12

17 ноября 2021 г.

Выход androidx.benchmark:benchmark-*:1.1.0-alpha12. Версия 1.1.0-alpha12 содержит эти коммиты.

Новые функции

  • Добавлен экспериментальный показатель TraceSectionMetric для пользовательских измерений времени на основе трассировки. (I99db1, b/204572664)

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

  • Каждая итерация должна включать устройство, чтобы можно было протестировать интерфейс. Экран блокировки должен быть отключен. (Ibfa28, b/180963442)
  • Исправлены многочисленные сбои в режиме профилирования StackSampling на эмуляторах и устройствах без root-доступа (Icdbda, b/202719335).
  • Удалена пауза в 0,5 секунды в конце каждой итерации.Если вы заметите, что из-за этого изменения отсутствуют какие-либо показатели, сообщите об ошибке. (Iff6aa)
  • Снижена вероятность потери данных и уменьшен объем памяти, используемой для трассировки (Id2544, b/199324831, b/204448861).
  • Размер трассировки уменьшен примерно на 40% за счет перехода на компактный формат хранения sched. (Id5fb6, b/199324831)
  • Обновлены реализации показателей запуска, чтобы они всегда заканчивались в конце потока отрисовки. Это позволит обеспечить большую согласованность между версиями платформы и более точное сопоставление с показателями в приложении. (Ic6b55)

Версия 1.1.0-alpha11

3 ноября 2021 г.

Выход сингла "androidx.benchmark:benchmark-*:1.1.0-alpha11". Версия 1.1.0-alpha11 содержит эти коммиты.

Изменения в API

  • В Macrobenchmark теперь используется minSdkVersion версии 23. (If2655)
  • Добавлена новая экспериментальная функция BaselineProfileRule, которая может создавать базовые профили для ключевых действий пользователей в приложении. Подробная документация будет доступна позже. (Ibbefa, b/203692160)
  • Удален вариант интерфейса measureRepeated, который был добавлен для вызывающих объектов Java, так как он вызывал неоднозначность при завершении/разрешении метода. Вызывающим объектам Java снова потребуется возвращать Unit.Instance из measureRepeated. Если это неудобно, сообщите об ошибке, и мы сможем вернуться к этому в будущей версии. (Ifb23e, b/204331495)

Версия 1.1.0-alpha10

27 октября 2021 г.

Выход сингла "androidx.benchmark:benchmark-*:1.1.0-alpha10". Версия 1.1.0-alpha10 содержит эти коммиты.

Изменения в API

  • Бэкпортирован класс StartupTimingMetric для работы с API 23. Новая реализация также лучше обрабатывает reportFullyDrawn(), чтобы дождаться отрисовки соответствующего контента. (If3ac9, b/183129298)
  • Добавлены JvmOverloads в несколько методов MacrobenchmarkScope для вызывающих объектов Java. (I644fe, b/184546459)
  • Предоставьте альтернативную функцию MacrobenchmarkRule.measureRepeated, которая использует Consumer<MacrobenchmarkScope> для идиоматического использования в языке Java. (If74ab, b/184546459)

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

  • Исправлена ошибка, из-за которой трассировки начинались слишком поздно и отсутствовали данные показателей. Это должно устранить исключения "Не удалось прочитать ни одного показателя во время тестирования", которые были вызваны самой библиотекой. (I6dfcb, b/193827052, b/200302931)
  • Показатель FrameNegativeSlack переименован в FrameOverrun, чтобы точнее отражать его значение – насколько кадр превысил свой временной бюджет. (I6c2aa, b/203008701)

Версия 1.1.0-alpha09

13 октября 2021 г.

Выход сингла "androidx.benchmark:benchmark-*:1.1.0-alpha09". Версия 1.1.0-alpha09 содержит эти коммиты.

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

  • Поддержка удаления кеша страниц ядра без прав root в API 31/S+, что повысит точность запусков StartupMode.COLD. (Iecfdb, b/200160030)

Версия 1.1.0-alpha08

29 сентября 2021 г.

Выход сингла "androidx.benchmark:benchmark-*:1.1.0-alpha08". Версия 1.1.0-alpha08 содержит эти коммиты.

Изменения в API

  • Включите макротесты прокрутки, чтобы они могли выполняться в API 23 (If39c2, b/183129298).
  • Добавлен новый тип показателя выборки в интерфейс и выходные данные JSON, ориентированный на процентили нескольких выборок за итерацию. (I56247, b/199940612)
  • Переключитесь на показатели с плавающей запятой во всех библиотеках тестов (усечены в интерфейсе Studio). (I69249, b/197008210)

Версия 1.1.0-alpha07

1 сентября 2021 г.

Выход сингла "androidx.benchmark:benchmark-*:1.1.0-alpha07". Версия 1.1.0-alpha07 содержит эти коммиты.

Изменения в API

  • Минимальный уровень API повышен до 21, чтобы отразить планируемый минимальный уровень API, который будет поддерживаться в будущем. Текущий минимальный поддерживаемый API по-прежнему передается через RequiredApi() и в настоящее время равен 29 (I440d6, b/183129298).

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

  • Исправлена ошибка ProfileInstaller, чтобы приложениям, использующим профили базовой конфигурации, было проще запускать MacroBenchmarks с помощью CompilationMode.BaselineProfile. (I42657, b/196074999). Примечание. Также требуется обновить androidx.profileinstaller:profileinstaller:1.1.0-alpha04 до этой или более поздней версии.
  • StartupMode.COLD + CompilationMode.None контрольных показателей стали более стабильными. (I770cd, b/196074999)

Версия 1.1.0-alpha06

18 августа 2021 г.

Выход сингла "androidx.benchmark:benchmark-*:1.1.0-alpha06". Версия 1.1.0-alpha06 содержит эти коммиты.

Изменения в API

  • Добавлен аргумент инструментирования androidx.benchmark.iterations, позволяющий вручную переопределять количество итераций при локальном тестировании или профилировании. (6188be, b/194137879)

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

  • Simpleperf теперь используется по умолчанию в качестве профилировщика выборки в API 29+. (Ic4b34, b/158303822)

Известные проблемы

  • CompilationMode.BaselineProfile ещё в разработке. Поэтому пока не используйте его для оценки качества профиля.

Версия 1.1.0-alpha05

4 августа 2021 г.

Выход сингла "androidx.benchmark:benchmark-*:1.1.0-alpha05". Версия 1.1.0-alpha05 содержит эти коммиты.

Версия 1.1.0-alpha04 была отменена до выпуска из-за периодических сбоев. b/193827052

Изменения в API

  • Функция startActivityAndWait теперь вызывает запуск через am start, что позволяет сократить время каждой итерации измерения примерно на пять секунд, но при этом больше не поддерживает объекты Parcelable для намерений. (I5a6f5, b/192009149)

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

  • Снизить агрессивность обнаружения троттлинга и пересчитать базовые показатели, если троттлинг обнаруживается часто. (I7327b)
  • Исправлена ошибка, из-за которой FrameTimingMetric не работал в бета-версии Android S (Ib60cc, b/193260119).
  • Используйте EmptyActivity, чтобы вывести целевое приложение из состояния принудительной остановки и улучшить поддержку CompilationMode.BaselineProfile. (Id7cac, b/192084204)
  • Расширение имени файла трассировки изменено на .perfetto-trace в соответствии со стандартом платформы. (I4c236, b/174663039)
  • Теперь StartupTimingMetric выводит показатель fullyDrawnMs, чтобы измерять время до полной отрисовки приложения. Чтобы определить этот показатель для своего приложения, вызовите Activity.reportFullyDrawn, когда начальный контент будет готов, например когда начальные элементы списка будут загружены из базы данных или сети. (Метод reportFullyDrawn доступен без проверки версии сборки в ComponentActivity). Обратите внимание, что тест должен выполняться достаточно долго, чтобы получить показатель (startActivityAndWait не ждет reportFullyDrawn). (If1141, b/179176560)
  • Снижена стоимость добавления метаданных пользовательского интерфейса в трассировки более чем на 50 мс (Ic8390, b/193923003).
  • Значительно увеличена частота опроса при остановке трассировки, что может сократить, например, время выполнения теста запуска на 30 % и более (Idfbc1, b/193723768).

Версия 1.1.0-alpha03

16 июня 2021 г.

Выход сингла "androidx.benchmark:benchmark-*:1.1.0-alpha03". Версия 1.1.0-alpha03 содержит эти коммиты.

Новые функции

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

  • Пример кода Gradle для подавления ошибок при тестировании производительности был обновлен. Теперь в нем используется API, который не является устаревшим, а также синтаксис, поддерживающий пользователей .gradle.kts.

    Пример:

    testInstrumentationRunnerArguments["androidx.benchmark.suppressErrors"] = "EMULATOR,LOW-BATTERY"
    

Версия 1.1.0-alpha02

18 мая 2021 г.

В версии Benchmark 1.1.0-alpha02 появился важный компонент – Macrobenchmark. Помимо benchmark, позволяющей измерять циклы ЦП, macrobenchmark позволяет измерять взаимодействия на уровне всего приложения, такие как запуск и прокрутка, и записывать трассировки. Подробнее читайте в документации по библиотеке.

Выход сингла "androidx.benchmark:benchmark-*:1.1.0-alpha02". Версия 1.1.0-alpha02 содержит эти коммиты.

Новые функции

Добавлены артефакты Macrobenchmark (androidx.benchmark:benchmark-macro-junit4 и androidx.benchmark:benchmark-macro).

  • Собирайте показатели производительности запуска, прокрутки и анимации из приложения локально или в CI.
  • Как записывать и анализировать трассировки в Android Studio

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

  • Устранена проблема с разрешениями оболочки для выходного каталога в Android 12. Примечание. Чтобы продолжить запись выходных файлов на затронутых устройствах, может потребоваться обновить плагин Android Gradle до версии 7.0.0 canary и Android Studio до версии Arctic Fox (2020.3.1). (Icb039)
  • Поддержка кеширования конфигурации в BenchmarkPlugin (6be1c1, b/159804788).
  • Упрощенный вывод файлов – включен по умолчанию в каталоге, который не требует requestLegacyExternalStorage=true (8b5a4d, b/172376362).
  • Исправлены предупреждения logcat при печати библиотеки о том, что не удается найти поток JIT на платформах, где он отсутствует. (I9cc63, b/161847393)
  • Исправлена ошибка, из-за которой максимальная частота устройства для чтения определялась неправильно. (I55c7a)

Версия 1.1.0-alpha01

10 июня 2020 г.

androidx.benchmark:benchmark-common:1.1.0-alpha01, androidx.benchmark:benchmark-gradle-plugin:1.1.0-alpha01 и androidx.benchmark:benchmark-junit4:1.1.0-alpha01. Версия 1.1.0-alpha01 содержит эти коммиты.

Новые функции в версии 1.1

  • Показатель распределения. Теперь после этапов разогрева и определения времени выполнения тестов проводится дополнительный этап, на котором собираются данные о распределении. Выделение памяти может вызывать проблемы с производительностью в более старых версиях платформы (140 нс в версии O стали 8 нс в версии M – измерено на Nexus 5X с заблокированной частотой). Этот показатель отображается в выходных данных консоли Android Studio, а также в
  • Поддержка профилирования. Теперь вы можете собирать данные профилирования для контрольного запуска, чтобы понять, почему код может работать медленно. Benchmark поддерживает сбор данных о трассировке методов или выборке методов из ART. Эти файлы можно проверить с помощью Profiler в Android Studio, выбрав File > Open (Файл > Открыть).
  • Теперь плагин Benchmark Gradle предоставляет значения по умолчанию, чтобы упростить настройку:
    • Для testBuildType по умолчанию задан выпуск, чтобы избежать использования зависимостей со встроенным покрытием кода. Тип сборки release также настроен как тип сборки по умолчанию, что позволяет Android Studio автоматически выбирать правильный вариант сборки при первом открытии проекта. (b/138808399)
    • signingConfig.debug используется в качестве конфигурации подписи по умолчанию (b/153583269)

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

  • Значительно снижены накладные расходы на переход к разогреву, из-за которых первое измерение для каждого контрольного показателя было искусственно выше остальных. Эта проблема была более заметна в очень небольших тестах (1 микросекунда или меньше). (b/142058671)
  • Исправлена ошибка InstrumentationResultParser, которая возникала для каждого теста производительности при запуске из командной строки. (I64988, b/154248456)

Известные проблемы

  • При вызове Benchmark из командной строки или Gradle результаты не выводятся напрямую. Чтобы обойти это ограничение, вы можете запустить проверку в Творческой студии или проанализировать выходной файл JSON.
  • Отчеты о контрольных показателях не могут получить данные с устройств, на которых установлено приложение с идентификатором applicationId, заканчивающимся на android или download (без учета регистра). Чтобы устранить эту проблему, обновите плагин Android Gradle до версии 4.2-alpha01 или более поздней.

Версия 1.0.0

Версия 1.0.0

20 ноября 2019 г.

androidx.benchmark:benchmark-common:1.0.0, androidx.benchmark:benchmark-gradle-plugin:1.0.0 и androidx.benchmark:benchmark-junit4:1.0.0 выпущены без изменений по сравнению с версией 1.0.0-rc01. Версия 1.0.0 содержит эти коммиты.

Основные функции версии 1.0.0

Библиотека Benchmark позволяет быстро писать тесты производительности кода приложений и получать результаты.

Это позволяет избежать проблем с конфигурацией сборки и среды выполнения, а также стабилизировать производительность устройства, чтобы обеспечить точность и согласованность измерений. Запустите тесты непосредственно в Android Studio или в непрерывной интеграции, чтобы отслеживать производительность кода с течением времени и предотвращать регрессии.

Основные возможности:

  • Стабилизация часов
  • Автоматическое определение приоритета цепочек
  • Поддержка тестирования производительности интерфейса, например в RecyclerView Sample.
  • Прогрев и циклы с учетом JIT
  • Выходные данные в формате JSON для последующей обработки

Версия 1.0.0-rc01

23 октября 2019 г.

androidx.benchmark:benchmark-common:1.0.0-rc01, androidx.benchmark:benchmark-gradle-plugin:1.0.0-rc01 и androidx.benchmark:benchmark-junit4:1.0.0-rc01. Версия 1.0.0-rc01 содержит следующие коммиты.

Новые функции

  • Добавлена трассировка systrace для тестов.

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

  • Исправлена проблема нестабильности показателей, из-за которой JIT не завершался до разогрева из-за снижения приоритета (b/140773023).
  • Единый каталог для вывода JSON в плагинах Android Gradle 3.5 и 3.6

Версия 1.0.0-beta01

9 октября 2019 г.

Выпущены androidx.benchmark:benchmark-common:1.0.0-beta01, androidx.benchmark:benchmark-gradle-plugin:1.0.0-beta01 и androidx.benchmark:benchmark-junit4:1.0.0-beta01. Версия 1.0.0-beta01 содержит эти коммиты.

Новые функции

  • Запускайте сборку мусора перед каждым прогревом, чтобы снизить нагрузку на память и избежать утечки данных из одного теста в другой (b/140895105).

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

  • Добавлена зависимость androidx.annotation:android-experimental-lint, чтобы код Java правильно выдавал ошибки lint, когда экспериментальный API не используется, аналогично тому, что предоставляется экспериментальной аннотацией Kotlin для вызывающих объектов Kotlin.
  • Теперь правильно обнаруживается использование аргумента инструментирования additionalTestOutputDir для вывода в плагине Android Gradle 3.6, чтобы знать, когда AGP будет обрабатывать копирование данных.
  • Исправлена ошибка, из-за которой не определялась тактовая частота в JSON, что мешало правильному выводу -1 (b/141945670).

Версия 1.0.0-alpha06

18 сентября 2019 г.

androidx.benchmark:benchmark-common:1.0.0-alpha06, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha06 и androidx.benchmark:benchmark-junit4:1.0.0-alpha06. Версия 1.0.0-alpha06 содержит следующие коммиты.

Новые функции

  • Добавлена проверка на неправильное использование старого пакета для средства запуска тестов, которая теперь предоставляет более полезное сообщение об ошибке.

Изменения в API

  • Экспериментальная аннотация ExperimentalAnnotationReport теперь является общедоступной. Для использования экспериментального API BenchmarkState#report теперь требуется эта аннотация.

Версия 1.0.0-alpha05

5 сентября 2019 г.

Выпущены androidx.benchmark:benchmark-common:1.0.0-alpha05, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05 и androidx.benchmark:benchmark-junit4:1.0.0-alpha05. Список коммитов, включенных в эту версию, можно найти здесь.

Изменения в API

  • API BenchmarkState.reportData теперь помечен как экспериментальный

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

  • Исправлена ошибка в скрипте блокировки тактовой частоты, которая возникала на устройствах без утилит cut или expr.
  • Исправлена ошибка, из-за которой задача ./gradlew lockClocks зависала на устройствах, где права суперпользователя были получены с помощью устаревшей версии утилиты su, не поддерживающей флаг -c.

Версия 1.0.0-alpha04

7 августа 2019 г.

Выпущены androidx.benchmark:benchmark-common:1.0.0-alpha04, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04 и androidx.benchmark:benchmark-junit4:1.0.0-alpha04. Список коммитов, включенных в эту версию, можно найти здесь.

Также добавлена новая документация по использованию библиотеки Benchmark без Gradle, как для использования с различными системами сборки (такими как Bazel или Buck), так и при запуске в CI. Дополнительную информацию можно найти в статьях Как создавать тесты производительности без Gradle и Как запускать тесты производительности в непрерывной интеграции.

Новые функции

  • Плагин Gradle
    • Теперь автоматически отключает тестовое покрытие и по умолчанию устанавливает AndroidBenchmarkRunner (b/138374050).
    • Добавлена поддержка копирования данных на основе AGP при проведении тестирования и использовании AGP 3.6 и более поздних версий.
  • Дополнения в формате JSON
    • Вывод общего времени выполнения теста производительности (b/133147694)
    • @Parameterized Теперь при использовании контрольных показателей, в которых применяется строка названия (например, @Parameters(name = "size={0},depth={1}")), в выходных данных JSON для каждого контрольного показателя выводятся названия и значения параметров (b/132578772).
  • Режим пробного выполнения (b/138785848)
    • Добавлен режим пробного запуска, в котором каждый цикл тестирования выполняется только один раз. Это позволяет проверить наличие ошибок и сбоев без сбора данных. Это может быть полезно, например, для быстрого запуска тестов производительности перед отправкой, чтобы убедиться, что они не сломаны.

Изменения в API

  • Изменена структура модуля, библиотека разделена (b/138451391)
    • benchmark:benchmark-junit4 содержит классы с зависимостью JUnit: AndroidBenchmarkRunner и BenchmarkRule. Оба класса перемещены в пакет androidx.benchmark.junit4.
    • benchmark:benchmark-common содержит остальную логику, включая BenchmarkState API.
    • Это разделение позволит библиотеке поддерживать тестирование производительности без API JUnit4 в будущем.
  • Предупреждения о конфигурации теперь считаются ошибками и приводят к сбою теста (b/137653596).
    • Это делается для того, чтобы поощрять точные измерения, особенно в CI
    • Эти ошибки можно преобразовать в предупреждения с помощью аргумента инструментации. Пример: -e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"

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

  • Сообщения об ошибках при записи на внешние устройства в Android Q стали более подробными и содержат рекомендации по устранению неполадок.
  • Экраны автоматически включаются во время тестирования производительности, а не отключаются, когда экран выключен.

Внешние взносы

  • Благодарим Сергея Захарова за улучшение вывода JSON и исправление проблем с выключением экрана.

Версия 1.0.0-alpha03

2 июля 2019 г.

Выход сингла androidx.benchmark:benchmark:1.0.0-alpha03 и альбома androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha03. Список коммитов, включенных в эту версию, можно найти здесь.

Новые функции

  • Добавление в полный отчет JSON данных о продолжительности сна из-за перегрева для каждого теста.

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

  • Плагин Gradle больше не нужно применять после плагинов Android и блока Android.
  • Добавлена поддержка отчетов о тестировании на устройствах Android 10 с областями хранения данных.

Версия 1.0.0-alpha02

6 июня 2019 г.

Выход androidx.benchmark:1.0.0-alpha02 и androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02. Список изменений, включенных в эту версию, можно найти здесь.

Обратите внимание, что мы рассматриваем схему JSON как API. Мы планируем придерживаться тех же ограничений стабильности, что и для других API: стабильная работа (за редкими исключениями) после бета-тестирования и фиксированная работа в финальном выпуске, с дополнениями в минорных выпусках и изменениями/удалениями в мажорных выпусках.

Изменения в API

  • Переработана схема JSON. Дальнейшие изменения схемы JSON, скорее всего, будут ограничены дополнениями:

    • Реорганизована структура объекта результата, чтобы в будущем можно было поддерживать дополнительные группы показателей (b/132713021).
    • Добавлена информация о контексте тестового запуска, например сведения об устройстве и сборке, а также о том, заблокированы ли часы, в объект верхнего уровня (b/132711920).
    • В названиях показателей времени теперь есть "ns" (b/132714527).
    • Добавлены дополнительные статистические данные для каждого отчетного показателя (максимум, медиана, минимум) и удалена упрощенная сводная статистика nanos (b/132713851).
  • Удален вывод XML (b/132714414)

  • Из API BenchmarkState.reportData удалено обнаружение теплового троттлинга (b/132887006).

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

  • Исправлена ошибка, из-за которой на некоторых устройствах с последними версиями ОС не сохранялся параметр ./gradlew lockClocks. (b/133424037)
  • Обнаружение троттлинга отключено для эмулятора (b/132880807).

Версия 1.0.0-alpha01

7 мая 2019 г.

Выход сингла "androidx.benchmark:benchmark:1.0.0-alpha01". Коммиты, включенные в эту версию, доступны здесь.