По умолчанию микробенчмарки предоставляют информацию о времени и распределении исполняемого кода. Если вы хотите выяснить, почему измеряемый код работает медленно, проверьте трассировку метода, записываемую по умолчанию в поддерживаемых версиях ОС , или выберите другие конфигурации профилирования.
Чтобы выбрать конфигурацию профилировщика, добавьте аргумент средства запуска инструментов androidx.benchmark.profiling.mode
с одним из аргументов MethodTracing
(по умолчанию), StackSampling
или None
, как показано в следующем фрагменте кода.
Дополнительные сведения о параметрах см. в разделе Запись методов Java/Kotlin . MethodTracing
— это эквивалент трассировки, а StackSampling
— это эквивалент выборки, как определено в этом документе.
классный
android { defaultConfig { // must be one of: 'None', 'StackSampling', or 'MethodTracing' testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"]= 'StackSampling' } }
Котлин
android { defaultConfig { // must be one of: 'None', 'StackSampling', or 'MethodTracing' testInstrumentationRunnerArguments["androidx.benchmark.profiling.mode"] = "StackSampling" } }
При профилировании теста выходной файл .trace
копируется на хост в каталоге вместе с результатами JSON . Чтобы проверить результаты профилирования в Android Studio, выберите ссылку «Трассировка метода» или «Трассировка выборки стека» в результатах микробенчмарка.
Трассировка метода
Трассировка методов полезна, когда вы пытаетесь оптимизировать свой код, поскольку она может помочь вам определить методы, выполнение которых занимает больше времени, чем другие. Затем вы можете сосредоточиться на оптимизации методов, которые оказывают наибольшее влияние на производительность.
Профилирование происходит последовательно после измерения кода, поэтому ваш тест выдает как точные результаты синхронизации, так и результаты профилирования.
Трассировка методов включена по умолчанию.
Выборка стека
Трассировка выборки также может помочь идентифицировать дорогостоящие методы без снижения производительности трассировки методов. Однако если ваше приложение вводит метод после захвата стека вызовов и метод завершается до следующего захвата, вызов метода не регистрируется. Чтобы правильно отслеживать методы с коротким жизненным циклом, используйте трассировку методов вместо трассировки выборок.
При выборке стека тестовые образцы вызывают стеки после завершения прогрева. Вы можете управлять поведением выборки, например частотой и продолжительностью выборки, с помощью аргументов инструментария.
В Android 10 (API 29) и более поздних версиях выборка стека использует Simpleperf для выборки стеков вызовов приложений, включая код C++. В Android 9 (API 28) и более ранних версиях он использует Debug.startMethodTracingSampling
для захвата образцов стека.
Вы можете настроить этот режим профилирования, добавив другие аргументы инструментария:
androidx.benchmark.profiling.sampleFrequency
- Количество выборок стека, которые необходимо захватить в секунду.
- Тип аргумента: целое число
- По умолчанию — 1000 выборок в секунду.
androidx.benchmark.profiling.sampleDurationSeconds
- Продолжительность выполнения теста.
- Тип аргумента: целое число
- По умолчанию 5 секунд.
androidx.benchmark.profiling.skipWhenDurationRisksAnr
- Пропускает трассировку метода, если она может вызвать ошибку ANR. Вам следует оставить этот параметр включенным для запусков CI, поскольку ошибки ANR могут вызвать проблемы во время длительных запусков CI.
- Тип аргумента: логический
- По умолчанию
true
Никто
Этот аргумент не фиксирует файл профилирования. Информация о сроках и распределениях все еще измеряется.
{% дословно %}Рекомендуется для вас
- Примечание. Текст ссылки отображается, когда JavaScript отключен.
- Аргументы инструментария Microbenchmark
- Запуск тестов в непрерывной интеграции