Профилирование микробенчмарка

По умолчанию микробенчмарки предоставляют информацию о времени и распределении исполняемого кода. Если вы хотите выяснить, почему измеряемый код работает медленно, проверьте трассировку метода, записываемую по умолчанию в поддерживаемых версиях ОС , или выберите другие конфигурации профилирования.

Чтобы выбрать конфигурацию профилировщика, добавьте аргумент средства запуска инструментов 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 и ART трассировка методов отключена по умолчанию. В этих случаях 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

Никто

Этот аргумент не фиксирует файл профилирования. Информация о сроках и распределениях все еще измеряется.

{% дословно %} {% дословно %} {% дословно %} {% дословно %}