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

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

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

Чтобы добавить зависимость от Benchmark, вам необходимо добавить в свой проект репозиторий Google Maven. Для получения дополнительной информации прочтите репозиторий Google Maven .

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

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

классный

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

Котлин

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

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

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

классный

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

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

Котлин

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

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

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

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

классный

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

Котлин

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

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

классный

plugins {
  id 'androidx.benchmark'
}

Котлин

plugins {
    id("androidx.benchmark")
}

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

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

Создать новую задачу

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

Версия 1.4

Версия 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 , б/377733398 )

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

  • Эта библиотека теперь использует аннотации NULL NULL JSpecify , которые являются типизированными. Разработчики Kotlin должны использовать следующие аргументы компилятора для обеспечения правильного использования: -Xjspecify-annotations=strict , -Xtype-enhancement-improvements-strict-mode ( I46810 , b/326456246 ).
  • Исправлен ArtMetric для отчета о загрузке классов (не инициализации) и улучшена документация для пояснения поведения во время выполнения. ( I9915c )
  • В многопользовательском режиме Android выполняйте команды от имени пользователя 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. Теперь макросбенчмарк решает эту проблему, ища во всех встроенных запросах усеченное имя пакета в дополнение к ожидаемому имени пакета. Обратите внимание, что пользовательские реализации TraceMetric или другие прямые вызовы PerfettoSession.query могут реализовать то же самое поведение, изменив process.name LIKE "$packageName" в запросе Perfetto на (process.name LIKE "$packageName" OR process.name LIKE "$(packageName.takeLast(15))") . ( I5bf01 , б/377565760 )

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

