Как визуализировать профили в Perfetto UI

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

Визуализация трассировок системы

Откройте файл .perfetto-trace в Perfetto UI, чтобы проверить активность ЦП и потоков за определенный период времени.

Хронология отредактированной трассировки системы в Perfetto UI
Рисунок 1. Пример отредактированной трассировки.

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

На рисунке 2 показаны основные разделы отредактированной трассировки системы.

Пронумерованные разделы отредактированной трассировки системы в Perfetto UI
Рисунок 2. Разделы отредактированной трассировки.
  1. Список ЦП. Все доступные процессоры на устройстве.
  2. Задачи ЦП. Показывает, какие потоки выполнял каждый ЦП.
  3. Другие процессы. Показывает ресурсы ЦП, потребляемые другими процессами.
  4. Process View. Показывает процесс приложения.
  5. Режим просмотра потоков. Показывает потоки, выполняемые в рамках процесса, и их состояния (Runnable (R), Running (R), Sleeping (S), Uninterruptible Sleep (D)), которые напрямую сопоставляются с состояниями процессов Linux.
  6. Фрагменты трассировки. В этом разделе показаны аннотации трассировки, добавленные разработчиками приложения или фреймворком. Эти аннотации охватывают вычисления между Trace.beginSection и Trace.endSection.

Подробную информацию об интерфейсе Perfetto и визуализации трассировки можно найти в документации Perfetto.

Визуализация дампов кучи Java

Получив дамп кучи Java с помощью PROFILING_TYPE_JAVA_HEAP_DUMP, откройте файл .perfetto-java-heap-dump в Perfetto UI, чтобы выявить утечки памяти или оптимизировать использование памяти. В Heapdump Explorer можно изучить граф кучи, посмотреть флейм-графы совокупных размеров объектов, а также просмотреть классы, объекты и доминаторы, как показано на рисунке 3.

Интерфейс Perfetto Heapdump Explorer с флейм-графом размеров объектов в куче Java.
Рисунок 3. Флейм-граф дампа кучи Java в интерфейсе Perfetto.

Чем дампы кучи ProfilingManager отличаются от дампов HPROF

В отличие от стандартных дампов кучи .hprof (например, полученных с помощью Debug.dumpHprofData или в Android Studio), ProfilingManager создает дамп кучи Perfetto ART (.perfetto-java-heap-dump). Вместо необработанного содержимого памяти ProfilingManager записывает граф хранения объектов и метаданные о размерах, опуская необработанные данные, хранящиеся внутри объектов:

  • Какие данные собираются:
    • Классы и типы. Названия классов, иерархии надклассов, загрузчики классов, размеры экземпляров и типы ссылок (например, обычные классы, массивы, строки, а также слабые, мягкие, фантомные ссылки и ссылки на финализаторы).
    • Экземпляры и размеры объектов. Объем памяти, занимаемый каждым объектом (self_size), его область кучи (HEAP_TYPE_APP, HEAP_TYPE_ZYGOTE или HEAP_TYPE_BOOT_IMAGE) и связанная нативная память, зарегистрированная через NativeAllocationRegistry.
    • Ссылки и корневые объекты сборщика мусора. Корневые объекты сборщика мусора (например, глобальные и локальные объекты JNI, стековые фреймы Java и объекты потоков) и цепочки ссылок на уровне полей, показывающие, какой объект удерживает другой объект и через какое имя поля.
    • Выбрать метаданные о размерах. Неконфиденциальные метаданные для определенных типов фреймворков, например размеры Bitmap (mWidth и mHeight).
  • Что не включается. Фактические значения примитивных полей, содержимое символов String и необработанные полезные нагрузки массивов (byte[], char[] и другие примитивные массивы). Это позволяет защитить конфиденциальность пользователей на рабочих устройствах и значительно уменьшить размер файлов дампа.

Дальнейшие действия

Помимо визуального анализа в Perfetto UI, вы можете запрашивать профили с помощью PerfettoSQL, анализировать трассировки в массовом порядке или анализировать профили с помощью ИИ.