Бенчмарк

Точно измеряйте производительность вашего кода в Android Studio.
Последнее обновление Стабильный релиз Кандидат на релиз Бета-версия Альфа-релиз
30 июля 2025 г. 1.4.0 - - -

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

Чтобы добавить зависимость от Benchmark, необходимо добавить репозиторий Google Maven в свой проект. Подробнее см. в репозитории Google Maven .

Макробенчмарк

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

классный

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

Котлин

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

Микробенчмарк

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

классный

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

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

Котлин

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

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

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

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

классный

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

Котлин

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

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

классный

plugins {
  id 'androidx.benchmark'
}

Котлин

plugins {
    id("androidx.benchmark")
}

Обратная связь

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

Создать новый выпуск

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

Версия 1.4

Версия 1.4.0

30 июля 2025 г.

Выпущен androidx.benchmark:benchmark-*:1.4.0 . Версия 1.4.0 содержит следующие коммиты .

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

Микробенчмарк

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

Макробенчмарк

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

Базовые профили

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

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

  • TraceProcessor вынесен в отдельную библиотеку ( androidx.benchmark:benchmark-traceprocessor ), чтобы его можно было использовать вне метрик Macrobenchmark , в других случаях. Его также можно запустить на десктопной JVM, определив собственный 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 для упрощения вызова BaselineProfileRule.collectWithResults() для разработчиков Java. ( I94905 )

Версия 1.4.0-beta01

7 мая 2025 г.

Выпущен androidx.benchmark:benchmark-*:1.4.0-beta01 . Версия 1.4.0-beta01 содержит следующие коммиты .

Изменения API

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

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

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

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

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

Версия 1.4.0-альфа11

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 проверьте результаты команды kill, чтобы предотвратить скрытое сбой и ошибку тайм-аута. ( I84555 )

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

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

Версия 1.4.0-альфа10

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-альфа09

12 марта 2025 г.

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

Изменения API

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

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

  • Исправлена ошибка, из-за которой захват бенчмарка и базового профиля не работал с API 36 из-за изменения в pgrep toybox, который теперь требует -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-альфа08

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 )
  • Библиотеки бенчмарков переш��и на Kotlin 2.0. ( I9d1e0 )
  • Удалён аргумент инструментария androidx.benchmark.startupProfiles.enable . Он больше не нужен, так как им можно управлять с помощью аргумента includeInStartupProfile в BaselineProfileRule.collect() . ( I39eb4 )

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

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

Версия 1.4.0-альфа07

29 января 2025 г.

Выпущен androidx.benchmark:benchmark-*:1.4.0-alpha07 . Версия 1.4.0-alpha07 содержит следующие коммиты .

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

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

Изменения API

  • Добавлен @JvmOverloads в конструктор MicrobenchmarkConfig . ( 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-альфа06

11 декабря 2024 г.

Выпущен androidx.benchmark:benchmark-*:1.4.0-alpha06 . Версия 1.4.0-alpha06 содержит следующие коммиты .

Изменения API

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

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

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

Версия 1.4.0-альфа05

13 ноября 2024 г.

Выпущен androidx.benchmark:benchmark-*:1.4.0-alpha05 . Версия 1.4.0-alpha05 содержит следующие коммиты .

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

  • Исправлена проблема в API 34+, из-за которой CompilationMode.None() приводил к нестабильной производительности, не отражающей исходную производительность в худшем случае. Это позволяет обойти изменение платформы, которое позволяет verify состояния компиляции ART частично компилировать приложения (влияя только на загрузку классов) вскоре после первого запуска. ( Ie48d0 )
  • Исправлена проблема, из-за которой могли быть получены (особенно короткие) трассировки, не содержащие измерений из встроенных метрик Macrobenchmark, из-за усечения имени процесса в трассировке Perfetto. Теперь Macrobenchmark обходит эту проблему, выполняя поиск усеченного имени пакета во всех встроенных запросах в дополнение к ожидаемому имени пакета. Обратите внимание, что пользовательские реализации 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-альфа04

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-альфа03

16 октября 2024 г.

Выпущен androidx.benchmark:benchmark-*:1.4.0-alpha03 . Версия 1.4.0-alpha03 содержит следующие коммиты .

Изменения API

  • Macrobenchmark : добавляет ArtMetric , который можно использовать для проверки покрытия профиля или общей производительности среды выполнения Android. Отслеживает количество и общую продолжительность JIT-компиляции, инициализацию классов (при наличии) и проверку классов. Кроме того, CaptureInfo изменяет функцию, добавляя опциональную версию ART mainline по умолчанию. ( 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 )
  • Исправлена ошибка, из-за которой на некоторых эмуляторах с root-доступом возникала ошибка UNLOCKED_. ( Ic5117 )
  • Эта библиотека теперь использует аннотации JSpecify, определяющие значение null , которые являются типовыми. Разработчикам Kotlin следует использовать следующий аргумент компилятора для обеспечения корректного использования: -Xjspecify-annotations=strict (это значение по умолчанию, начиная с версии 2.1.0 компилятора Kotlin). ( I7104f , b/326456246 )

Версия 1.4.0-альфа02

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) не могла извлечь файлы результатов Baseline Profile или Macrobenchmark из плагина Gradle Baseline Profile. ( I2f678 , b/285187547 )

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

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

и затем настройте тестовую лабораторию Firebase с помощью:

  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-альфа01

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 )
  • Добавлен аргумент бенчмарка для пропуска тестов при запуске на эмуляторе. При включении automaticGenerationDuring сборки бенчмарки также запускают генерацию базового профиля. При использовании эмуляторов это не сработает. Новый аргумент skipBenchmarksOnEmulator позволяет пропустить тест. ( 0c2ddcd )
  • Изменение события perf позволяет запустить логику на API 23+ ( 2550048 )

