Команды отладки для локального профилирования

При локальном тестировании интеграции ProfilingManager запросы могут быть ограничены ограничением частоты запросов, а фоновые трассировки могут быть неактивны при тестировании триггеров. Используйте команды adb на этой странице, чтобы отключить троттлинг, получить профили, сохранить неотредактированные трассировки, запустить запись и проверить состояние сервиса на тестовом устройстве.

Отключить ограничение частоты запросов

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

adb shell device_config put profiling_testing rate_limiter.disabled true

После завершения тестирования сбросьте параметр:

adb shell device_config delete profiling_testing rate_limiter.disabled

Как извлечь профили с помощью ADB

Чтобы проверить отредактированный профиль локально на устройстве с root-доступом, запустите adb pull с путем, возвращенным getResultFilePath:

# Pull a profile
adb pull /data/user/0/<com.example.myapp>/files/profiling/<profile-file-name>

Хранить временные и неотредактированные результаты

При локальном тестировании профилирования вы можете сохранить результаты во временном каталоге /data/misc/perfetto-traces/profiling/. Сравнивая неотредактированную трассировку системы с отредактированной, вы можете понять, какие данные удаляются при редактировании.

Срок хранения временных и неотредактированных результатов зависит от версии Android на вашем устройстве:

  • Android 16 (уровень API 36) и более поздние версии. Вы можете хранить как неотредактированные (если применимо), так и отредактированные результаты во временном каталоге. В Android 16 он был расширен, чтобы к нему можно было получить доступ с помощью adb pull во всех типах сборок без root-доступа (в Android 15 для чтения /data/misc/perfetto-traces/profiling/ требуется root-доступ). Чтобы система не удаляла временные результаты, выполните следующую команду:

    adb shell device_config put profiling_testing delete_temporary_results.disabled true
    
  • Android 15 (уровень API 35). Во временном каталоге можно хранить только неотредактированный результат, доступный через adb только в сборках с root-доступом. Приложение по-прежнему получает отредактированный профиль в своем каталоге /data/user/0/<app>/files/profiling/, который код приложения может прочитать или скопировать в любой сборке. Однако для извлечения непосредственно из /data/user/0/... с помощью adb pull требуется root-доступ или adb shell run-as <app> в отладочной сборке. Чтобы система не удаляла неотредактированные трассировки, выполните следующую команду:

    adb shell device_config put profiling_testing delete_unredacted_trace.disabled true
    

После записи профиля извлеките сохраненный файл из временного каталога:

# Pull a retained redacted profile (Android 16 and higher)
adb pull /data/misc/perfetto-traces/profiling/<trace-name>.<profile-type-ext>

# Pull an unredacted system trace
adb pull /data/misc/perfetto-traces/profiling/<trace-name>.perfetto-trace-unredacted

В этих командах <trace-name> – это базовое название файла (без расширения) из пути, возвращенного ProfilingResult.getResultFilePath, а к расширению .perfetto-trace неотредактированной копии трассировки системы добавляется -unredacted. Подробные сведения о структуре названий файлов и значениях <profile-type-ext> приведены в разделе Расположение файлов и форматы названий.

adb shell device_config delete profiling_testing delete_temporary_results.disabled
adb shell device_config delete profiling_testing delete_unredacted_trace.disabled

Принудительно включить фоновые трассировки для тестирования триггеров

Поскольку фоновые трассировки системы выполняются в рабочей среде со случайными интервалами, тестировать профилирование на основе триггеров локально может быть сложно. Чтобы запустить непрерывную фоновую трассировку и обойти ограничение частоты запросов на уровне системы для триггеров приложения, задайте system_triggered_profiling.testing_package_name:

adb shell device_config put profiling_testing system_triggered_profiling.testing_package_name <com.example.myapp>

При этом по-прежнему будет действовать период задержки, заданный с помощью параметра setRateLimitingPeriodHours. Поскольку этот режим работает непрерывно, пока вы его не отключите, удалите флаг, когда закончите тестирование:

adb shell device_config delete profiling_testing system_triggered_profiling.testing_package_name

Полезные команды для отладки

На устройствах с Android 16 (уровень API 36) и более поздними версиями, а также с последней версией модуля Profiling вы можете использовать инструмент cmd profiling_service через adb, чтобы включать подробное ведение журнала, запускать сбор профилей по запросу и тестировать триггеры прямо из командной строки.

Включить подробный журнал отладки

Чтобы включить подробные журналы ProfilingService в logcat и диагностировать обработку и доставку запросов, выполните следующую команду:

adb shell cmd profiling_service enable-logs true

Как запросить сбор профилей по запросу

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

adb shell cmd profiling_service request-profiling <profiling_type> <com.example.myapp> [--user <user_id>] [--duration <duration_ms>] [--sources <sources>]

В этой команде <profiling_type> – целочисленное значение константы из ProfilingManager (1 для дампа кучи Java, 2 для профиля кучи, 3 для выборки стека или 4 для трассировки системы). Для профилей памяти и стека должен быть запущен процесс целевого приложения. На запрос распространяется ограничение частоты запросов, если оно не отключено. Завершенный ProfilingResult доставляется только глобальным прослушивателям, зарегистрированным в registerForAllProfilingResults.

Регистрация и симуляция триггеров

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

adb shell cmd profiling_service add-trigger <trigger_type> <com.example.myapp> [--user <user_id>]
adb shell cmd profiling_service trigger <trigger_type> <com.example.myapp> [--user <user_id>]

В этих командах <trigger_type> – это целочисленное постоянное значение из ProfilingTrigger (например, 1 для TRIGGER_TYPE_APP_FULLY_DRAWN, 2 для TRIGGER_TYPE_ANR или 7 для TRIGGER_TYPE_OOM). При выполнении add-trigger триггер регистрируется с 0-часовым периодом восстановления, переопределяя любую существующую регистрацию для этого типа триггера. Чтобы симулировать триггеры, которые сохраняют снимок фоновой трассировки (например, 1 или 2), требуется активная фоновая трассировка (см. раздел Принудительное включение фоновой трассировки для тестирования триггеров).

Сбор данных об общем состоянии ProfilingManager

На устройствах с Android 16 (уровень API 36) и более поздних версий с последней версией модуля Profiling вы можете запустить dumpsys для profiling_service, чтобы диагностировать проблемы и проверить текущее состояние ProfilingManager:

adb shell dumpsys profiling_service

Выходные данные dumpsys profiling_service предназначены только для информационных целей и отладки, а их формат может быть изменен. Он содержит информацию о внутреннем состоянии сервиса, в том числе:

  • Активные ограничения и статус ограничителя частоты запросов.
  • Активные конфигурации устройств.
  • Зарегистрированные триггеры приложений и их периоды ожидания для ограничения частоты запросов.
  • Активные и поставленные в очередь сеансы профилирования.
  • Недавние запросы на профилирование, срабатывания триггеров и события доставки результатов.