Настройка трассировки системы Android: полное руководство

Запись трассировки системы Android через пункт Системная трассировка в меню разработчика позволяет увидеть, чем занят процессор в момент фризов интерфейса, пропусков кадров и зависаний приложений — без этого инструмента диагностика лагов превращается в гадание. Инструмент System Tracing встроен в Android начиная с современных версий ОС и использует движок Perfetto, который фиксирует события ядра, планировщика и приложений с минимальным влиянием на производительность.

В этом руководстве разберём, как активировать трассировку, выбрать правильные категории событий, записать trace-файл через быстрые настройки или ADB и открыть его для анализа. Инструкция подходит для разработчиков и опытных пользователей, которые хотят найти причину подтормаживаний устройства.

Что такое трассировка системы и когда она нужна

Трассировка системы — это запись низкоуровневых событий устройства за короткий промежуток времени: какие потоки выполнялись на каждом ядре процессора, сколько длился рендеринг кадра, когда срабатывали системные вызовы. Результат сохраняется в файл с расширением .perfetto-trace или .ctrace, который затем открывается в специальном анализаторе.

Инструмент полезен в нескольких типовых ситуациях:

  • 📉 Приложение фризит при скролле, и нужно понять, виноват основной поток или графический конвейер
  • 🔋 Устройство нагревается без видимой нагрузки — требуется проверить активность фоновых процессов
  • 🎮 В игре проседает частота кадров, и нужно определить узкое место: CPU, GPU или ввод-вывод
  • 🛠️ Разработчик отлаживает собственное приложение и хочет добавить кастомные маркеры событий

Обычному пользователю трассировка нужна редко, но именно её данные чаще всего просят прикрепить к баг-репорту инженеры поддержки, когда стандартные логи ничего не показывают.

Подготовка: включение режима разработчика

Все функции трассировки скрыты в разделе Для разработчиков, который по умолчанию не отображается в настройках. Чтобы его открыть, перейдите в Настройки → О телефоне и семь раз подряд нажмите на пункт Номер сборки. Система запросит PIN-код или графический ключ, после чего раздел появится в меню — обычно в Настройки → Система → Для разработчиков, хотя точный путь зависит от оболочки производителя.

Внутри раздела найдите пункт Системная трассировка (в английской локали — System Tracing). Если его нет, возможные причины две: либо производитель убрал инструмент из своей прошивки, либо версия Android слишком старая. В таком случае остаётся вариант с записью через ADB, о котором ниже.

Настройка параметров записи

Откройте Системная трассировка и изучите доступные опции. Ключевая из них — категории событий: это наборы источников данных, которые будут записываться. Чем больше категорий включено, тем полнее картина, но тем быстрее растёт размер буфера и нагрузка на систему.

Основные параметры, которые стоит настроить перед записью:

  • 📂 Категории — для диагностики лагов интерфейса обычно достаточно sched, freq, gfx, view и am; для проблем с диском добавьте disk и file system
  • 💾 Размер буфера — объём памяти на одно ядро CPU; больший буфер позволяет писать дольше без потери событий
  • ⏱️ Длительность записи — в некоторых прошивках можно ограничить время захвата, иначе запись останавливается вручную
  • 📲 Показ в быстрых настройках — добавляет плитку «Запись трассировки» в шторку уведомлений
⚠️ Внимание: не включайте все категории подряд «на всякий случай». Избыточный набор событий раздувает файл до сотен мегабайт, замедляет устройство во время записи и затрудняет последующий анализ. Начинайте с минимального набора под конкретную проблему.
📊 Для какой задачи вы настраиваете трассировку системы?
Диагностика фризов и лагов интерфейса
Отладка собственного приложения
Анализ энергопотребления
Сбор данных для баг-репорта

Запись трассировки: пошаговая инструкция

Самый удобный способ — запись через плитку в быстрых настройках. Опустите шторку, найдите значок Запись трассировки (при необходимости добавьте его через редактирование плиток) и нажмите на него. Система покажет уведомление о начале захвата, после чего воспроизведите проблему: запустите лагающее приложение, поскролльте список, повторите действия, вызывающие фриз.

Когда проблемный момент записан, нажмите на уведомление или плитку повторно — запись остановится, а файл сохранится в хранилище устройства. Обычно он попадает в папку Download или предлагается к отправке через системное меню «Поделиться».

☑️ Чек-лист записи трассировки

Выполнено: 0 / 5

Альтернативный метод — запись через ADB с компьютера. Это даёт более тонкий контроль над параметрами и не зависит от наличия пункта в меню прошивки. Базовая команда выглядит так:

adb shell perfetto -o /data/misc/perfetto-traces/trace.pftrace -t 20s sched freq gfx view am