30 октября 2024 г.

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

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

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

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

  • isProfileable теперь всегда переопределяется в тестовых сборках, а isDebuggable теперь всегда переопределяется как в тестовых, так и в nonMinified сборках (захват базового профиля). ( I487fa , б/369213505 )
  • Исправляет обнаружение компиляции на некоторых физических устройствах до API 28 - влияет на json context.compilationMode , а также на поведение androidx.benchmark.requireAot=true (который больше не выдает некорректно) ( Ic3e08 , b/374362482 )
  • В метриках CpuEventCounter выдавать исключение, если наблюдаются недопустимые измерения (например, инструкции/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 по умолчанию. ( I930f7 )
  • Добавьте coefficientOfVariation в выходные данные Benchmark JSON, чтобы продемонстрировать стабильность в рамках данного теста. ( Ib14ea )

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

  • Исправлена ​​задача CollectBaselineProfileTask , когда в устройстве AVD есть пробелы. ( Ia0225 , б/371642809 )
  • Спекулятивное исправление ошибок из исключений StartupMode.COLD : Package <packagename> must not be running prior to cold start! . Теперь MacrobenchmarkScope.killProcess() (включая тот, который запускается перед каждой итерацией и используется для реализации поведения StartupMode.COLD ) будет ждать, чтобы убедиться, что все процессы приложения остановились. ( I60aa6 , б/351582215 )
  • Исправлена ​​ошибка, из-за которой ошибка UNLOCKED_ появлялась на некоторых корневых эмуляторах. ( Ic5117 )
  • Эта библиотека теперь использует аннотации NULL NULL JSpecify , которые являются типизированными. Разработчики Kotlin должны использовать следующие аргументы компилятора для обеспечения правильного использования: -Xjspecify-annotations=strict , -Xtype-enhancement-improvements-strict-mode ( 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 , б/363325823 )

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

  • BaselineProfileRule теперь собирает профили для многопроцессных приложений, сигнализируя каждому запущенному процессу в конце блока о необходимости создания дампа профилей. Если компиляция на основе профиля никогда не находит процесс для трансляции, компиляция завершится неудачно, поскольку в нем неожиданно присутствуют данные профиля. Кроме того, добавлен аргумент инструмента для управления продолжительностью ожидания дампа: androidx.benchmark.saveProfileWaitMillis ( I0f519 , b/366231469 ).
  • Из Benchmark 1.3.2 : Исправлена ​​ошибка, из-за которой Firebase Test Lab (FTL) не могла извлечь файлы результатов базового профиля или макротеста из плагина Gradle базового профиля. ( I2f678 , б / 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 для подавления всех предупреждений базового профиля. ( 314153а )
  • Метрики Microbench теперь отображаются в кривых Perfetto в виде счетчиков. ( 3214854 )
  • Добавьте экспериментальные сценарии для отключения jit (требуется root/перезапуск во время выполнения) и сброса состояния производительности/тестирования устройства. В настоящее время они не публикуются как задачи Gradle. ( 7c3732b )
  • Добавлен аргумент теста для пропуска тестов при работе на эмуляторе. Если включена automaticGenerationDuring сборкаGenerationDuring, тесты также запускают создание базового профиля. Это не удастся, если используются эмуляторы. С новым аргументом skipBenchmarksOnEmulator мы можем пропустить тест. ( 0c2ddcd )
  • Изменение логики события perf для запуска на API 23+ ( 2550048 )

Изменения API

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

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

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

Версия 1.3

Версия 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) не могла извлечь файлы результатов базового профиля или макробенчмарка из плагина Gradle базового профиля. ( I2f678 , б / 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… если они созданы приложением, вместо создания оболочек. ( Я8934 , б/361370179 )
  • Исправлена ​​ошибка java.lang.AssertionError: ERRORS (not suppressed): EMULATOR , когда на эмуляторах включено automaticGenerationDuringBuild . Вместо этого используется новый аргумент, чтобы пропустить тест. ( If3f51 , б/355515798 )
  • Минимизация микробенчмарка — сохраните подклассы org.junit.runner.notification.RunListener в библиотеке тестов proguard ( Ic8ed5 , b/354264743 ).
  • Исправьте TraceSectionMetric , чтобы игнорировать незавершающие фрагменты. Раньше считалось, что они имеют продолжительность -1, например, при суммировании или поиске минимальной продолжительности. ( Если74b7 )
  • Исправлена ​​проблема в 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 для улучшения микробенчмаркинга с включенной минификацией.
    • Минимизация/R8 в библиотечном модуле требует AGP 8.3 и может быть включена через android.buildTypes.release.androidTest.enableMinification в вашем build.gradle
    • Добавлен экспериментальный API BlackHole.consume() для предотвращения устранения неработающего кода ( If6812 , b/286091643 )
  • Метрики
    • Экспериментальная функция счетчика событий процессора (метрики из perf_event_open , для которой требуется root в большинстве версий платформы), доступ через InstrumentationArgument androidx.benchmark.cpuEventCounter.enable (можно установить значение true ), а также можно установить androidx.benchmark.cpuEventCounter.events например ( Instructions,CpuCycles ). Это должно поддерживаться в некоторых эмуляторах пользовательской отладки, но поддержка не тестировалась на всех доступных эмуляторах.

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

  • Переработка метода трассировки макротестов.
    • Теперь трассировки метода ограничены длительностью measureBlock и могут захватывать несколько сеансов, если процесс запускается несколько раз.
    • Раньше трассировка метода работала только для тестов StartupMode.COLD и ничего не фиксировала для measureBlocks , которые не перезапустили целевой процесс.
    • Исправлена ​​очистка трассировок методов в макробенчмарке, поэтому трассировки методов должны быть полностью записаны и действительны даже на более медленных устройствах. ( I6349a , б/329904950 )
  • Корректно выгружать профиль ART во время отдельных итераций warmUp , когда процесс завершается, чтобы измерения CompilationMode.Partial(warmup=N) были более точными. ( I17923 )
  • Сообщение об ошибке трансляции Drop Shader
    • Добавлены предложения по отладке для удаления сообщения об ошибке трансляции шейдера.
    • Добавьте два аргумента инструментария для переопределения поведения отключения шейдера для обхода сбоев при тестировании приложений без ProfileInstaller 1.3:
      • androidx.benchmark.dropShaders.enable=true/false : можно использовать для пропуска всех отбрасываний шейдеров (включая то, что происходит в StartupMode.Cold запусках), особенно при тестировании приложений, которые еще не используют Profileinstaller 1.3.
      • androidx.benchmark.dropShaders.throwOnFailure=true/false : может использоваться для допуска сбоев при попытке удалить шейдеры, например, при тестировании приложений без Profileinstaller 1.3 ( I4f573 ).
  • Добавлен экспериментальный вариант MacrobenchmarkRule#measureRepeated , который использует специальный PerfettoConfig для полностью настраиваемой записи трассировки Perfetto. Обратите внимание, что неправильно настроенные конфигурации могут привести к сбою встроенных классов метрик. ( Idfd3d , б/309841164 , б/304038384 )
  • Отмените фоновые задания dexopt перед запуском Macrobenchmark, чтобы уменьшить помехи. ( I989ed )
  • Macrobenchmark теперь ожидает 1 секунду, пока целевое приложение сбросит профиль ART (ранее оно ждало 500 мс). ( И85а50 , б/316082056 )
  • TraceSectionMetric капитальный ремонт
    • Примечание . Изменения TraceSectionMetric , приведенные ниже, могут повлиять на выходные данные при использовании CI и могут привести к разрывам или нарушению синтаксического анализа.
    • Сумма теперь используется по умолчанию, поскольку эта метрика чаще всего используется для повторяющихся событий, и в этих случаях сначала данные отбрасываются.
    • Изменено, чтобы сделать его более настраиваемым, с большим количеством доступных режимов.
    • Имена режимов теперь встроены в имя выходного показателя метрики (в Studio и JSON).
    • Теперь поддерживает фрагменты, созданные с помощью Trace.{begin|end}AsyncSection .
  • Метрики
    • Питание — добавлены PowerMetric.deviceSupportsHighPrecisionTracking , PowerMetric.deviceBatteryHasMinimumCharge() и PowerMetric.deviceSupportsPowerEnergy()
    • Metric.getResult переименован в getMeasurements в соответствии с типом возвращаемого значения.
    • Добавлены метки log.w/Exception для всех ошибок обнаружения запуска. Это не меняет текущего поведения (поэтому некоторые ошибки выдаются, а другие молча не обнаруживают запуск), просто делает его более понятным. Обычно те, которые Log.w() не сообщают о показателях запуска, — это те, в которых отсутствуют события, не связанные с кадрами, исключения выдаются при обнаружении запуска, за исключением информации о синхронизации кадра (из срезов UI/RT). ( Id240f , б/329145809 )
    • В FrameTimingMetric добавлено frameCount , чтобы помочь обнаружить сценарии, в которых измерения изменяются из-за изменения количества созданных кадров (добавлены новые анимации, исправлены проблемы с недействительностью). ( I1e5aa )
    • Уточнено, что frameOverrunMs является предпочтительной метрикой для отслеживания, когда она доступна в документах, и почему. ( I18749 , б/329478323 )
    • Устранена проблема, из-за которой незавершенные кадры в начале и конце трассировки могли быть объединены в пары, что ошибочно регистрировалось как один очень длинный кадр. ( I39353 , б/322232828 )
    • Устраните ошибку FrameTimingMetric , когда кадры не создаются, и всегда выводите ссылку для отслеживания в случае сбоя анализа метрики, чтобы помочь в диагностике проблемы. ( I956b9 )
    • Исправлен сбой в FrameTimingMetric из-за которого не удавалось проанализировать идентификатор кадра, особенно на некоторых OEM-устройствах. ( Ia24bc , б/303823815 , б/306235276 )
    • Ослаблена строгость проверок в FrameMetrics и добавлена ​​более подробная информация в сообщения об ошибках. ( Иадеде )

Захват базового профиля / изменения плагина Gradle с версии 1.2.0

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

Другие существенные изменения с версии 1.2.0

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

Версия 1.3.0-rc01

7 августа 2024 г.

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

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

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

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

10 июля 2024 г.

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

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

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

Версия 1.3.0-бета01

12 июня 2024 г.

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

Изменения API

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

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

  • Рекомендуемая максимальная версия agp увеличена до 9.0.0-alpha01. ( I5bbb0 )
  • Добавлен режим компиляции в контекст тестирования ( If5612 , b/325512900 ).
  • Включить трассировку AIDL по умолчанию (требуется API 28) ( Ia0af2 , b/341852305 )
  • Добавлена ​​дополнительная информация в контексте теста в выводе JSON:
    • context.artMainlineVersion — целочисленная версия основного модуля Art (если он присутствует на устройстве, в противном случае -1)
    • context.build.id – равен android.os.Build.ID
    • context.build.version.codename — равно android.os.Build.VERSION.CODENAME
    • context.build.version.abbreviatedCodename — соответствует первой букве кодового имени предварительной версии (даже в сборках выпуска) ( Ie5020 ).
  • Исправляет StackSampling для соблюдения androidx.benchmark.profiling.sampleDurationSeconds ( Ib1d53 ).
  • Измените зависимость macro->common на api() , чтобы ее было проще использовать, например, PerfettoTrace и PerfettoConfig . ( Icdae3 , б/341851833 )
  • Убедитесь, что задачи mergeArtProfile и mergeStartupProfile всегда ожидают создания базового профиля. ( I623d6 , б/343086054 )
  • Учитывайте состояние включения варианта при принятии решения о том, следует ли включать вариант. ( I5d19e , б/343249144 )
  • Увеличено время ожидания запуска по умолчанию для процессора трассировки perfetto. ( I87e8c , б/329145808 )

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

14 мая 2024 г.

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

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

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

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

1 мая 2024 г.

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

Изменения API

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

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

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

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

17 апреля 2024 г.

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

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

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

Изменения API

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

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

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

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

20 марта 2024 г.

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

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

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

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

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

  • Исправлена ​​ошибка, из-за которой предупреждение о трассировке метода выводилось на отдельной строке от вывода микробенча. ( I0455c , б/328308833 )

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

21 февраля 2024 г.

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

Изменения API

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

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

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

Версия 1.2

Версия 1.2.4

17 апреля 2024 г.

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

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

  • Исправлена ​​ошибка, из-за которой базовый профиль srcset не настраивался в вариантах тестирования. Также исправлено automaticGenerationDuringBuild в библиотеках, вызывающее циклическую зависимость. ( I28ab7 , б/333024280 )
  • Используйте am force-stop , чтобы закрыть приложения, если они не системные, например System UI или Launcher. Это исправляет сбой тестов StartupMode.COLD из-за «Пакет $package не должен быть запущен до холодного запуска!» из-за того, что процесс kill не удался полностью. ( I5e028 )

Версия 1.2.3

24 января 2024 г.

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

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

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

Версия 1.2.2

1 декабря 2023 г.

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

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

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

Версия 1.2.1

15 ноября 2023 г.

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

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

  • Улучшено сообщение об ошибке, когда пользователь отключает варианты тестирования ( b/307478189 ).
  • Добавлены свойства для поддержки в качестве интеграции тестового прогона ( 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 Loop/Phase) теперь будут отображаться в Studio 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-beta02 содержит эти коммиты.

Изменения 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-бета01

18 июля 2023 г.

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

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

  • Исправить предупреждения, которые иногда подавляются в результате вывода в студии, и ведущие обходные пробелы из базовых выводов, не отображаемых в студии ( 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-альфа08

7 декабря 2022 г.

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

Изменения API

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

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

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

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

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

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

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

24 октября 2022 г.

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

Изменения API

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

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

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

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

5 октября 2022 г.

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

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

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

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

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

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

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

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

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

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

    В build.gradle:

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

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

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

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

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

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

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

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

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

  • Добавлен запасной запасной путь для startActivityAndWait . ( 01ed77 , b/2428999915 )

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

24 августа 2022 г.

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

Изменения API

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

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

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

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

27 июля 2022 г.

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

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

  • Новый компонент трассировки-перфетто-компонента, позволяющий инструментальности, чтобы обеспечить перфетто SDK-трассировку в приложении, которое его обнаруживает ( i2cc7f )
  • Добавлен androidx.benchmark.enabledRules Аргумент Инструментации, чтобы включить фильтрацию MacRobenchmark, чтобы пробежать только на контрольные показатели, или просто базовое образование профиля. Перейдите в «Macrobenchmark», или «BaselineProfile», чтобы просто запустить один тип теста, например, когда просто генерируя BaselineProfiles на эмуляторе. Список, разделенный запятыми, также поддерживается. ( I756b7 , b/230371561 )

    Например, в Build.gradle вашего Macrobenchmark:

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

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

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

Изменения API

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

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

  • Исправлена ​​проблема, в которой скомпилированные методы не были правильно сброшены между каждым макробенчмарком на непредсказуемых сборках. К сожалению, это требует переустановки APK каждую итерацию, которая будет очищать данные приложения для каждого макробанкмарка. ( I31c74 , b/230665435 )
  • Исправлена ​​сбоя записи трассировки на API 21/22 ( if7fd6 , b/227509388 , b/227510293 , b/227512788 )
  • Проверка активности запуска обнаружение завершения, чтобы исправить «Невозможно прочитать исключение каких -либо метрик» в Startup Macrobenchmarks. ( IA517C )

Версия 1.1.1

Версия 1.1.1

9 ноября 2022 г.

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

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

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

Версия 1.1.0

Версия 1.1.0

15 июня 2022 г.

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

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

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

Версия 1.1.0-RC03

1 июня 2022 г.

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

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

  • Избегайте переустановки целевого пакета на каждой итерации. ( AOSP/2093027 , B/231976084 )

  • Снимите задержку 300ms из pressHome() . ( AOSP/2086030 , B/231322975 )

  • Улучшить скорость итерации Macrobenchmark, оптимизируя команды оболочки, используемые под капотом. ( AOSP/2086023 , B/231323582 )

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

Версия 1.1.0-rc02

11 мая 2022 г.

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

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

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

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

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

    Например, в Build.gradle вашего Macrobenchmark:

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

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

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

    Например, в Build.gradle вашего Macrobenchmark:

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

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

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

Версия 1.1.0-rc01

20 апреля 2022 г.

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

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

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

Версия 1.1.0-бета06

6 апреля 2022 г.

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

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

  • Исправить сбой записи трассировки на API 21/22 ( if7fd6 , b/227509388 )
  • Проверка активности запуска обнаружение завершения, чтобы исправить «Невозможно прочитать исключение каких -либо метрик» в Startup Macrobenchmarks. ( IA517C )
  • Исправлена ​​метрики запуска для макробенчжников при использовании CompilationMode.None() . Перед этим изменением CompilationMode.Partial() будет казаться медленной, чем Compilation.None() . ( 611AC9 ).

Версия 1.1.0-BETA05

23 марта 2022 г.

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

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

  • Убить пакет после пропуска установки профиля при использовании CompilationMode.None . ( AOSP/1991373 )
  • Исправлена ​​проблема, в которой Macrobenchmarks не может собирать метрики запуска при использовании StartupMode.COLD . ( AOSP/2012227 B/218668335 )

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

23 февраля 2022 г.

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

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

  • Исправьте отсутствующие метрики на Android 10 и NoSuchElementException вызванное именами процессов, не запечатлеваемых правильно в следах. ( IB4C17 , B/218668335 )

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

  • Фильтр simpleperf Профилирование отбора в потоку measureRepeated только для упрощения проверки ( IC3E12 , B/217501939 )

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

  • Фильтруя базовые правила профиля для нацеливания на Android 9 (SDK 28). AOSP/1980331 B/216508418

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

Версия 1.1.0-beta03

9 февраля 2022 г.

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

Изменения API

  • Добавлен AudioUnderrunMetric в библиотеку MacRobenchmark под экспериментальным флагом, чтобы разрешить обнаружение аудио -недостатков ( IB5972 )
  • BaselineProfileRule больше не принимает блок setup , так как он функционировал так же, как profileBlock . ( IC7DFE , B/215536447 )

    Например,

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

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

  • Фиксированная проблема, в которой трассировки профилировщика микробанков не будут обновляться в последующих прогонах при связи на выходе студии ( i5ae4d , b/214917025 )
  • Предотвратить команды оболочки компиляции на API 23 ( ICE380 )
  • Переименовано в FrameCpuTime -> FrameDurationCpu , FrameUiTime -> FrameDurationUi , чтобы уточнить, что это продолжительность, а не метки времени и соответствовать префиксам. ( I0eba3 , b/216337830 )

Версия 1.1.0-beta02

26 января 2022 г.

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

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

  • Результаты профиля профиля профиля отбора проб MicroBenchmark / отслеживания методов теперь связаны с выходом студии, аналогично другим выходам профилирования и не подавляют метрику распределения. ( IDCB65 , B/214440748 , B/214253245 )
  • BaselineProfilerule теперь печатает команду adb pull в LogCat и Studio Output для извлечения сгенерированного базового профиля текстового файла. ( F08811 )

Версия 1.1.0-бета01

12 января 2022 г.

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

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

  • Исправляет аргумент Profiler, позволяющий игнорировать. ( I37373 , b/210619998 )
  • Удаленные устаревшие CompliationModes ( I98186 , B/213467659 )
  • Переключенный базовый профиль arg CompilationMode.Partial . ( Id67ea )

Версия 1.1.0-Alpha13

15 декабря 2021 г.

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

Изменения API

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

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

  • Fixed CompilationMode.Speed ​​неправильно обрабатывается как None ( I01137 )

Версия 1.1.0-Alpha12

17 ноября 2021 г.

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

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

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

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

  • Устройство Wake Каждая итерация, чтобы убедиться, что пользовательский интерфейс может быть протестирован - требует отключения блокировки. ( IBFA28 , B/180963442 )
  • Исправляет несколько сбоев в режиме профилирования StackSampling на эмуляторах и неровных устройствах ( ICDBDA , B/202719335 )
  • Удал 0,5 секунды в конце каждой итерации - если вы видите пропущенные метрики с этим изменением, пожалуйста, подайте ошибку. ( Iff6aa )
  • Уменьшите шансы на сброшенные данные и более низкие накладные расходы на отступление от трассировки ( ID2544 , B/199324831 , B/204448861 )
  • Уменьшите размер трассировки на ~ 40%, переключившись на компактный формат хранения. ( Id5fb6 , b/199324831 )
  • Обновленные реализации метрик стартапов всегда заканчиваются в конце renderThread. Это будет более содержимым в разных версиях платформы и более тесно сопоставляется с измерениями в приложении. ( IC6B55 )

Версия 1.1.0-Alpha11

3 ноября 2021 г.

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

Изменения API

  • Macrobenchmark теперь имеет minSdkVersion 23 . ( IF2655 )
  • Добавляет новый экспериментальный BaselineProfileRule , который способен генерировать базовые профили для критического пользователя приложения. Подробная документация для следования. ( Ibbefa , B/203692160 )
  • Удаляет измеренный вариант интерфейса, который был добавлен для абонентов Java, так как это вызвало двусмысленность при завершении/разрешении метода. Абоненты Java снова должны вернуть единицу. Если это неудобство, пожалуйста, подайте ошибку, мы можем вернуться в будущую версию. ( IFB23E , B/204331495 )

Версия 1.1.0-Alpha10

27 октября 2021 г.

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

Изменения API

  • Backport 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 )

Версия 1.1.0-Alpha09

13 октября 2021 г.

androidx.benchmark:benchmark-*:1.1.0-alpha09 is released. Версия 1.1.0-Alpha09 содержит эти коммиты.

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

Версия 1.1.0-Alpha08

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

androidx.benchmark:benchmark-*:1.1.0-alpha08 is released. Версия 1.1.0-Alpha08 содержит эти коммиты.

Изменения 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 )

Версия 1.1.0-Alpha07

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

androidx.benchmark:benchmark-*:1.1.0-alpha07 is released. Версия 1.1.0-Alpha07 содержит эти коммиты.

Изменения 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 )

