Traceview: шта је то, алат за праћење и профилисање Андроида

Аутор: IT Sectr Објављено: 2026-03-30 Време читања: 9 мин

Traceview је уграђени алат за графичко праћење у Android Studio који бележи и визуализује извршавање метода апликације у погледу времена и CPU ресурса. За разлику од Systrace, који приказује системске процесе на нивоу језгра, Traceview се фокусира на Java и Kotlin методе унутар апликације, позиване у ланцу од корисничког уноса до UI рендеровања. Према Google, 2024, алат омогућава проналажење уских грла перформанси на нивоу појединачних позива и оптимизацију кода пре објављивања.

Главне ствари

  • Traceview — графички профајлер метода Android у Android Studio, заснован на System Tracing
  • Праћење бележи трајање сваког метода, број позива и CPU време
  • Тајмлајн Traceview приказује позиве у хронолошком редоследу са угњежђењем нити
  • Профилисање помаже у проналажењу спорих метода, непотребних алокација и блокирања
  • Интеграција са Android Profiler и Debug.startMethodTracing API за флексибилно снимање

Шта је Traceview у Android-у

Traceview је графички профајлер уграђен у Android Studio који приказује трагове извршења метода Android апликације у облику тајмлајна и табеле позива. Део је Android SDK и доступан је кроз Android Profiler од Android Studio 3.0, као и преко командне линије алата dmtracedump.

Намена алата

Главни задатак Traceview-а је да помогне програмеру да пронађе методе који троше највише CPU времена. За разлику од једноставног логирања, Traceview бележи тачно време уласка и изласка из сваког метода, гради Call Chart и Top-Down стабло, што омогућава визуелно откривање аномалија перформанси. Алат је посебно користан при профилисању UI нити, где кашњење од 16 ms доводи до испуштања кадрова.

Историја и развој

Traceview се појавио у раним верзијама Android SDK као самостални алат за преглед .trace датотека. Са изласком Android Studio 3.0 (2017) постао је део Android Profiler-а, добивши интеграцију са живим тајмлајном CPU, меморије и мреже. Према Google I/O 2018, тим Android Studio наставља да развија профајлер, додајући подршку за изворни код кроз systrace и perfetto. У актуелним верзијама Android Studio Traceview ради на Perfetto формату, али задржава уназад компатибилност са класичним .trace.

Како ради Traceview

Traceview прима податке од механизма System Tracing у Android Runtime (ART). Када се апликација покрене са укљученим праћењем, ART бележи у бафер временску ознаку почетка и краја сваког извршеног метода, укључујући име класе, име метода и ID нити.

kotlin
// Запуск трассировки в коде приложения
Debug.startMethodTracing("app_trace")

// Критический участок кода для профилирования
loadHeavyData()

// Остановка трассировки — файл сохранён на устройство
Debug.stopMethodTracing()

System Tracing ради на нивоу виртуелне машине ART и региструје сваки позив метода са прецизношћу до микросекунди. Подаци се уписују у кружни бафер како би се утицај на перформансе саме апликације свео на минимум. Након заустављања праћења, бафер се исписује у .trace датотеку на унутрашњој меморији уређаја.

Формат .trace датотеке

.trace датотека садржи заглавље са верзијом формата и временом почетка, након чега следе записи о сваком позиву: thread ID, method ID, временска ознака уласка и временска ознака изласка. Android Studio аутоматски учитава .trace датотеку и гради два основна приказа: Timeline Panel за хронологију и Profile Panel за хијерархију позива. Подразумевана максимална величина бафера је 8 MB, али се може повећати кроз Debug.startMethodTracing(filename, maxSize).

Кључне могућности Traceview

Traceview пружа неколико комплементарних приказа података, од којих сваки решава свој задатак у анализи перформанси.

Call Chart (граф позива)

Call Chart је хоризонтални тајмлајн, где је свака нит приказана на посебној стази. Методи су приказани као обојени правоугаоници: ширина правоугаоника је пропорционална времену извршења, а угњежђење одражава хијерархију позива. Ако метод позове други метод, подређени правоугаоник се црта унутар надређеног. Ова визуелизација омогућава тренутно уочавање операција које су блокирале нит.

Top-Down и Bottom-Up стабла

Top-Down стабло показује време извршења метода са свим његовим угњежђеним позивима — Inclusive Time. Bottom-Up стабло, насупрот томе, показује који надређени методи су позивали дати метод — корисно за проналажење извора тешке операције. Разлика између Inclusive и Exclusive Time је критична: метод може сам брзо да ради, али позива спор подређени метод, а то је видљиво само у Inclusive Time-у.

Претрага и филтрација

Traceview подржава претрагу по имену метода, пакету или класи. Резултати се истичу на тајмлајну, а у Profile Panel-у се приказује статистика само за пронађене методе. Такође је доступна филтрација по нитима — може се искључити приказ позадинских нити и фокусирати се на главну (UI) нит, где су кашњења најкритичнија.

МетрикаОписЈединица
Inclusive TimeУкупно време метода + свих његових подређених позиваμs / ms
Exclusive TimeВреме само метода без подређених позиваμs / ms
Calls + RecurБрој позива са урачунавањем рекурзијеброј
CPU TimeВреме стварно потрошено на CPU (без чекања)μs / ms
Real TimeКалендарско време од уласка до изласка из методаμs / ms

Извоз података

Traceview омогућава извоз трагова у CSV формату за даљу анализу у табелама или израду графикона. У Android Studio се такође може копирати изабрани фрагмент тајмлајна као слика — за уметање у извештај о грешци или документацију. За CI/CD доступан је извоз у Perfetto формату преко алата cmdline-tools.

Како користити Traceview у Android Studio

Профилисање путем Traceview-а доступно је на два начина: преко Android Profiler-а са живим снимањем и програмским покретањем Debug API-ја. Први начин је погодан за ad-hoc анализу, други — за поновљиве тестове перформанси.

Снимање преко Android Profiler-а

В 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.

kotlin
Debug.startMethodTracing(
    "heavy_computation",
    Debug.TRACE_COUNT_ALLOCS
)

processLargeDataset()

Debug.stopMethodTracing()

Подешавање параметара праћења

Debug.startMethodTracing прима три параметра: име датотеке (без екстензије), максималну величину бафера (подразумевано 8 MB) и заставице. Заставица TRACE_COUNT_ALLOCS додаје бројање алокација објеката — корисно за проналажење цурења меморије. За профилисање изворног кода Traceview није погодан — користите SimplePerf или Perfetto. За дуготрајне тестове (више од 30 секунди) препоручује се повећање бафера на 64–128 MB кроз параметар maxSize.

Читање тајмлајна Traceview

Тајмлајн Traceview се састоји од два панела: горњи — Timeline Panel са обојеним правоугаоницима позива, доњи — Profile Panel са табелом статистике. Timeline Panel приказује извршавање нити слева надесно, где сваки правоугаоник представља један позив метода. Боја правоугаоника је кодирана према типу метода: системски позиви Android-а (зелена), апликативни методи (плава), позиви библиотека (наранџаста).

Како читати Profile Panel

У 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 ms — ако неки позив прекорачи овај праг, апликација испушта кадар и корисник види трзање. Према препорукама Google-а, укупно време свих позива у UI нити по једном кадру не би требало да прелази 8–10 ms, остављајући резерву за системске операције.

Traceview vs Systrace: поређење алата

Иако и Traceview и Systrace спадају у алате за праћење Android-а, они решавају различите задатке и користе се у различитим фазама профилисања. Главна разлика је ниво детаља: Traceview ради на нивоу Java/Kotlin метода, Systrace — на нивоу системских процеса (CPU, GPU, Binder, SurfaceFlinger).

КритеријумTraceviewSystrace
НивоМетоди (Java/Kotlin)Системски процеси (CPU/GPU/IO)
ИнтерфејсAndroid Studio ProfilerКомандна линија + HTML извештај
ПодациInclusive/Exclusive TimeОптерећење CPU, фреквенција кадрова
ТрајањеДо 30 сек (Profiler), неограничено (API)До 60 секунди
Изворни кодНе подржаваПодржава преко atrace ознака

У пракси оба алата се допуњују: прво Systrace помаже да се одреди која системска компонента изазива проблем (нпр. чести GC или блокирања Binder-а), а затим Traceview омогућава да се удуби у одређени метод унутар апликације. У Android Studio оба алата су обједињена у Android Profiler-у — CPU Profiler аутоматски бира оптимални режим снимања. На уређајима са Android 12+ Systrace и Traceview раде на Perfetto-у, што даје јединствени формат података за све врсте профилисања.

Примери кода са Traceview

За ефикасно профилисање није довољно само покренути праћење — потребно је правилно поставити тачке снимања и интерпретирати резултате. Испод су дата два практична примера: профилисање RecyclerView листе и поређење два алгоритма у тесту перформанси.

Профилисање учитавања RecyclerView-а

Први пример — праћење критичне путање при скроловању листе. RecyclerView позива onBindViewHolder за сваки видљиви елемент, и ако се овај метод извршава дуже од 16 ms, скроловање постаје трзаво. Праћење око onBindViewHolder-а ће показати које тачно операције унутар њега заузимају време.

kotlin
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 циклуса) и под истим условима (позадинско оптерећење, температура).

kotlin
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-а?

Traceview је језгро визуелизације трагова унутар Android Profiler-а. Профајлер пружа додатни UI за покретање и заустављање снимања, док је Traceview задужен за приказ тајмлајна и статистике метода. Оба користе исти .trace формат података.

Да ли се Traceview може користити на физичком уређају?

Да, Traceview ради и на емулатору и на физичком Android уређају. За то USB отклањање грешака мора бити укључено, а апликација састављена у debuggable режиму. На физичком уређају подаци су прецизнији, јер емулатор може искривити времена због виртуелизације.

Која је максимална величина .trace датотеке?

Подразумевана максимална величина је 8 MB, али се може повећати до 256 MB преко параметра maxSize у Debug.startMethodTracing. За дуготрајне сесије профилисања користите Perfetto, који нема строго ограничење величине трага.

Зашто Traceview не приказује изворне методе?

Traceview ради на нивоу Android Runtime (ART) и види само управљане Java и Kotlin методе. За профилисање изворног кода (C/C++ кроз JNI) користите SimplePerf или Perfetto са FTrace, који хватају системске позиве на нивоу језгра.

Како отворити .trace датотеку без Android Studio?

Користите алат dmtracedump из Android SDK (фасцикла platform-tools). Он генерише HTML извештај са тајмлајном и статистиком у облику табеле. На Windows-у покретање: dmtracedump -h trace.trace > report.html. Алтернатива — Perfetto UI (ui.perfetto.dev), који подржава увоз .trace формата.

Закључак

  • Traceview — графички профајлер метода Android за анализу перформанси у Android Studio
  • Алат ради на нивоу ART и бележи Inclusive и Exclusive Time сваког Java/Kotlin метода
  • Два основна приказа: Call Chart за тајмлајн и Profile Panel за хијерархијску статистику
  • Снимање је доступно кроз Android Profiler (UI) или програмски кроз Debug.startMethodTracing
  • За UI нит сваки метод мора да се уклапа у 16 ms, иначе апликација испушта кадрове
  • Traceview није погодан за изворни код — користите SimplePerf или Perfetto
  • Препоручује се комбиновање Traceview и Systrace за комплетну слику перформанси

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође