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

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

Чтобы выбрать конфигурацию профилировщика, добавьте аргумент средства запуска инструментов androidx.benchmark.profiling.mode с одним из аргументов MethodTracing , StackSampling или None , как показано в следующем фрагменте кода.

Дополнительные сведения о параметрах см. в разделе Выбор конфигурации записи . MethodTracing — это эквивалент «Трассировки методов Java», а StackSampling — это эквивалент «Примеров методов Java», как определено в этом документе.

классный

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 . Чтобы проверить результаты профилирования в CPU Profiler в Android Studio, выберите «Файл» > «Открыть» . Дополнительные сведения о чтении и понимании трассировок см. в разделе Проверка трассировок .

Трассировка метода

Трассировка методов полезна, когда вы пытаетесь оптимизировать свой код, поскольку она может помочь вам определить методы, выполнение которых занимает больше времени, чем другие. Затем вы можете сосредоточиться на оптимизации методов, которые оказывают наибольшее влияние на производительность.

Профилирование происходит последовательно после измерения кода, поэтому ваш тест выдает как точные результаты синхронизации, так и результаты профилирования.

Выборка стека

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

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

В Android 10 (API 29) и более поздних версиях выборка стека использует Simpleperf для выборки стеков вызовов приложений, включая код C++. В Android 9 (API 28) и более ранних версиях он использует Debug.startMethodTracingSampling для захвата образцов стека.

Вы можете настроить этот режим профилирования, добавив другие аргументы инструментария:

  • androidx.benchmark.profiling.sampleFrequency

    • Количество выборок стека, которые необходимо захватить в секунду.
    • Тип аргумента: целое число
    • По умолчанию — 1000 выборок в секунду.
  • androidx.benchmark.profiling.sampleDurationSeconds

    • Продолжительность выполнения теста.
    • Тип аргумента: целое число
    • По умолчанию 5 секунд.

Никто

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

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