Traceview — это встроенный в Android Studio инструмент графической трассировки, который записывает и визуализирует выполнение методов приложения в разрезе времени и ресурсов CPU. В отличие от Systrace, который показывает системные процессы на уровне ядра, Traceview фокусируется на Java- и Kotlin-методах внутри приложения, вызываемых по цепочке от пользовательского ввода до UI-отрисовки. По данным Google, 2024, инструмент позволяет находить узкие места производительности на уровне отдельных вызовов и оптимизировать код до релиза.
Главное
Traceview — это графический профайлер, встроенный в Android Studio, который отображает трейсы выполнения методов Android-приложения в виде таймлайна и таблицы вызовов. Он входит в состав Android SDK и доступен через Android Profiler начиная с Android Studio 3.0, а также через утилиту командной строки dmtracedump.
Основная задача Traceview — помочь разработчику найти те методы, которые тратят больше всего времени CPU. В отличие от простого логирования, Traceview записывает точное время входа и выхода из каждого метода, строит Call Chart и Top-Down-дерево, что позволяет визуально обнаружить аномалии производительности. Инструмент особенно полезен при профилировании UI-потока, где задержка в 16 мс приводит к пропуску кадра.
Traceview появился ещё в ранних версиях Android SDK как standalone-утилита для просмотра .trace-файлов. С выходом Android Studio 3.0 (2017) он стал частью Android Profiler, получив интеграцию с живым таймлайном CPU, памяти и сети. По данным Google I/O 2018, команда Android Studio продолжает развивать профайлер, добавляя поддержку Native-кода через systrace и perfetto. В актуальных версиях Android Studio Traceview работает поверх Perfetto-формата, но сохраняет обратную совместимость с классическим .trace.
Traceview получает данные от механизма System Tracing в Android Runtime (ART). Когда приложение запускается с включённой трассировкой, ART записывает в буфер timestamp начала и конца каждого выполняемого метода, включая имя класса, имя метода и ID потока.
// Запуск трассировки в коде приложения
Debug.startMethodTracing("app_trace")
// Критический участок кода для профилирования
loadHeavyData()
// Остановка трассировки — файл сохранён на устройство
Debug.stopMethodTracing()
System Tracing работает на уровне виртуальной машины ART и регистрирует каждый вызов метода с точностью до микросекунд. Данные записываются в кольцевой буфер, чтобы минимизировать влияние на производительность самого приложения. После остановки трассировки буфер сбрасывается в файл .trace на внутреннем хранилище устройства.
Файл .trace содержит заголовок с версией формата и временем старта, за которым следуют записи о каждом вызове: thread ID, method ID, timestamp входа и timestamp выхода. Android Studio автоматически загружает .trace файл и строит два основных представления: Timeline Panel для хронологии и Profile Panel для иерархии вызовов. По умолчанию максимальный размер буфера — 8 МБ, но его можно увеличить через Debug.startMethodTracing(filename, maxSize).
Traceview предоставляет несколько взаимодополняющих представлений данных, каждое из которых решает свою задачу при анализе производительности.
Call Chart — это горизонтальный таймлайн, где каждый поток отображается отдельной дорожкой. Методы показаны цветными прямоугольниками: ширина прямоугольника пропорциональна времени выполнения, а вложенность отражает иерархию вызовов. Если метод вызвал другой метод, дочерний прямоугольник рисуется внутри родительского. Эта визуализация позволяет мгновенно увидеть, какие операции заблокировали поток.
Top-Down дерево показывает время выполнения метода с учётом всех его вложенных вызовов — Inclusive Time. Bottom-Up дерево, напротив, показывает, какие родительские методы вызывали данный метод — полезно для поиска источника тяжёлой операции. Разница между Inclusive и Exclusive Time критична: метод может сам работать быстро, но вызывать медленный дочерний метод, и это видно только в Inclusive Time.
Traceview поддерживает поиск по имени метода, пакету или классу. Результаты подсвечиваются на таймлайне, а в Profile Panel отображается статистика только по найденным методам. Также доступна фильтрация по потокам — можно отключить отображение фоновых потоков и сосредоточиться на главном (UI) потоке, где задержки наиболее критичны.
| Метрика | Описание | Единица |
|---|---|---|
| Inclusive Time | Общее время метода + всех его дочерних вызовов | мкс / мс |
| Exclusive Time | Время только самого метода без дочерних вызовов | мкс / мс |
| Calls + Recur | Количество вызовов с учётом рекурсии | число |
| CPU Time | Время, реально потраченное на CPU (без ожидания) | мкс / мс |
| Real Time | Календарное время от входа до выхода из метода | мкс / мс |
Traceview позволяет экспортировать трейсы в формате CSV для дальнейшего анализа в таблицах или построения графиков. В Android Studio можно также скопировать выделенный фрагмент таймлайна как изображение — для вставки в баг-репорт или документацию. Для CI/CD доступен экспорт в формате Perfetto через утилиту cmdline-tools.
Профилирование через Traceview доступно двумя способами: через Android Profiler с живым захватом и через программный запуск Debug API. Первый способ удобен для ad-hoc анализа, второй — для воспроизводимых тестов производительности.
В Android Studio откройте вкладку Profiler (View → Tool Windows → Profiler), выберите устройство и процесс вашего приложения. Нажмите на сегмент CPU, затем выберите режим "Trace Java Methods" и нажмите Record. После взаимодействия с приложением нажмите Stop — Traceview автоматически откроет записанный трейс. Длительность записи по умолчанию ограничена 30 секундами, но лимит можно изменить в настройках профайлера.
Для точного профилирования конкретного участка кода используйте Debug.startMethodTracing и Debug.stopMethodTracing. Файл сохраняется во внешнее хранилище приложения по пути, который возвращает context.getExternalFilesDir(null). После завершения перенесите .trace файл на компьютер через Android Studio Device Explorer, затем откройте через File → Open в Android Studio.
Debug.startMethodTracing(
"heavy_computation",
Debug.TRACE_COUNT_ALLOCS
)
processLargeDataset()
Debug.stopMethodTracing()
Debug.startMethodTracing принимает три параметра: имя файла (без расширения), максимальный размер буфера (по умолчанию 8 МБ) и флаги. Флаг TRACE_COUNT_ALLOCS добавляет подсчёт аллокаций объектов — полезно для поиска утечек памяти. Для профилирования native-кода Traceview не подходит — используйте SimplePerf или Perfetto. Для длительных тестов (более 30 секунд) рекомендуется увеличить буфер до 64–128 МБ через параметр maxSize.
Таймлайн Traceview состоит из двух панелей: верхняя — Timeline Panel с цветными прямоугольниками вызовов, нижняя — Profile Panel с таблицей статистики. Timeline Panel показывает выполнение потоков слева направо, где каждый прямоугольник — это один вызов метода. Цвет прямоугольника кодируется по типу метода: системные вызовы Android (зелёный), прикладные методы (синий), вызовы библиотек (оранжевый).
В Profile Panel каждая строка — это метод со столбцами Inclusive Time, Exclusive Time, Calls + Recur и CPU Time. Сортируйте таблицу по Inclusive Time (по убыванию), чтобы первыми увидеть методы, которые суммарно заняли больше всего времени. Если метод с высоким Inclusive Time имеет низкий Exclusive Time — проблема в его дочерних вызовах, и нужно раскрыть дерево. Например, ListView.getView может иметь высокий Inclusive Time из-за вызова загрузки изображения.
Ищите методы с аномально высоким Real Time при низком CPU Time — это указывает на блокировку (ожидание I/O, сетевая операция, lock contention). Методы с высоким CPU Time требуют оптимизации алгоритма. Для UI-потока критично, чтобы каждый метод укладывался в 16 мс — если какой-то вызов превышает этот порог, приложение пропускает кадр и пользователь видит джиттер. По рекомендациям Google, суммарное время всех вызовов в UI-потоке на один фрейм не должно превышать 8–10 мс, оставляя запас на системные операции.
Хотя и Traceview, и Systrace относятся к инструментам трассировки Android, они решают разные задачи и используются на разных этапах профилирования. Основное различие — уровень детализации: Traceview работает на уровне Java/Kotlin-методов, Systrace — на уровне системных процессов (CPU, GPU, Binder, SurfaceFlinger).
| Критерий | Traceview | Systrace |
|---|---|---|
| Уровень | Методы (Java/Kotlin) | Системные процессы (CPU/GPU/IO) |
| Интерфейс | Android Studio Profiler | Командная строка + HTML-отчёт |
| Данные | Inclusive/Exclusive Time | Загрузка CPU, частота кадров |
| Длительность | До 30 сек (Profiler), неограниченно (API) | До 60 секунд |
| Native код | Не поддерживает | Поддерживает через atrace-метки |
На практике оба инструмента дополняют друг друга: сначала Systrace помогает определить, какой системный компонент вызывает проблему (например, частые GC или блокировки Binder), а затем Traceview позволяет углубиться в конкретный метод внутри приложения. В Android Studio оба инструмента объединены в Android Profiler — CPU Profiler автоматически подбирает оптимальный режим записи. На устройствах с Android 12+ Systrace и Traceview работают поверх Perfetto, что даёт единый формат данных для всех видов профилирования.
Для эффективного профилирования недостаточно просто запустить трассировку — нужно правильно разместить точки захвата и интерпретировать результаты. Ниже приведены два практических примера: профилирование списка RecyclerView и сравнение двух алгоритмов в тесте производительности.
Первый пример — трассировка критического пути при прокрутке списка. RecyclerView вызывает onBindViewHolder для каждого видимого элемента, и если этот метод выполняется дольше 16 мс, прокрутка становится дёрганой. Трассировка вокруг onBindViewHolder покажет, какие именно операции внутри него занимают время.
class MyAdapter : RecyclerView.Adapter<ViewHolder>() {
override fun onBindViewHolder(
holder: ViewHolder,
position: Int
) {
Debug.startMethodTracing("bind_card_$position")
holder.bind(items[position])
Debug.stopMethodTracing()
}
}
Второй пример — A/B-тест скорости двух реализаций: загрузка изображений через Glide против ручного BitmapFactory. Такой трейс позволяет объективно сравнить Inclusive Time обеих стратегий и выбрать оптимальную. Важно запускать каждый тест на прогретом устройстве (после 3–5 циклов) и при одинаковых условиях (фоновая нагрузка, температура).
fun compareImageLoadingStrategies() {
// Тест A: Glide
Debug.startMethodTracing("glide_test")
loadWithGlide()
Debug.stopMethodTracing()
// Тест B: BitmapFactory
Debug.startMethodTracing("bitmap_test")
loadWithBitmapFactory()
Debug.stopMethodTracing()
}
После запуска откройте оба .trace файла в Android Studio и сравните Inclusive Time в Profile Panel. Если Glide показывает 3x меньший Inclusive Time при той же задаче — это объективное основание выбрать библиотеку. По данным Тони Джона (разработчик Glide, 2023), библиотека использует кэширование и пул потоков, что даёт выигрыш до 40% на повторяющихся загрузках.
Часто задаваемые вопросы
Traceview — это ядро визуализации трейсов внутри Android Profiler. Профайлер предоставляет дополнительный UI для запуска и остановки записи, тогда как Traceview отвечает за отображение таймлайна и статистики методов. Оба используют один и тот же формат .trace данных.
Да, Traceview работает как на эмуляторе, так и на физическом устройстве Android. Для этого USB-отладка должна быть включена, а приложение собрано в debuggable-режиме. На физическом устройстве данные более точные, так как эмулятор может искажать тайминги из-за виртуализации.
Максимальный размер по умолчанию — 8 МБ, но его можно увеличить до 256 МБ через параметр maxSize в Debug.startMethodTracing. Для длительных сессий профилирования используйте Perfetto, который не имеет жёсткого ограничения на размер трейса.
Traceview работает на уровне Android Runtime (ART) и видит только управляемые методы Java и Kotlin. Для профилирования native-кода (C/C++ через JNI) используйте SimplePerf или Perfetto с FTrace, которые захватывают системные вызовы на уровне ядра.
Используйте утилиту dmtracedump из Android SDK (папка platform-tools). Она генерирует HTML-отчёт с таймлайном и статистикой в виде таблицы. На Windows запуск: dmtracedump -h trace.trace > report.html. Альтернатива — Perfetto UI (ui.perfetto.dev), который поддерживает импорт .trace формата.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также