Версия 1.1.0-Alpha06

18 августа 2021 г.

androidx.benchmark:benchmark-*:1.1.0-alpha06 is released. Версия 1.1.0-Alpha06 содержит эти коммиты.

Изменения 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.

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

4 августа 2021 г.

androidx.benchmark:benchmark-*:1.1.0-alpha05 is released. Версия 1.1.0-Alpha05 содержит эти коммиты.

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 )

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

16 июня 2021 г.

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

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

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

  • 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"
    

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

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

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

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 )

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

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

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

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

Основные особенности версии 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

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-бета01

9 октября 2019 г.

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

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

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

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

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

Версия 1.0.0-альфа06

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

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

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

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

Изменения API

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

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

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

androidx.benchmark:benchmark-common:1.0.0-alpha05 , androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05 , and androidx.benchmark:benchmark-junit4:1.0.0-alpha05 are released. Коммиты, включенные в эту версию, можно найти здесь .

Изменения API

  • BenchmarkState.reportData API is now marked experimental

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

  • Fix for the clock-locking script, which would fail on devices that were either missing the cut 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.

Версия 1.0.0-альфа04

7 августа 2019 г.

androidx.benchmark:benchmark-common:1.0.0-alpha04 , androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04 , and androidx.benchmark:benchmark-junit4:1.0.0-alpha04 are released. Коммиты, включенные в эту версию, можно найти здесь .

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

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

  • Gradle plugin
    • Now automatically disables test coverage, and sets the AndroidBenchmarkRunner by default ( b/138374050 )
    • Added support for new AGP-based data copy, when running benchmarks and when using AGP 3.6+
  • 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

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

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

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

2 июля 2019 г.

androidx.benchmark:benchmark:1.0.0-alpha03 and androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha03 are released. Коммиты, включенные в эту версию, можно найти здесь .

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

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

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

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

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

6 июня 2019 г.

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

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

Изменения API

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

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

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

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

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

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

7 мая 2019 г.

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