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 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 прима податке од механизма System Tracing у Android Runtime (ART). Када се апликација покрене са укљученим праћењем, ART бележи у бафер временску ознаку почетка и краја сваког извршеног метода, укључујући име класе, име метода и ID нити.
// Запуск трассировки в коде приложения
Debug.startMethodTracing("app_trace")
// Критический участок кода для профилирования
loadHeavyData()
// Остановка трассировки — файл сохранён на устройство
Debug.stopMethodTracing()
System Tracing ради на нивоу виртуелне машине ART и региструје сваки позив метода са прецизношћу до микросекунди. Подаци се уписују у кружни бафер како би се утицај на перформансе саме апликације свео на минимум. Након заустављања праћења, бафер се исписује у .trace датотеку на унутрашњој меморији уређаја.
.trace датотека садржи заглавље са верзијом формата и временом почетка, након чега следе записи о сваком позиву: thread ID, method ID, временска ознака уласка и временска ознака изласка. Android Studio аутоматски учитава .trace датотеку и гради два основна приказа: Timeline Panel за хронологију и Profile Panel за хијерархију позива. Подразумевана максимална величина бафера је 8 MB, али се може повећати кроз Debug.startMethodTracing(filename, maxSize).
Traceview пружа неколико комплементарних приказа података, од којих сваки решава свој задатак у анализи перформанси.
Call Chart је хоризонтални тајмлајн, где је свака нит приказана на посебној стази. Методи су приказани као обојени правоугаоници: ширина правоугаоника је пропорционална времену извршења, а угњежђење одражава хијерархију позива. Ако метод позове други метод, подређени правоугаоник се црта унутар надређеног. Ова визуелизација омогућава тренутно уочавање операција које су блокирале нит.
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 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 MB) и заставице. Заставица TRACE_COUNT_ALLOCS додаје бројање алокација објеката — корисно за проналажење цурења меморије. За профилисање изворног кода Traceview није погодан — користите SimplePerf или Perfetto. За дуготрајне тестове (више од 30 секунди) препоручује се повећање бафера на 64–128 MB кроз параметар 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 ms — ако неки позив прекорачи овај праг, апликација испушта кадар и корисник види трзање. Према препорукама Google-а, укупно време свих позива у UI нити по једном кадру не би требало да прелази 8–10 ms, остављајући резерву за системске операције.
Иако и 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 секунди |
| Изворни код | Не подржава | Подржава преко atrace ознака |
У пракси оба алата се допуњују: прво Systrace помаже да се одреди која системска компонента изазива проблем (нпр. чести GC или блокирања Binder-а), а затим Traceview омогућава да се удуби у одређени метод унутар апликације. У Android Studio оба алата су обједињена у Android Profiler-у — CPU Profiler аутоматски бира оптимални режим снимања. На уређајима са Android 12+ Systrace и Traceview раде на Perfetto-у, што даје јединствени формат података за све врсте профилисања.
За ефикасно профилисање није довољно само покренути праћење — потребно је правилно поставити тачке снимања и интерпретирати резултате. Испод су дата два практична примера: профилисање RecyclerView листе и поређење два алгоритма у тесту перформанси.
Први пример — праћење критичне путање при скроловању листе. RecyclerView позива onBindViewHolder за сваки видљиви елемент, и ако се овај метод извршава дуже од 16 ms, скроловање постаје трзаво. Праћење око 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 MB, али се може повећати до 256 MB преко параметра maxSize у Debug.startMethodTracing. За дуготрајне сесије профилисања користите Perfetto, који нема строго ограничење величине трага.
Traceview ради на нивоу Android Runtime (ART) и види само управљане Java и Kotlin методе. За профилисање изворног кода (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. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође