При локальном тестировании интеграции 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 trueAndroid 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 предназначены только для информационных целей и отладки, а их формат может быть изменен. Он содержит информацию о внутреннем состоянии сервиса, в том числе:
- Активные ограничения и статус ограничителя частоты запросов.
- Активные конфигурации устройств.
- Зарегистрированные триггеры приложений и их периоды ожидания для ограничения частоты запросов.
- Активные и поставленные в очередь сеансы профилирования.
- Недавние запросы на профилирование, срабатывания триггеров и события доставки результатов.