Здесь -t 20s задаёт длительность записи в секундах, а перечисленные в конце слова — категории событий. Готовый файл забирается командой adb pull. Учтите, что синтаксис может отличаться в зависимости от версии Android, поэтому при ошибке сверьтесь с официальной документацией Perfetto для вашей версии ОС.

Сравнение способов записи трассировки

СпособТребованияГибкость настройкиКому подходит
Плитка в быстрых настройкахМеню разработчикаНизкая — настройки из меню System TracingПользователям и тестировщикам
Меню System TracingМеню разработчикаСредняя — категории, буфер, длительностьТем, кто пишет trace время от времени
ADB + PerfettoПК, драйверы, USB-отладкаВысокая — конфиг-файлы, любые параметрыРазработчикам и инженерам
Конфиг Perfetto из файлаADB, знание формата конфигаМаксимальная — триггеры, ftrace, heap-профилиПродвинутым разработчикам

Для разовой диагностики лагов достаточно плитки в шторке. Если же нужно записать длинный сценарий с точным набором источников данных или автоматизировать сбор — без ADB не обойтись.

Что такое конфиг Perfetto и зачем он нужен

Perfetto принимает настройки в виде текстового конфигурационного файла, где описываются источники данных (ftrace, atrace, статистика процессов), размер буферов, триггеры старта и остановки записи. Конфиг передаётся командой вида: adb shell perfetto --config - -o /data/misc/perfetto-traces/trace.pftrace < config.pbtx. Такой подход позволяет, например, записывать только моменты, когда конкретное приложение выходит на передний план.

Анализ записанного файла

Готовый trace-файл открывается в веб-интерфейсе Perfetto UI — это официальный визуализатор, работающий прямо в браузере без установки программ. Файл загружается локально и не отправляется на сервер, что важно, если в трассировке есть чувствительные данные о процессах.

Интерфейс показывает временную шкалу с дорожками: активность каждого ядра CPU, состояние потоков, события рендеринга, системные маркеры. Ключевой признак фриза интерфейса — поток UI приложения в состоянии «Runnable» или «Sleeping» в момент, когда должен выполняться рендеринг кадра: значит, поток ждёт ресурс или заблокирован длительной операцией.

Для старых файлов формата Systrace логика анализа аналогична, но сам инструмент считается устаревшим — современные версии Android записывают именно формат Perfetto. Если вам прислали trace от пользователя, сначала уточните версию его ОС, чтобы корректно интерпретировать набор категорий.

Типичные проблемы и их решение

Не всегда запись проходит гладко. Разберём частые затруднения, с которыми сталкиваются при настройке трассировки.

Пункт System Tracing отсутствует в меню разработчика. Возможная причина — производитель вырезал инструмент из оболочки. Проверьте наличие плитки через редактирование быстрых настроек; если её нет, используйте запись через ADB — она работает независимо от меню.

Файл получается пустым или обрывается. Частая причина — недостаточный размер буфера при большом количестве категорий. Уменьшите набор событий или увеличьте буфер в настройках. Также проверьте свободное место в хранилище: длинная запись с широким набором категорий может занимать заметный объём.

⚠️ Внимание: не записывайте трассировку во время ввода паролей или работы с банковскими приложениями. В зависимости от категорий в файл могут попасть имена процессов и фрагменты системных событий, которые не стоит передавать третьим лицам без необходимости.

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

Как добавить свои маркеры в трассировку

Разработчики могут вставлять собственные события в trace через класс Trace (android.os.Trace) — вызовы beginSection и endSection помечают участки кода, и эти метки появятся на временной шкале рядом с системными событиями. Для этого в категориях записи должен быть включён источник atrace, а приложение собрано с отладочными правами или запущено на профилируемой сборке.

Часто задаваемые вопросы

Влияет ли запись трассировки на производительность устройства?

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

Нужен ли root-доступ для системной трассировки?

Нет, базовая запись через меню разработчика или ADB работает без root. Расширенные источники данных, например детальный ftrace по отдельным событиям ядра, могут требовать дополнительных привилегий — это зависит от версии Android и прошивки.

Как долго можно записывать трассировку?

Длительность ограничена размером буфера и свободным местом. Для диагностики фризов обычно хватает 10–30 секунд записи вокруг проблемного момента. Длинные сессии настраиваются через конфиг Perfetto с кольцевым буфером.

Чем трассировка отличается от обычного лога logcat?

Logcat фиксирует текстовые сообщения приложений и системы, а трассировка — точные временные события планировщика, потоков и рендеринга. Для анализа производительности trace информативнее, для поиска ошибок и исключений — logcat.

Можно ли открыть trace-файл без интернета?

Да. Визуализатор Perfetto UI после первой загрузки страницы обрабатывает файл локально в браузере. Существуют также инструменты командной строки из состава Perfetto для конвертации и анализа без браузера.