Изменения API

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

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

  • Увеличьте количество повторных попыток lockClocks.sh ( 99e9dac )
  • Не создавайте nonMinified и бенчмарковые типы сборки, если они существуют. Из-за ошибки, даже если nonMinified типы сборки существовали, они создавались заново. ( 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 Project Isolation в плагине 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 (FTL) не могла извлечь файлы результатов Baseline Profile или Macrobenchmark из плагина Gradle Baseline Profile. ( I2f678 , b/285187547 )

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

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

и затем настройте тестовую лабораторию Firebase с помощью:

  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 Baseline Profile для использования уже существующих 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 содержит следующие коммиты .

Изменения в микробенчмарках с версии 1.2.0

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

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

  • Пересмотр метода отслеживания для макробенчмарков.
    • Теперь трассировки методов ограничены длительностью measureBlock и могут захватывать несколько сеансов, если процесс запускается несколько раз.
    • Ранее трассировка методов работала только для тестов StartupMode.COLD и не регистрировала ничего для measureBlocks , которые не перезапускали целевой процесс.
    • Исправлена ошибка с очисткой трассировок методов в макробенчмарке, так что теперь трассировки методов полностью фиксируются и являются действительными даже на более медленных устройствах. ( I6349a , b/329904950 )
  • Корректно выводить профиль ART во время отдельных итераций warmUp , когда процесс завершается, чтобы измерения CompilationMode.Partial(warmup=N) были более точными. ( I17923 )
  • Сообщение об ошибке трансляции Drop Shader
    • ��обавлены рекомендации по отладке для удаления сообщения об ошибке трансляции шейдера.
    • Добавьте два аргумента инструментирования для переопределения поведения отбрасывания шейдеров, чтобы обойти сбои при тестировании приложений без ProfileInstaller 1.3:
      • androidx.benchmark.dropShaders.enable=true/false : можно использовать, чтобы пропустить отбрасывание всех шейдеров (включая те, которые выполняются в StartupMode.Cold запусках), особенно при тестировании приложений, которые еще не используют profileinstaller 1.3
      • androidx.benchmark.dropShaders.throwOnFailure=true/false : может использоваться для устранения сбоев при попытке удаления шейдеров, например при тестировании приложений без profileinstaller 1.3 ( I4f573 )
  • Добавлен экспериментальный вариант MacrobenchmarkRule#measureRepeated , который использует пользовательскую PerfettoConfig для полностью настраиваемой записи трассировки Perfetto. Обратите внимание, что неправильно настроенные конфигурации могут привести к сбою встроенных классов метрик. ( Idfd3d , b/309841164 , b/304038384 )
  • Отмените фоновые задания dexopt перед запуском Macrobenchmark, чтобы уменьшить помехи. ( I989ed )
  • Macrobenchmark теперь ждет 1 секунду, пока целевое приложение очистит профиль ART (ранее требовалось 500 мс). ( I85a50 , b/316082056 )
  • Переработка TraceSectionMetric
    • Примечание : изменения TraceSectionMetric указанные ниже, могут повлиять на выходные данные при использовании CI и привести к разрывам или нарушить синтаксический анализ.
    • Сумма теперь является значением по умолчанию, поскольку чаще всего эта метрика используется для повторяющихся событий, и в таких случаях first будет отбрасывать данные.
    • Изменен для большей настраиваемости и с большим количеством доступных режимов.
    • Имена режимов теперь встроены в имя выходных данных метрики (в Studio и JSON)
    • Теперь поддерживает срезы, созданные с помощью Trace.{begin|end}AsyncSection .
  • Метрики
    • Питание — добавлены PowerMetric.deviceSupportsHighPrecisionTracking , PowerMetric.deviceBatteryHasMinimumCharge() и PowerMetric.deviceSupportsPowerEnergy()
    • Metric.getResult переименован в getMeasurements для соответствия возвращаемому типу.
    • Добавлены метки log.w/exceptions для всех ошибок обнаружения запуска. Это не меняет текущего поведения (поэтому некоторые ошибки возникают, а другие молча не обнаруживают запуск), просто делает его более понятным. Как правило, Log.w() и не сообщают метрики запуска, когда отсутствуют нефреймовые события; исключения генерируются при обнаружении запуска, за исключением информации о синхронизации кадров (из фрагментов пользовательского интерфейса/режима реального времени). ( Id240f , b/329145809 )
    • Добавлено измерение frameCount в FrameTimingMetric для облегчения обнаружения сценариев, в которых измерения изменяются из-за изменения количества созданных кадров (добавлены новые анимации, исправлены проблемы с аннулированием). ( I1e5aa )
    • Уточнено, что frameOverrunMs является предпочтительной метрикой для отслеживания, если она доступна в документах, и почему. ( I18749 , b/329478323 )
    • Исправлена ошибка, из-за которой незавершенные кадры в начале и конце трассировки могли быть объединены вместе, что приводило к ошибочному отчету о том, что это один очень длинный кадр. ( I39353 , b/322232828 )
    • Исправлена ошибка FrameTimingMetric , когда кадры не создаются, и всегда выводилась ссылка на трассировку при сбое анализа метрики для облегчения диагностики проблемы. ( I956b9 )
    • Исправлен сбой в FrameTimingMetric , из-за которого не удавалось проанализировать идентификатор кадра, особенно на некоторых OEM-устройствах. ( 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 )
    • Добавлен список profilerOutput в вывод JSON для упрощения работы с трассировками профилирования (например, Perfetto, трассировки методов) ( I05ddd , b/332604449 )
    • Добавлено предупреждение при использовании Android Test Orchestrator в модулях тестирования, поскольку это приведет к многократной перезаписи выходных 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 для отправки имени пакета в качестве аргумента instr. До версии AGP 8.4.0 имя пакета целевого приложения не могло быть передано в приложение инструментирования через аргументы инструментирования. ( 0c72a3f )

Версия 1.3.0-beta02

10 июля 2024 г.

Выпущен androidx.benchmark:benchmark-*:1.3.0-beta02 . Версия 1.3.0-beta02 содержит следующие коммиты .

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

  • Корректно обработайте EXITCODE 2 при запуске Perfetto, чтобы зарегистрировать предупреждение, но продолжите работу.

Версия 1.3.0-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 )
  • Microbenchmark теперь корректно выдаёт ошибку, предотвращая вмешательство трассировки методов в измерения. Это происходит на некоторых устройствах при принудительном включении трассировки методов (через аргументы инструментария или 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 ).
  • Измените макро-> общую зависимость на api() , поэтому ее проще использовать, например, PerfettoTrace и PerfettoConfig . ( ICDAE3 , B/341851833 )
  • Убедитесь, что mergeArtProfile и mergeStartupProfile Alsks всегда ждать базового генерации профиля. ( I623d6 , b/343086054 )
  • Рассмотрим вариант включения состояния при принятии решения о том, должен ли вариант быть включен. ( I5d19e , b/343249144 )
  • Увеличение тайм -аута начала по умолчанию для процессора перфетто. ( I87e8c , b/329145808 )

Версия 1.3.0-Alpha05

14 мая 2024 г.

