Анализ профилей с помощью ИИ

Поскольку профили ProfilingManager используют стандартный формат Perfetto и поддерживают запросы PerfettoSQL, вы можете использовать ИИ-агента для программирования с навыком Perfetto AI, чтобы автоматизировать анализ основных причин прямо в рабочей области. Это избавит вас от необходимости вручную перемещаться по временным шкалам в интерфейсе Perfetto или писать собственные запросы к стандартной библиотеке Perfetto.

  1. Загрузка профиля. Агент открывает собранный профиль с помощью trace_processor Perfetto.
  2. Выполняет диагностические запросы. Руководствуясь ИИ-навыком Perfetto, агент запрашивает модули стандартной библиотеки (например, android.frames.timeline для задержек или android.memory.heap_graph.dominator_tree для утечек памяти) и итеративно уточняет свои запросы.
  3. Сопоставление с исходным кодом. Агент сопоставляет фрагменты пользовательских трассировок, выборки стеков вызовов или имена классов в профиле непосредственно с исходными файлами Kotlin или Java и предлагает исправление.

Как настроить ИИ-навык Perfetto

Навык Perfetto AI с открытым исходным кодом учит агентов программирования запускать trace_processor, писать PerfettoSQL и следовать пошаговым инструкциям по анализу памяти и процессора Android. Каждый установочный пакет содержит оболочку trace_processor, поэтому устанавливать trace_processor отдельно не нужно.

  • Установка с помощью ИИ. Выполните следующий запрос в любом ИИ-агенте по программированию:

    Following instructions from https://perfetto.dev/docs/getting-started/using-ai set up the Perfetto AI skill to be usable by any agent
    
  • Установить вручную. Следуйте инструкциям по настройке в статье Использование ИИ с Perfetto для вашего агента (например, Claude Code, Codex, Cursor, Antigravity или OpenCode).

Примеры рабочих процессов

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

Анализ дампов кучи Java и ошибок нехватки памяти

Если вы предоставите дамп кучи Java, полученный напрямую с помощью PROFILING_TYPE_JAVA_HEAP_DUMP или автоматически через триггер TRIGGER_TYPE_OOM, ИИ-агент с навыком Perfetto AI поможет вам определить:

  • Утечки памяти. Объекты, например уничтоженные экземпляры Activity или Fragment, которые остаются доступными из корней сборщика мусора, когда они должны были быть утилизированы.
  • Объекты с большим количеством дубликатов. Классы с неожиданно большим количеством экземпляров, которые в совокупности занимают значительную часть кучи.
  • Неэффективное использование памяти. Слишком большие кеши, избыточные структуры данных или отдельные доминирующие объекты, занимающие непропорционально большой объем памяти.

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

Analyze the Perfetto OOM heap dump at </path/to/profile>, which corresponds to
the codebase located at </path/to/codebase> using the Perfetto AI skill and find
the root cause of the OutOfMemoryError.

Чтобы посмотреть полный пример отчета, созданного этим запросом, включая путь удержания дерева доминаторов, основную причину в исходном коде и предлагаемое исправление, ознакомьтесь с разделом Автоматизация исследования OOM с помощью ИИ-агента в статье Пример из практики: отладка сбоя OOM.

Как анализировать трассировки системы и ошибки ANR

Если вы предоставите трассировку системы, полученную напрямую с помощью PROFILING_TYPE_SYSTEM_TRACE или автоматически через триггер TRIGGER_TYPE_ANR, ИИ-агент с навыком Perfetto AI поможет вам определить:

  • Блокировка операций основного потока. Длительные фрагменты трассировки или синхронные вызовы, которые не позволяют потоку UI обрабатывать события ввода или отрисовывать кадры до достижения порогового значения ANR.
  • Узкие места в состоянии потока. Интервалы, в которых основной поток застревает в состоянии Sleeping (например, блокировка сетевого I/O или тайм-ауты Thread.sleep), Blocked (конкуренция за блокировку) или Runnable (задержки планирования ЦП).
  • Пиковые нагрузки на ЦП в основном потоке. Ресурсоемкие вычисления или циклы, которые выполняются непосредственно в потоке UI, а не в фоновом режиме.

Чтобы изучить трассировку системы, связанную с ошибкой ANR, и сопоставить ее с исходным кодом приложения, выполните запрос, подобный следующему:

Analyze the Perfetto system trace at </path/to/trace.perfetto-trace>, which
corresponds to an ANR trace, and find the root cause of the ANR using the
Perfetto AI skill. The codebase is located at </path/to/codebase>.

Чтобы посмотреть полный пример отчета, созданного по этому запросу, включая разбивку фрагментов основного потока, реконструкцию интервала thread_state и сопоставление исходного кода, прочитайте раздел Автоматизация анализа ANR-ошибок с помощью ИИ-агента в статье Пример из практики: отладка ANR-ошибки.