androidx.benchmark:benchmark-*:1.3.0-alpha05 выпускается. Версия 1.3.0-Alpha05 содержит эти коммиты .

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

  • Выбросить более четкое исключение, когда метрика MacroBench возвращает нулевые значения для всех итераций ( IAB58F , B/314931695 )
  • Дополнительные правила обходного пути, добавленные в правила прогиба микроболов, включая поддержку правил слушателя и другие наблюдаемые предупреждения / ошибки. ( 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 для полностью настроенной записи следов перфетто. Обратите внимание, что неправильно настроенные конфигурации могут привести к выходу из строя встроенных метрических классов. ( IDFD3D , B/3098441164 , B/304038384 )
  • RENAME PowerMetric.deviceSupportsPowerEnergy to PowerMetric.deviceSupportsHighPrecisionTracking для ясности ( i5b82f )
  • Добавлен PowerMetric.deviceBatteryHasMinimumCharge() и PowerMetric.deviceSupportsPowerEnergy() чтобы позволить изменять или пропугать контрольные показатели на основе возможности измерения мощности устройства. ( I6a591 , b/322121218 )

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

  • Добавлено сравнение с предыдущим базовым профилем ( I824C8 , B/269484510 )
  • Добавлен DSL для отключения предупреждений ( IC4DEB , B/331237001 )
  • Изменено исключение из журнала информации, когда варианты эталона отключены ( i8a517 , b/332772491 )
  • Упрощайте, как следовать методам метода для макробенчмакмара охватывается продолжительностью фактического measureBlock() . Ранее он начинался при запуске целевого процесса и поддерживал только холодные запуска ( IEE85A , B/300651094 )
  • Избегайте сбоя, когда процессор Perfetto Trace -Trace начинается ( I98841 , B/329145808 )

Версия 1.3.0-альфа03

17 апреля 2024 года

androidx.benchmark:benchmark-*:1.3.0-alpha03 выпускается. Версия 1.3.0-Alpha03 содержит эти коммиты .

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

  • Добавляет Public API PerfettoTraceProcessor.Session.queryMetrics API с вариантами JSON, TextProto и Proto (не выделил). Они позволяют вам запросить метрики, встроенные в Traceprocessor ( i54d7f , b/304038382 )
  • Добавлено profilerOutput выход к выходу JSON для более легкого инструмента для профилирования (например, перфетто, методов). ( I05DDD , B/332604449 )
  • Добавлена тег питания к конфигурации Perfetto. Это захватывает, например, Wakelock Tracepoints. ( ICFE44 , B/286551983 )
  • Добавлен аргумент ind androidx.benchmark.profiling.skipWhenDurationRisksAnr , может быть установлен на false, чтобы не пропустить трассировки метода, когда ожидаемая продолжительность может вызвать ANR - настоятельно рекомендуется избегать в прогонах CI.
  • Добавлен экспериментальный аргумент androidx.benchmark.profiling.perfCompare.enable , установите это на true для выполнения времени сравнения между фазами измерения и профилирования. Полезно, например, оценка накладных расходов методов. ( I61fb4 , b/329146942 )

Изменения API

  • Изменено TraceSectionMetric.Mode на герметичный класс, чтобы обеспечить будущее расширение без исчерпывания, когда операторы ( i71f7b )
  • Добавлены TraceSectionMetric.Mode.Average и .Count , и переупорядоченные ARG, поэтому ��олее распространенный аргумент (режим) был ранее в списке ARG, снижая необходимость определения имен параметров. ( IBF0B0 , B/315830077 , B/322167531 )
  • Переименованная Metric.getResult для getMeasurements в соответствии с типом возврата ( i42595 )

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

  • Исправление для обеспечения использования контрольных показателей сгенерированных базовых профилей, когда выключено automaticGenerationDuringBuild ( IC144F , B/333024280 )
  • Исправьте переопределение свойств плагина BaselineProfile Gradle, чтобы включить базовую генерацию профиля и сравнительный анализ при настройке nonMinified или сравнительного типа сборки. ( IB8F05 , B/324837887 )
  • Фиксированные следы метода промывки в Macrobenchmark, поэтому следы метода должны быть полностью захвачены и действительными даже на более медленных устройствах. ( I6349a , b/329904950 )
  • Включите начало блокировки на перфетто, чтобы снизить риск отсутствия данных в начале трассировки. Поддерживается только на API 33+. ( IE6E41 , B/310760059 )
  • Добавлено предупреждение, когда тестовый оркестратор Android используется в эталонных модулях, так как это приведет к повторному перезаписыванию файлов json для каждого модуля. ( IA1AF6 , B/286899049 )
  • Force ',' (Comma) тысячи сепараторов для последовательности при выводе студии, игнорируя локали устройства ( i3e921 , b/313496656 )
  • TraceSectionMetric теперь поддерживает срезы, созданные с использованием Trace.{begin|end}AsyncSection . ( I91b32 , b/300434906 )
  • Добавлены метки log.w / исключения для всех сбоев обнаружен��я ��апуска. Это не меняет текущее поведение (поэтому некоторые ошибки бросают, а другие молча не смогут обнаружить запуск), просто делает его более понятным. Как правило, те, которые Log.w() и не сообщают о метриках запуска, являются теми, где отсутствуют некадровые события, исключения выявляются при обнаружении запуска, за исключением информации о времени рамки (из срезов пользовательского интерфейса/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 в микрофенде через встроенные правила прогиба. Обратите внимание, что эта поддержка является экспериментальной, и требует AGP 8.3 для министерства библиотечных модульных тестов. Используйте следующее, чтобы включить Minifice/Optimization/оптимизацию 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 Boolean Parameters, чтобы избежать ненужного слова «должно» ( IA8F00 , B/303387299 )
  • Добавлены BenchmarkRule.measureRepeatedOnMainThread , поэтому основные резьбы (например, касаются видов или сочинения UI) могли избежать запуска ANR, особенно во время больших люксов в CI. ( I5c86d )
  • Добавлена FrameTimingGfxInfoMetric , экспериментальная альтернативная реализация FrameTimingMetric с измерениями, поступающими непосредственно с платформы, а не извлечена из трассировки Perfetto. ( I457CB , B/322232828 )
  • Добавьте возможность сбросить художественный профиль во время индивидуальных итераций warmUp . ( I17923 )
  • Несколько изменений в TraceSectionMetric API:
    • Добавить Mode.Min , Mode.Max
    • Добавить аргумент метки, чтобы переопределить имя раздела как метрическое метрическое
    • Добавлено имя режима для вывода, чтобы прояснить значение метрики
    • Изменено по умолчанию на сумму, так как большинство использо��ания этой метрик�� предназначено для повторных событий, будьте в курсе этих изменений в использовании CI, поскольку это может создавать разрывы или разорение. ( IC1E82 , B/301892382 , B/301955938 )

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

  • Улучшенное сообщение об ошибке в базовом плагине Gradle Profile, когда указанное управляемое устройство не существует ( 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 Launches), ESP при сравнительном анализе, которые еще не используют ProfileInstaller 1.3
    • androidx.benchmark.dropShaders.throwOnFailure=true/false : можно использовать для переноса отказов при попытке сбросить шейдеры, например, когда приложения сравнительного анализа без профиля INSTALLER 1.3 ( I4F573 )
  • Пропустить метод отслеживания на нити пользовательского интерфейса, когда ожидается, что при броске займет больше времени, чем несколько секунд, а метод очистки. ( I6e768 )
  • Бросьте, когда имена файлов длиннее 200 Chars, чтобы избежать неясных сбоев при написании или пост-обработке. ( I4a5ab )
  • Исправляет проблему, в которой непосмертные рамки в начале и в конце трассировки могут быть соединены вместе, что неправильно сообщало бы как единственный чрезвычайно длинный кадр. ( I39353 , B/322232828 )
  • Используйте --skip verification на API 30+ при переустановке пакета на API 30-33 для очистки художественных профилей на сборках пользователей. Это помогает обойти пьесу защиту предупреждений, которые вызывают неудачи на некоторых классах устройств. ( IC9E36 )
  • Используйте am force-stop для убийства приложений, когда не системное приложение, такое как системный пользовательский интерфейс или пусковая установка. ( I5e028 )
  • Macrobenchmark теперь ожидает 1 second , когда целевое приложение пропустит профиль искусства (ранее он ждал 500 ms ). ( I85A50 , B/316082056 )
  • Улучшение FrameTimingMetric Error, когда кадры не производятся, и всегда выводит ссылку на трассировку при сбое метрического анализа, чтобы помочь в диагностике проблем. ( I956b9 )
  • Фиксированный сбой в FrameTimingMetric сбое для анализа идентификатора рамки, особенно на определенных устройствах OEM. ( 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 Clackmarks, выходящие из пакета "Package $ 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 )
  • Добавлены свойства для поддержки в качестве интеграции тестового прогона ( B/309805233 ), ( B/309116324 )

Версия 1.2.0

18 октября 2023 г.

androidx.benchmark:benchmark-*:1.2.0 выпускается. Версия 1.2.0 содержит эти коммиты.

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

Базовые профили

  • Новый плагин Gradle Baseline Profile автоматизирует захват и включение базовых профилей в ваш рабочий процесс тестирования и строительства.
  • BaselineProfileRule.collect теперь Stable, оптимизированная и упрощенная версия предыдущего экспериментального BaselineProfileRule.collectBaselineProfile
    • Просто укажите packageName и приведите свое приложение
  • Для библиотек, генерирующих базовые профили, теперь вы можете отфильтровать правила, сгенерированные либо в коде ( BaselineProfileRule.collect Argemt), либо даже просто в плагине Gradle
  • Исправляет
    • Фиксированный базовый сбор профилей на Android U+ ( ID1392 , B/277645214 )

Macrobenchmark

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

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

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

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

    • Фиксированные сбои при установке или извлечении профилей из приложения, установленного из нескольких APK (например, из пакета приложений).
    • Фиксированные FrameTimingMetric игнорирующие рамки с непоследовательными идентификаторами рамки (как правило, кадры во время RIPI на API 31+) ( I747D2 , B/279088460 )
    • Фиксированные ошибки анализа на следах> 64 МБ ( IEF831 , B/269949822 )
    • Уточненные ошибки, когда устройство ОС Device (особенно эмулятор) неправильно настроено для отслеживания или компиляции
    • Проверка проверки уровня батареи на устройства без батареи (микро и макро)
    • Улучшенный выход файлов, с более четкими ошибками для неверных каталогов вывода и более безопасных по умолчанию
    • Улучшенная стабильность StartupMode.COLD , последовательно сбрасывая кэш шейдеров (также выявленную через MacrobenchmarkScope.dropShaderCache )
    • Фиксированная запасная сторона Leanback для startActivityAndWait .

Microbenchmark

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

Версия 1.2.0-RC02

6 октября 2023 г.

androidx.benchmark:benchmark-*:1.2.0-rc02 выпущен. Версия 1.2.0-RC02 содержит эти коммиты.

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

  • Исправьте результат Benchmark File, чтобы больше не сломать BaselineProfile плагин. Файлы были сгенерированы и скопированы с устройства, но были переименованы так, чтобы плагин Gradle не видел их. ( I8DBCC , B/303034735 , B/296453339 )
  • Уточненная tracing-perfetto Загрузка сообщений об ошибках при введении из модуля Macrobenchmark в целевое приложение.

Версия 1.2.0-rc01

20 сентября 2023 года

androidx.benchmark:benchmark-*:1.2.0-rc01 выпущен. Версия 1.2.0-RC01 содержит эти коммиты.

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

  • Исключение (с инструкциями по лекарствам) теперь бросается, когда перфетто SDK Трассировка не может инициализироваться в эталонном. ( I6c878 , b/286228781 )
  • Исправить сбой OOM при преобразовании метода Art Trace -> Perfetto Format. ( I106BD , B/296905344 )
  • (Macrobenchmark) Уточненная метка трассировки метода при связи в выходе из студийного теста, а фиксированные имена файлов с фиксированным методом были уникальными на устройстве/хосте, поэтому они не будут перезаписаны, когда запускается более одного эталона. ( I08E65 , B/285912360 )
  • Гарантирует, что устройство бодрствует при захвате базового профиля. ( I503fc )

Версия 1.2.0-бета05

30 августа 2023 г.

androidx.benchmark:benchmark-*:1.2.0-beta05 выпускается. Версия 1.2.0-бета05 содержит эти коммиты.

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

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

Версия 1.2.0-бета04

23 августа 2023 г.

androidx.benchmark:benchmark-*:1.2.0-beta04 выпускается. Версия 1.2.0-бета04 содержит эти коммиты.

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

  • Базовый плагин Gradle теперь поддерживает плагин Android Gradle 8.3. ( AOSP/2715214 )

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

  • Исправьте сбои в письменной / перемещении и вытягивании файлов (особенно из параметризованных тестов) путем дезинфицирующегося выходных имен файлов, избегая '=' и ':' в именах выходных файлов. ( I759d8 )

Версия 1.2.0-бета03

9 августа 2023 года

androidx.benchmark:benchmark-*:1.2.0-beta03 выпускается. Версия 1.2.0-бета03 содержит эти коммиты.

Изменения API

  • Добавлен аргумент в TraceSectionMetric только к целевому пакету, по умолчанию ( IA219B , B/292208786 )

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

  • Переименованное в fullTracing.enable perfettoSdkTracing.enable fullTracing.enable будет продолжать работать в качестве запасного. ( I7cc00 )
  • Внутренние трацепоинты библиотеки (включая петлю/фазовое отслеживание MicroBenchmark) теперь будут отображаться в Studio System System Trace Seecter и гнездятся под правильным процессом в перфетто. ( I6b2e7 , b/293510459 )
  • Удаленная ошибка MacRobenchmark на API 31+, а также пропустить проверку на устройствах, корневых eng/userdebug. ( I2abac , b/291722507 )
  • При использовании оптимизации макета DEX правила профиля запуска также теперь рассматриваются как базовые правила профиля. ( AOSP/2684246 , B/293889189 )

Версия 1.2.0-бета02

26 июля 2023 г.

androidx.benchmark:benchmark-*:1.2.0-beta02 выпускается. Версия 1.2.0-бета02 содержит эти коммиты.

Изменения API

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

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

  • Ошибка отчета в Macrobench, когда ОС неправильно настроена для отслеживания, как это было недавно исправлено в эмуляторах 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-бета01 содержит эти коммиты.

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

  • Исправить предупреждения, которые иногда подавляются в результате вывода в студии, и ведущие обходные пробелы из базовых выводов, не отображаемых в студии ( IA61D0 , B/227205461 , B/286306579 , B/285912360 )
  • Фиксированный комментарий для FrameTimingMetric . Субметрия называется frameDurationCpuMs . ( IB097F , B/288830934 ).

Версия 1.2.0-Альфа16

21 июня 2023 г.

androidx.benchmark:benchmark-*:1.2.0-alpha16 выпускается. Версия 1.2.0-Alpha16 содержит эти коммиты.

Изменения API

  • BaselineProfileRule.collectBaselineProfile() API был переименован в BaselineProfileRule.collect() . ( I4b665 )

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

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

Версия 1.2.0-Альфа15

7 июня 2023 г.

androidx.benchmark:benchmark-*:1.2.0-alpha15 выпускается. Версия 1.2.0-Alpha15 содержит эти коммиты.

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

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

Изменения API

  • API collectBaselineProfile всегда генерирует стабильные базовые профили. API collectStableBaselineProfile был удален, и вместо этого следует использовать collectBaselineProfile . ( I17262 , B/281078707 )
  • Изменено BaselineProfileRule filterPredicate Arg на NON-NULL, с эквивалентным значением по умолчанию, так что поведение фильтра по умолчанию более ясное в DOCS. ( I3816e )

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

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

Версия 1.2.0-Альфа14

3 мая 2023 г.

androidx.benchmark:benchmark-*:1.2.0-alpha14 выпускается. Версия 1.2.0-Alpha14 содержит эти коммиты.

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

  • Исправьте FrameTimingMetric игнорирующие рамки с непоследовательными идентификаторами кадра. Это приведет к то��у, что не��оторые анимации в недавних версиях платформы (API 31+) игнорируют многие кадры, в то время как RenderThread анимировал (например, во время Ripple). ( I747d2 , b/279088460 )
  • Фиксированный анализ процессора трассировки для следов более 64 МБ. ( IEF831 , B/269949822 )
  • Фиксированная базовая генерация профиля на Android U сбой из-за различных выводов команды pm dump-profiles . ( ID1392 , B/277645214 )
  • Исправить сценарий блокировки часов GPU для правильного сравнения строк ( i53e54 , b/213935715 )

Версия 1.2.0-Альфа13

5 апреля 2023 г.

androidx.benchmark:benchmark-*:1.2.0-alpha13 выпускается. Версия 1.2.0-Alpha13 содержит эти коммиты.

Изменения API

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

Версия 1.2.0-Альфа12

22 марта 2023 года

androidx.benchmark:benchmark-*:1.2.0-alpha12 выпускается. Версия 1.2.0-Alpha12 содержит эти коммиты.

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

  • Новый плагин Gradle Baseline Profile выпущен в версии Alpha, что облегчает генерацию базового профиля и упрощает рабочий процесс разработчика.

Изменения API

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

Версия 1.2.0-Альфа11

8 марта 2023 года

androidx.benchmark:benchmark-*:1.2.0-alpha11 выпускается. Версия 1.2.0-альфа11 содержит эти коммиты.

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

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

Версия 1.2.0-Альфа10

22 февраля 2023 г.

androidx.benchmark:benchmark-*:1.2.0-alpha10 выпускается. Версия 1.2.0-Alpha10 содержит эти коммиты.

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

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

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

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

Версия 1.2.0-Alpha09

11 января 2023 г.

androidx.benchmark:benchmark-*:1.2.0-alpha09 выпускается. Версия 1.2.0-Alpha09 содержит эти коммиты.

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

  • Включено передавать None в androidx.benchmark.enabledRules Инструментация Arg, чтобы отключить все тесты / генерацию базового профиля. ( I3d7fd , b/258671856 )
  • Исправить ��а��ват PerfettoTrace в модулях приложений (т.е. не взыскание испытательных APK) ( i12CFC )
  • Фиксированный базовый профиль ADB Порядок вытягивания аргумента на выходе студии ( I958D1 , B/261781624 )
  • Emulator Api 33 теперь правильно распознается как таковой при попытке запустить макробенч -маркирство и правильно распечатать предупреждение. ( 69133b , b/262209591 )
  • Проверка проверки уровня батареи на устройствах без батареи в Macrobenchmark ( FE4114 , B/232448937 )

Версия 1.2.0-Alpha08

7 декабря 2022 года

androidx.benchmark:benchmark-*:1.2.0-alpha08 выпускается. Версия 1.2.0-Alpha08 содержит эти коммиты.

Изменения API

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

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

  • Повышение безопасности вывода файлов, что должно предотвратить тихие не писать / добавленные выходные файлы, особенно на API 21/22. ( If8c44 , b/227510293 )
  • Исправьте simpleperf Trace Toplow, чтобы правильно создать и поместить файл. Это также должно более широко исправлять проблемы, когда Файл безуспешно вытягивается Gradle. ( I12A1C , B/259424099 )
  • Улучшить сообщение об ошибке ProfileInstaller, напечатанное, когда ProfileInstaller слишком старый. Теперь это говорит вам обновить версию ProfileInstaller (1.2.1) для измерения базовых профилей на API с 31 по 33, вместо того, чтобы сказать, что она не поддерживается. ( IA517F , B/253519888 )
  • Исправьте несколько сбоев команды оболочки Onerror Print Print Nead API <= 23, включая неудачную бинарную настройку перфетто и сбои захвата трассировки ( IB6B87 , B/258863685 )
  • Автоматически сортируют сгенерированные правила профиля, чтобы минимизировать количество изменений при изменении с течением времени (при регистрации правил профиля в управление источником). ( IE2509 )
  • Исправлено сбой на непредубежденных сборках ниже Android 13 (API 33) с сообщением Expected no stderr from echo 3 > /proc/sys/vm/drop_caches ( i6c245 , b/259508183 )

Известные проблемы - MacrobenchmarkScope.dropShaderCache() может сбои из -за отсутствующего реестра вещания в Manifest profileinstaller:1.3.0-alpha02 , который еще не был выпущен. ( I5c728 , b/258619948 ) для обходного пути.

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

Версия 1.2.0-Alpha07

9 ноября 2022 г.

androidx.benchmark:benchmark-*:1.2.0-alpha07 выпускается. Версия 1.2.0-Alpha07 содержит эти коммиты.

Изменения API

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

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

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

Версия 1.2.0-Alpha06

24 октября 2022 г.

androidx.benchmark:benchmark-*:1.2.0-alpha06 выпускается. Версия 1.2.0-Alpha06 содержит эти коммиты.

Изменения API

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

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

  • Исправляет сбой SampledProfiling на API 33+. ( I40743 , b/236109374 )

Версия 1.2.0-Alpha05

5 октября 2022 года

androidx.benchmark:benchmark-*:1.2.0-alpha05 выпускается. Версия 1.2.0-Alpha05 содержит эти коммиты.

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

  • Fix Frame Breakdown в Studio System Trace Viewer для просмотра тестов .
  • Правильный FrameTimingMetric для перечисления FrameOverrun как требует API 31 вместо 29 ( i716dd , b/2207025554 )
  • Установите итерацию в BaselineProfileRule и четко выбросьте, если целевой пакет не установлен (уже был сделан для Macrobenchmarkrule). ( IC09A3 , B/227991471 )

Версия 1.2.0-Alpha04

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

androidx.benchmark:benchmark-*:1.2.0-alpha04 выпускается. Версия 1.2.0-Alpha04 содержит эти коммиты.

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

  • Добавьте поддержку dryRunMode.enable Amentleation Arcome в Macrobenchmark (уже доступный в Micro) для более быстрой локальной разработки, и проверка автоматизации приложений (например, в Presubmit). Это переопределяет итерации до 1, пропускает компиляцию, подавляет все ошибки конфигурации и отключает выход измерения .JSON. ( IB51B4 , B/175149857 )

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

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

    В build.gradle:

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

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

  • Фиксированные StartupTimingMetric , чтобы больше не требует измеренных действий, которые должны быть запущены через MacrobenchmarkScope.startActivityAndWait() . This means the metric can pick up launches from eg notifications, Context.startActivity() , in-app Activity based navigation, or shell commands. ( Ia2de6 , b/245414235 )
  • Fix bug where startActivityAndWait would timeout trying to wait for launch completion on emulators by reducing strictness of frame detection. ( Ibe2c6 , b/244594339 , b/228946895 )

Version 1.2.0-alpha03

September 7, 2022

androidx.benchmark:benchmark-*:1.2.0-alpha03 is released. Version 1.2.0-alpha03 contains these commits.

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

  • Added experimental APIs for using BenchmarkState independently, separate from BenchmarkRule / JUnit4 . ( Id478f , b/228489614 )

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

Version 1.2.0-alpha02

24 августа 2022 г.

androidx.benchmark:benchmark-*:1.2.0-alpha02 is released. Version 1.2.0-alpha02 contains these commits.

Изменения API

  • Default to am force stop for MacrobenchmarkScope.killProcess() , even when rooted, except during Baseline Profile generation. This can be overridden with an optional boolean argument. ( 02cce9 , b/241214097 )

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

Версия 1.2.0-альфа01

July 27, 2022

androidx.benchmark:benchmark-*:1.2.0-alpha01 is released. Version 1.2.0-alpha01 contains these commits.

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

  • New tracing-perfetto-common component allowing tooling to enable Perfetto SDK tracing in an app that exposes it ( I2cc7f )
  • Added androidx.benchmark.enabledRules instrumentation argument to enable filtering macrobenchmark runs to just benchmarks, or just baseline profile generation. Pass in 'Macrobenchmark', or 'BaselineProfile' to just run one type of test, eg when just generating BaselineProfiles on an emulator. Comma-separated list also Supported. ( I756b7 , b/230371561 )

    Eg in Your macrobenchmark's build.gradle:

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

    Or from the Gradle command line:

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

Изменения API

  • Added new PowerMetric for measuring energy and power tasks in benchmarks. ( I9f39b , b/220183779 )
  • Added a new compilation mode CompilationMode.Ignore to skip profile reset and compilation. ( Ibbcf8 , b/230453509 )
  • Added a new parameter to BaselineProfileRule#collectBaselineProfile to filter output file by package names ( If7338 , b/220146561 )
  • Enables developer to discharge device to measure power drain. ( I6a6cb )
  • Added the ability to clear shader cache in MacrobenchmarkScope . ( I32122 )
  • Enables developer to configure display of metric type and detail desired subsystem categories. ( I810c9 )
  • Previously an UnsupportedOperationException was thrown in the benchmark if run on an unsupported device. Now UOE only occurs if the metric is used on the unsupported device (ie: PowerMetric.configure ). ( I5cf20 , b/227229375 )
  • Added TotalPowerMetric and TotalEnergyMetric for measuring total power and energy in each system category in macrobenchmarks. ( I3b26b , b/224557371 )

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

  • Fixed an issue where compiled methods were not correctly being reset between each macrobenchmark on unrooted builds. This unfortunately requires reinstalling the apk each iteration, which will clear application data for each macrobenchmark. ( I31c74 , b/230665435 )
  • Fix trace recording crash on API 21/22 ( If7fd6 , b/227509388 , b/227510293 , b/227512788 )
  • Overhaul activity launch completion detection to fix 'Unable to read any metrics' exception in startup macrobenchmarks. ( Ia517c )

Версия 1.1.1

Версия 1.1.1

9 ноября 2022 г.

androidx.benchmark:benchmark-*:1.1.1 is released. Version 1.1.1 contains these commits.

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

  • Fixes android.system.ErrnoException: open failed: EACCES which would occur on some Android11 (API 30)+ devices. This is a cherry-pick of a fix from 1.2.0-alpha01 . ( aosp/2072249 )

Версия 1.1.0

Версия 1.1.0

15 июня 2022 г.

androidx.benchmark:benchmark-*:1.1.0 is released. Version 1.1.0 contains these commits.

  • This version is identical to androidx.benchmark:benchmark-*:1.1.0-rc03 .

Important changes since 1.0.0

Version 1.1.0-rc03

June 1, 2022

androidx.benchmark:benchmark-*:1.1.0-rc03 is released. Version 1.1.0-rc03 contains these commits.

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

Version 1.1.0-rc02

May 11, 2022

androidx.benchmark:benchmark-*:1.1.0-rc02 is released. Version 1.1.0-rc02 contains these commits.

  • Note that this release includes a behavior change, as apps are now fully reinstalled in between each benchmark to ensure accurate measurements.

Bug Fixes/Behavior Changes

  • Fixed an issue where app compilation was not correctly reset between macrobenchmarks, and not reset at all on unrooted builds. This fixes many cases where running multiple tests would result in CompilationMode having little to no effect on measurements. To workaround this problem, the target app is now fully reinstalling each test method, which will clear application data between each macrobenchmark. ( I31c74 , b/230665435 )

  • As this prevents apps from setting up state before tests, it is now possible to skip compilation / reinstallation to enable working around this. You can for example fully compile the target with a shell command cmd package compile -f -m speed <package> , and then bypass macrobenchmark's compilation step.

    Eg in Your macrobenchmark's build.gradle:

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

    Or from the Gradle command line:

    ./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.compilation.enabled=false
    
  • Made it possible to share a module between macrobenchmarks and baseline profile generating tests by adding androidx.benchmark.enabledRules instrumentation argument. Pass in 'Macrobenchmark', or 'BaselineProfile' to just run one type of test, eg when generating BaselineProfiles on an emulator. ( I756b7 , b/230371561 )

    Eg in Your macrobenchmark's build.gradle:

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

    Or from the Gradle command line:

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

Version 1.1.0-rc01

20 апреля 2022 г.

androidx.benchmark:benchmark-*:1.1.0-rc01 is released. Version 1.1.0-rc01 contains these commits.

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

  • Baseline profile output links in Android Studio now use a unique file name. This way the output always reflects the latest results of using a BaselineProfileRule . ( aosp/2057008 , b/228203086 )

Version 1.1.0-beta06

6 апреля 2022 г.

androidx.benchmark:benchmark-*:1.1.0-beta06 is released. Version 1.1.0-beta06 contains these commits.

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

  • Fix trace recording crash on API 21/22 ( If7fd6 , b/227509388 )
  • Overhaul activity launch completion detection to fix 'Unable to read any metrics' exception in startup macrobenchmarks. ( Ia517c )
  • Fix startup metrics for Macrobenchmarks when CompilationMode.None() is used. Before this change, CompilationMode.Partial() would appear to be slower than Compilation.None() . ( 611ac9 ).

Version 1.1.0-beta05

March 23, 2022

androidx.benchmark:benchmark-*:1.1.0-beta05 is released. Version 1.1.0-beta05 contains these commits.

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

Version 1.1.0-beta04

23 февраля 2022 г.

androidx.benchmark:benchmark-*:1.1.0-beta04 is released. Version 1.1.0-beta04 contains these commits.

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

  • Fix missing metrics on Android 10, and NoSuchElementException caused by process names not being captured correctly in traces. ( Ib4c17 , b/218668335 )

  • Use PowerManager for thermal throttling detection on Q (API 29) and higher. This significantly reduces frequency of false positives in thermal throttling detection (benchmark retry after 90 second cooldown), and speeds up benchmarks significantly on user builds. It also provides throttle detection even when clocks are locked (if they're locked too high for the device's physical environment). ( I9c027 , b/217497678 , b/131755853 )

  • Filter simpleperf sampled profiling to measureRepeated thread only to simplify inspection ( Ic3e12 , b/217501939 )

  • Support metrics from named UI subprocesses in multi-process apps ( Ice6c0 , b/215988434 )

  • Filter Baseline Profile rules to target Android 9 (SDK 28). aosp/1980331 b/216508418

  • Skip Profile Installation when using Compilation.None() . Additionally, report warnings when the app is using an older version of androidx.profileinstaller and Android Gradle Plugin. aosp/1977029

Version 1.1.0-beta03

February 9, 2022

androidx.benchmark:benchmark-*:1.1.0-beta03 is released. Version 1.1.0-beta03 contains these commits.

Изменения API

  • Added AudioUnderrunMetric into macrobenchmark library under experimental flag to allow detection of audio underruns ( Ib5972 )
  • BaselineProfileRule no longer accepts a setup block as this functioned the same as the profileBlock . ( Ic7dfe , b/215536447 )

    For eg

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

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

  • Fixed issue where microbench profiler traces would fail to be updated in subsequent runs when linked in Studio output ( I5ae4d , b/214917025 )
  • Prevent compilation shell commands on API 23 ( Ice380 )
  • Renamed FrameCpuTime -> FrameDurationCpu , FrameUiTime -> FrameDurationUi to clarify these are durations, not timestamps, and to match prefixes. ( I0eba3 , b/216337830 )

Version 1.1.0-beta02

January 26, 2022

androidx.benchmark:benchmark-*:1.1.0-beta02 is released. Version 1.1.0-beta02 contains these commits.

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

  • Microbenchmark Stack Sampling / Method Tracing Profile results are now linked in Studio output, similar to other profiling outputs, and do not suppress the allocation metric. ( Idcb65 , b/214440748 , b/214253245 )
  • BaselineProfileRule now prints the adb pull command in logcat and Studio output for pulling generated BaselineProfile text file. ( f08811 )

Версия 1.1.0-beta01

12 января 2022 г.

androidx.benchmark:benchmark-*:1.1.0-beta01 is released. Version 1.1.0-beta01 contains these commits.

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

  • Fixes profiler argument enable being ignored. ( I37373 , b/210619998 )
  • Removed deprecated CompliationModes ( I98186 , b/213467659 )
  • Switched baseline profile arg of CompilationMode.Partial to enum for clarity. ( Id67ea )

Version 1.1.0-alpha13

15 декабря 2021 г.

androidx.benchmark:benchmark-*:1.1.0-alpha13 is released. Version 1.1.0-alpha13 contains these commits.

Изменения API

  • Add low-overhead System Tracing to microbench output on Android Q (API 29+). Note that this does not currently capture custom tracing (via android.os.Trace or androidx.tracing Jetpack APIs) to avoid affecting results. This tracing should be useful in diagnosing instability, especially from sources outside the benchmark. ( I298be , b/205636583 , b/145598917 )
  • Clarify CompilationModes into three classes - Full, None, Partial. Previously they were inconsistently named after compilation arguments (which we now treat as implementation details) and features. This makes the tradeoffs, potential combinations, and behavior across platform versions more clear. ( I3d7bf , b/207132597 )
  • Setup and measure are now always in pairs, in order. You can now query the package name and iteration (though the iteration may be null in certain warmup scenarios). ( Id3b68 , b/208357448 , b/208369635 )

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

  • Fixed CompilationMode.Speed incorrectly treated as None ( I01137 )

Version 1.1.0-alpha12

17 ноября 2021 г.

androidx.benchmark:benchmark-*:1.1.0-alpha12 is released. Version 1.1.0-alpha12 contains these commits.

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

  • Add experimental TraceSectionMetric for custom trace-based timing measurements. ( I99db1 , b/204572664 )

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

  • Wake device each iteration, to ensure UI can be tested - requires lockscreen is disabled. ( Ibfa28 , b/180963442 )
  • Fixes multiple crashes in StackSampling profiling mode on emulators and non-rooted devices ( Icdbda , b/202719335 )
  • Removed 0.5 second sleep at the end of each iteration - if you see missing metrics with this change, please file a bug. ( Iff6aa )
  • Reduce chances of dropped data, and lower memory overhead from tracing ( Id2544 , b/199324831 , b/204448861 )
  • Reduce trace size by ~40% by switching to compact sched storage format. ( Id5fb6 , b/199324831 )
  • Updated implementations of startup metrics to always end at end of renderthread. This will be more contistent across platform versions, and more closely map to in-app measurements. ( Ic6b55 )

Version 1.1.0-alpha11

November 3, 2021

androidx.benchmark:benchmark-*:1.1.0-alpha11 is released. Version 1.1.0-alpha11 contains these commits.

Изменения API

  • Macrobenchmark now has a minSdkVersion of 23 . ( If2655 )
  • Adds a new experimental BaselineProfileRule which is capable of generating baseline profiles for app's critical user journey. Detailed documentation to follow. ( Ibbefa , b/203692160 )
  • Removes measureRepeated interface variant, which was added for java callers, as it caused ambiguity in completing/resolving the method. Java callers will again need to return Unit.Instance from measureRepeated. If this is an inconvenience, please file a bug, we can revisit this in a future version. ( Ifb23e , b/204331495 )

Version 1.1.0-alpha10

27 октября 2021 г.

androidx.benchmark:benchmark-*:1.1.0-alpha10 is released. Version 1.1.0-alpha10 contains these commits.

Изменения API

  • Backport StartupTimingMetric to work back to API 23. This new implementation also better handles reportFullyDrawn() to wait until corresponding content has been rendered. ( If3ac9 , b/183129298 )
  • Added JvmOverloads to multiple MacrobenchmarkScope methods for Java callers. ( I644fe , b/184546459 )
  • Provide alternative MacrobenchmarkRule.measureRepeated function that uses a Consumer<MacrobenchmarkScope> for idiomatic usage in Java language. ( If74ab , b/184546459 )

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

  • Fix for traces not starting early enough, and missing metric data. This is expected to fix "Unable to read any metrics during benchmark" exceptions that were caused by the library itself. ( I6dfcb , b/193827052 , b/200302931 )
  • FrameNegativeSlack has been renamed to FrameOverrun to clarify its meaning - how much the frame went over its time budget. ( I6c2aa , b/203008701 )

Version 1.1.0-alpha09

October 13, 2021

androidx.benchmark:benchmark-*:1.1.0-alpha09 is released. Version 1.1.0-alpha09 contains these commits.

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

Version 1.1.0-alpha08

September 29, 2021

androidx.benchmark:benchmark-*:1.1.0-alpha08 is released. Version 1.1.0-alpha08 contains these commits.

Изменения API

  • Enable scrolling macrobenchmarks to run back to API 23 ( If39c2 , b/183129298 )
  • Add new type of sampled metric to UI and JSON output, focused on percentiles of multiple samples per iteration. ( I56247 , b/199940612 )
  • Switch to floating point metrics throughout the benchmark libraries (truncated in the Studio UI). ( I69249 , b/197008210 )

Version 1.1.0-alpha07

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

androidx.benchmark:benchmark-*:1.1.0-alpha07 is released. Version 1.1.0-alpha07 contains these commits.

Изменения API

  • Raised min API to 21 to reflect the intended lowest API level to be supported in the future. Current min API supported continues to be conveyed via RequiredApi(), and is currently 29 ( I440d6 , b/183129298 )

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

  • Fixes ProfileInstaller to make it easier for apps using baseline profiles to run MacroBenchmarks using CompilationMode.BaselineProfile . ( I42657 , b/196074999 ) NOTE: requires also updating to androidx.profileinstaller:profileinstaller:1.1.0-alpha04 or greater.
  • StartupMode.COLD + CompilationMode.None benchmarks are now more stable. ( I770cd , b/196074999 )

Version 1.1.0-alpha06

August 18, 2021

androidx.benchmark:benchmark-*:1.1.0-alpha06 is released. Version 1.1.0-alpha06 contains these commits.

Изменения API

  • Added androidx.benchmark.iterations instrumentation argument to allow manual overriding of iteration count when testing/profiling locally. ( 6188be , b/194137879 )

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

  • Switched to Simpleperf as default sampling profiler on API 29+. ( Ic4b34 , b/158303822 )

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

  • CompilationMode.BaselineProfile is a work in progress. Avoid using it to determine how good a profile is for now.

Version 1.1.0-alpha05

August 4, 2021

androidx.benchmark:benchmark-*:1.1.0-alpha05 is released. Version 1.1.0-alpha05 contains these commits.

1.1.0-alpha04 was cancelled before release due to a sporatic crash. b/193827052

Изменения API

  • Switched startActivityAndWait to invoke launch via am start , which reduces the time of each measurement iteration by approximately 5 seconds, at the cost of no longer supporting intent parcelables. ( I5a6f5 , b/192009149

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

  • Reduce aggressiveness of thermal throttle detection, and recompute baseline if throttles are detected frequently. ( I7327b )
  • Fixes FrameTimingMetric to work on Android S beta ( Ib60cc , b/193260119 )
  • Use an EmptyActivity to bring the target app out of a force-stopped state to better support CompilationMode.BaselineProfile . ( Id7cac , b/192084204 )
  • Changed trace file extension to .perfetto-trace to match platform standard. ( I4c236 , b/174663039 )
  • StartupTimingMetric now outputs the "fullyDrawnMs" metric to measure time until your application has completed rendering. To define this metric for your app, call Activity.reportFullyDrawn when your initial content is ready, such as when your initial list items are loaded from DB or network. (reportFullyDrawn method available without build version checks on ComponentActivity). Note that your test must run long enough to capture the metric (startActivityAndWait doesn't wait for reportFullyDrawn). ( If1141 , b/179176560 )
  • Reduce cost of appending Ui metadata to traces by 50+ ms ( Ic8390 , b/193923003 )
  • Drastically increased polling frequency when stopping tracing, which can reduce eg startup benchmark runtime by 30+% ( Idfbc1 , b/193723768 )

Version 1.1.0-alpha03

June 16, 2021

androidx.benchmark:benchmark-*:1.1.0-alpha03 is released. Version 1.1.0-alpha03 contains these commits.

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

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

  • The sample Gradle code for suppressing benchmark errors has been updated to use a non-deprecated API with a syntax that also supports .gradle.kts users.

    Например,

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

Version 1.1.0-alpha02

18 мая 2021 г.

Benchmark version 1.1.0-alpha02 brings a big component to benchmarking - Macrobenchmark. In addition to benchmark allowing you to measure CPU loops, macrobenchmark allows you to measure whole-app interactions like startup and scrolling, and capture traces. For more information see the library documentation .

androidx.benchmark:benchmark-*:1.1.0-alpha02 is released. Version 1.1.0-alpha02 contains these commits.

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

Macrobenchmark artifacts added ( androidx.benchmark:benchmark-macro-junit4 and androidx.benchmark:benchmark-macro )

  • Capture startup, scrolling/animation performance metrics from your app, locally or in CI
  • Capture and inspect traces from within Android Studio

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

  • Workaround shell permissions issue with output directory on Android 12 (Note - may require updating Android Gradle Plugin to 7.0.0 canary and Android Studio to Arctic Fox (2020.3.1), to continue capturing output files on affected devices). ( Icb039 )
  • Support configuration caching in BenchmarkPlugin ( 6be1c1 , b/159804788 )
  • Simplified file output - on by default, in a directory that doesn't require requestLegacyExternalStorage=true ( 8b5a4d , b/172376362 )
  • Fixes library printing logcat warnings about not finding JIT thread on platform versions where it is not present. ( I9cc63 , b/161847393 )
  • Fix for reading device max frequency. ( I55c7a )

Version 1.1.0-alpha01

June 10, 2020

androidx.benchmark:benchmark-common:1.1.0-alpha01 , androidx.benchmark:benchmark-gradle-plugin:1.1.0-alpha01 , and androidx.benchmark:benchmark-junit4:1.1.0-alpha01 are released. Version 1.1.0-alpha01 contains these commits.

New Features of 1.1

  • Allocation Metric - Benchmarks now run an additional phase after warmup and timing, capturing allocation counts. Allocations can cause performance problems on older versions of the platform (140ns in O became 8ns in M - measured on Nexus5X, with locked clocks). This metric is displayed in Android Studio console output, as well as in the
  • Profiling support - You can now capture profiling data for a benchmark run, to inspect why your code may be running slowly. Benchmark supports capturing either method tracing, or method sampling from ART. These files can be inspected with the Profiler inside Android Studio using File > Open .
  • The Benchmark Gradle plugin now provides defaults for simpler setup:
    • testBuildType is set to release by default, to avoid using dependencies with code coverage built-in. The release buildType is also configured as the default buildType, which allows Android Studio to automatically select the correct build variant when opening a project for the first time. ( b/138808399 )
    • signingConfig.debug is used as the default signing config ( b/153583269 )

** Bug Fixes **

  • Significantly reduced the warmup transition overhead, where the first measurement for each benchmark was artificially higher than others. This issue was more pronounced in very small benchmarks (1 microsecond or less). ( b/142058671 )
  • Fixed InstrumentationResultParser error printed for each benchmark when running from command line. ( I64988 , b/154248456 )

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

  • Command line, gradle invocations of Benchmark do not print out results directly. You can work around this by either running through Studio, or parsing the JSON output file for results.
  • Benchmark reporting fails to pull the report from devices that have an app installed with an applicationId ending with either “android” or “download” (case insensitive). Users hitting this issue should upgrade the Android Gradle Plugin to 4.2-alpha01 or later.

Версия 1.0.0

Benchmark Version 1.0.0

November 20, 2019

androidx.benchmark:benchmark-common:1.0.0 , androidx.benchmark:benchmark-gradle-plugin:1.0.0 , and androidx.benchmark:benchmark-junit4:1.0.0 are released with no changes from 1.0.0-rc01. Version 1.0.0 contains these commits .

Major features of 1.0.0

The Benchmark library allows you to write performance benchmarks of app code and get results quickly.

It prevents build and runtime configuration issues and stabilizes device performance to ensure that measurements are accurate and consistent. Run the benchmarks directly in Android Studio , or in Continuous Integration to observe code performance over time, and to prevent regressions.

Major features include:

  • Clock stabilization
  • Automatic thread prioritization
  • Support for UI performance testing, such as in the RecyclerView Sample
  • JIT-aware warmup and looping
  • JSON benchmark output for post-processing

Версия 1.0.0-rc01

October 23, 2019

androidx.benchmark:benchmark-common:1.0.0-rc01 , androidx.benchmark:benchmark-gradle-plugin:1.0.0-rc01 , and androidx.benchmark:benchmark-junit4:1.0.0-rc01 are released. Version 1.0.0-rc01 contains these commits .

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

  • Added systrace tracing to benchmarks

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

  • Fixed metric instability issue where JIT wouldn't finish before warm up due to deprioritization ( b/140773023 )
  • Unified JSON output directory across Android Gradle Plugin 3.5 and 3.6

Версия 1.0.0-beta01

9 октября 2019 г.

androidx.benchmark:benchmark-common:1.0.0-beta01 , androidx.benchmark:benchmark-gradle-plugin:1.0.0-beta01 , and androidx.benchmark:benchmark-junit4:1.0.0-beta01 are released. Version 1.0.0-beta01 contains these commits .

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

  • Run garbage collection before each warmup to reduce memory pressure from one benchmark to leak to the next ( b/140895105 )

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

  • Added androidx.annotation:android-experimental-lint dependency, so that Java code will correctly produce lint errors when experimental API is not used, similar to what is provided by the Kotlin experimental annotation for Kotlin callers.
  • Now correctly detects usage of additionalTestOutputDir instrumentation argument for output in Android Gradle Plugin 3.6, to know when AGP will handle data copy.
  • Fix undetected clock frequency in JSON to correctly print -1 ( b/141945670 ).

Version 1.0.0-alpha06

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

androidx.benchmark:benchmark-common:1.0.0-alpha06 , androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha06 , and androidx.benchmark:benchmark-junit4:1.0.0-alpha06 are released. Version 1.0.0-alpha06 contains these commits .

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

  • Added a check for incorrectly using the old package for the test runner, which now provides a more-helpful error message

Изменения API

  • The experimental annotation ExperimentalAnnotationReport is now correctly public. Usage of the experimental BenchmarkState#report API now requires this annotation

Version 1.0.0-alpha05

September 5, 2019

androidx.benchmark:benchmark-common:1.0.0-alpha05 , androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05 , and androidx.benchmark:benchmark-junit4:1.0.0-alpha05 are released. The commits included in this version can be found here .

Изменения API

  • BenchmarkState.reportData API is now marked experimental

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

  • Fix for the clock-locking script, which would fail on devices that were either missing the cut or expr shell utilities.
  • Fixed an issue with ./gradlew lockClocks task that would hang on devices that were rooted with an older version of the su utility, which did not support the -c flag.

Version 1.0.0-alpha04

7 августа 2019 г.

androidx.benchmark:benchmark-common:1.0.0-alpha04 , androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04 , and androidx.benchmark:benchmark-junit4:1.0.0-alpha04 are released. The commits included in this version can be found here .

New documentation has also been added for how to use the Benchmark library without Gradle, both for usage with different build systems (such as Bazel or Buck), and when running in CI. For more information, see Build benchmarks without Gradle and Run benchmarks in Continuous Integration .

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

  • Gradle plugin
    • Now automatically disables test coverage, and sets the AndroidBenchmarkRunner by default ( b/138374050 )
    • Added support for new AGP-based data copy, when running benchmarks and when using AGP 3.6+
  • JSON format additions
    • Output total benchmark test run time ( b/133147694 )
    • @Parameterized benchmarks that use a name string (for example @Parameters(name = "size={0},depth={1}") ) now output parameter names and values per benchmark in the JSON output ( b/132578772 )
  • Dry Run mode ( b/138785848 )
    • Added a "dry run" mode for running each benchmark loop only once, to check for errors/crashes without capturing measurements. This can be useful eg for, for example, quickly running benchmarks in presubmit to check that they're not broken.

Изменения API

  • Module structure has changed, splitting the library ( b/138451391 )
    • benchmark:benchmark-junit4 contains classes with JUnit dependency: AndroidBenchmarkRunner , and BenchmarkRule , both of which have moved into the androidx.benchmark.junit4 package
    • benchmark:benchmark-common contains the rest of the logic, including the BenchmarkState API
    • This split will allow the library to support benchmarking without JUnit4 APIs in the future
  • Configuration warnings are now treated as errors, and will crash the test ( b/137653596 )
    • This is done to further encourage accurate measurements, especially in CI
    • These errors can be reduced back to warnings with an instrumentation argument. For example: -e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"

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

  • Errors when writing to external storage on Q devices provide more-descriptive messages, with suggestions of how to resolve the issue
  • Screens are automatically turned on during benchmark runs, instead of failing when the screen is off

External contributions

  • Thanks to Sergey Zakharov for contributing JSON output improvements and the fix for screen off issues!

Version 1.0.0-alpha03

2 июля 2019 г.

androidx.benchmark:benchmark:1.0.0-alpha03 and androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha03 are released. The commits included in this version can be found here .

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

  • Expose sleep duration due to thermal throttling per benchmark in the full JSON report

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

  • The Gradle plugin should no longer be required to be applied after Android plugins and the Android block
  • Adds support for benchmark reports on Android 10 devices using scoped storage

Version 1.0.0-alpha02

6 июня 2019 г.

androidx.benchmark:1.0.0-alpha02 and androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02 are released. The commits included in this version can be found here .

Note that we are treating the JSON schema as an API. We plan to follow the same stability constraints as other APIs: stable (with very rare exceptions) once in beta, and fixed in final release, with only additions in minor releases and changes/removals in major releases.

Изменения API

  • Overhauled JSON schema. Further changes to the JSON schema are likely to be limited to additions:

    • Reorganized the result object structure to support additional metric groups in the future ( b/132713021 )
    • Added test run context information, such as device and build info and whether clocks are locked, to the top-level object ( b/132711920 )
    • Time metric names now have 'ns' in their name ( b/132714527 )
    • Additional stats added per reported metric (maximum, median, minimum), and removed simplified 'nanos' summary stat ( b/132713851 )
  • Removed XML output ( b/132714414 )

  • Thermal throttle detection removed from BenchmarkState.reportData API ( b/132887006 )

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

  • Fixed ./gradlew lockClocks not sticking on some recent OS devices ( b/133424037 )
  • Throttling detection disabled for emulator ( b/132880807 )

Version 1.0.0-alpha01

May 7, 2019

androidx.benchmark:benchmark:1.0.0-alpha01 is released. The commits included in this version are available here .