Systrace — шта је то, алат за системско праћење Android-а

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

Systrace је алат за системско праћење Android-а који прикупља податке о раду Linux кернела, процесора, графичког акцелератора и свих процеса система у кратком временском периоду. За разлику од Traceview-а, који се фокусира на методе унутар апликације, Systrace приказује системску слику: оптерећење сваког CPU језгра, рад SurfaceFlinger-а, Binder позиве и GC циклусе. Према Google-у, 2024, алат је незаменљив за дијагностику пропуштених кадрова, честих сакупљања ђубрета и аномалија у UI нити.

Главно

  • Systrace — алат за нискoнивo системског праћења Android-а, који ради преко atrace/ftrace
  • Трагови садрже податке CPU, GPU, нити, SurfaceFlinger-а и Binder-а за период до 60 секунди
  • Анализа омогућава да се види тачан узрок пропуштених кадрова и блокирања UI нити
  • Интеграција са Android Studio и командном линијом за флексибилно хватање и аутоматизацију
  • Perfetto — наследник Systrace-а на Android 12+, који користи заједнички протобуфер формат

Шта је Systrace

Systrace је алат командне линије из Android SDK-а који хвата и обједињује податке из више извора праћења кернела (ftrace) и корисничког простора (atrace) у један HTML извештај. Алат се појавио у Android 4.1 (Jelly Bean) као замена за стари алат traceview за системско профилисање и дуго је остао стандардно средство дијагностике перформанси на Android платформи.

Архитектура Systrace-а

Systrace се ослања на ftrace — механизам праћења Linux кернела, доступан у Android-у од верзије 4.1. При покретању, Systrace активира задате категорије трагова: sched (планирач задатака), freq (фреквенција CPU), idle (стања мировања), workq (радни редови), binder, gfx и друге. Подаци се прикупљају у кружни бафер кернела и након заустављања дампа обједињују се у један фајл trace.html, који се отвара у било ком прегледачу.

Systrace у контексту Android Studio

Од Android Studio 3.1, Systrace је уграђен у CPU Profiler. У режиму “Trace System Calls” профилер покреће Systrace на повезаном уређају и приказује резултате директно у прозору Android Studio. Ово елиминише потребу за радом са командном линијом у основним случајевима, али задржава пуну функционалност — све категорије трагова, филтрирање и интерактивни тајмлајн. Перформансе уређаја током праћења се незнатно смањују, јер је ftrace пројектован за минимално оптерећење.

Како ради Systrace

Systrace користи два механизма прикупљања података: ftrace на нивоу кернела за системске догађаје и atrace у корисничком простору за Android-специфичне ознаке. ftrace региструје пребацивања контекста (sched_switch), промене фреквенције CPU (cpu_frequency), прекиде (irq_handler_entry) и друге догађаје. atrace додаје ознаке из Android фрејмворка — почетак и крај рендеровања кадра, позиве SurfaceFlinger-а и Binder трансакције.

Ланац рендеровања кадра у Systrace-у

Кључна могућност Systrace-а — визуелизација ланца рендеровања сваког кадра: апликација → BufferQueue → SurfaceFlinger → HWC (composer) → Display. Ако у било којој фази дође до кашњења, Systrace показује тачан узрок: апликација није стигла да припреми бафер, SurfaceFlinger је чекао VSync или HWC није могао да компонује слојеве. Frame Lifecycle на тајмлајну је обојен према статусима: зелено (на време), жуто (кашњење), црвено (пропуштено). Ова визуелизација је главни алат за оптимизацију UI перформанси.

Категорије трагова

Systrace подржава преко 20 категорија трагова, од којих свака укључује скуп повезаних догађаја. Важне категорије: gfx (рендеровање графике), input (обрада уноса), view (систем View), webview (WebView), power (потрошња енергије), hal (хардверска апстракција). За профилисање игара корисна је категорија gfx са детаљизацијом до GPU команди преко AGI (Android GPU Inspector).

Кључне могућности Systrace-а

Systrace пружа јединствен скуп могућности за Android које нису доступне у другим профилерима: системски тајмлајн, метрике на нивоу кернела и аутоматско откривање проблема.

Интерактивни тајмлајн

HTML извештај Systrace-а садржи вишеслојни тајмлајн, где свака трака одговара једном процесу или нити. Може се приближавати и удаљавати временска скала, кликати на догађаје за приказ детаља (трајање, процес-иницијатор, додатни аргументи). Кодирање бојама помаже у брзом сналажењу: зелени блокови — рад процеса, плави — чекање, наранџасти — прекид, бели — мировање.

Alert поруке

Systrace аутоматски анализира траг и приказује Alert поруке са назнаком проблематичних места. На пример: “Buffer underrun — SurfaceFlinger није стигао да прими бафер пре VSync-а” или “Long Binder transaction — 42 ms у нити Binder_1”. Сваки alert садржи линк ка одговарајућем делу тајмлајна и препоруку за исправку. Ово штеди сате ручне анализе и један је од главних разлога да се користи Systrace уместо ручног логовања.

Метод Trace.beginSection

Програмер може додати сопствене ознаке у Systrace траг кроз API Trace.beginSection и Trace.endSection. Ово омогућава праћење извршавања критичних делова кода директно на системском тајмлајну — на пример, означавање почетка и краја учитавања података или израчунавања распореда. Ознаке се приказују као засебни блокови на траци апликације и видљиве су поред системских догађаја.

КатегоријаПодациТипична примена
schedПребацивања контекста, стања мировањаБлокирање нити, contention
gfxVSync, припрема бафера, HWCПад кадрова, jank
binderBinder трансакције, латенцијаIPC кашњења, удаљени позиви
freqФреквенција CPU, scaling governorThrottling, потрошња енергије
gfx + AGIGPU команде, шејдериПерформансе игара

Како покренути Systrace

Покретање Systrace-а је могуће на два начина: преко Android Studio CPU Profiler-а (режим “Trace System Calls”) или преко командне линије помоћу python скрипта systrace.py из фасцикле platform-tools. Сваки начин има своје сценарије примене.

Покретање преко Android Studio

Повежите уређај, отворите Profiler (View → Tool Windows → Profiler), изаберите свој процес, пређите на картицу CPU, изаберите режим “Trace System Calls” и притисните Record. Након 5–30 секунди притисните Stop — Android Studio ће покренути Systrace на уређају, сачекати завршетак и учитати резултат. Ограничење: снимање је могуће само док је Profiler отворен, што је непрактично за дуге сценарије или аутоматизацију.

Покретање из командне линије

За флексибилнију контролу користите скрипт systrace.py. Наведите категорије трагова, трајање и име излазног фајла. Пример: хватање података gfx, input и sched у трајању од 10 секунди. За покретање је потребан Python 2.7+ и повезан уређај са USB отклањањем грешака. На Android 12+, Systrace је замењен Perfetto-ом — команда остаје иста, али скрипт преусмерава позиве на perfetto.

bash
# Основно покретање systrace-а у трајању од 10 секунди
$ python systrace.py \
    --time=10 \
    -o trace.html \
    gfx input sched

# Само gfx категорија за анализу UI-а
$ python systrace.py \
    --time=5 \
    -t gfx \
    -o ui_trace.html

Подешавање корисничких ознака у коду

Да би се ваш код појавио на Systrace тајмлајну, обавите критични део у Trace.beginSection / Trace.endSection. Важно је да beginSection и endSection буду строго упарени — иначе ће Systrace приказати нетачан тајмлајн. У Kotlin-у је згодно користити inline-extension како би се гарантовало затварање секције чак и при изузетку.

kotlin
import android.os.Trace

fun traceSection(name: String, block: () -> Unit) {
    Trace.beginSection(name)
    try {
        block()
    } finally {
        Trace.endSection()
    }
}

// Коришћење у коду
traceSection("load_screen_data") {
    fetchData()
    updateUI()
}

Читање HTML извештаја Systrace-а

Извештај Systrace-а је самосталан HTML фајл који се може отворити у Chrome-у, Edge-у или Firefox-у. Садржи интерактивни тајмлајн, панел за избор процеса, листу alert порука и кључне метрике (брзина кадрова, искоришћеност CPU, Binder трансакције). Разумевање структуре извештаја је кључна вештина за ефикасно профилисање.

Тајмлајн и навигација

Тајмлајн приказује време слева надесно. Сваки процес и нит — посебна трака. Тастери W/S приближавају/удаљавају, A/D померају по времену. Изаберите област мишем за увећавање дела. VSync линије показују границе кадрова (сваких 16.6 ms при 60 FPS). Ако између две VSync линије не стане комплетан циклус рендеровања — кадар је пропуштен. Обратите пажњу на траку SurfaceFlinger: ако је дуго заузета (наранџасти блок), значи да композиција слојева успорава укупно рендеровање.

Анализа alert порука

Панел Alerts у левом делу извештаја садржи аутоматски откривене проблеме. Сваки alert је кликабилан — при клику, тајмлајн се помера ка проблематичном тренутку. Најчешћи alert: “Long Sync” (дуга синхронизација нити), “Scheduling Delay” (кашњење планирача), “Buffer Overrun” (прекорачење бафера SurfaceFlinger-а). Ако alert показује вредност око 100 ms за Scheduling Delay, то директно указује да је UI нит чекала CPU због позадинског оптерећења — потребно је преместити тешка израчунавања у Worker Thread.

Frame Lifecycle и jank

За анализу пропуштених кадрова укључите траке SurfaceFlinger и app.gfx. Сваки кадар се приказује као правоугаоник: зелени (≤16 ms), жути (16–32 ms), црвени (>32 ms). Ако видите црвени правоугаоник на траци апликације, кликните на њега — Systrace ће показати који тачно метод (или системски позив) је прекорачио границу. Према Google-у (Android Performance Patterns, 2023), 70% jank проблема је узроковано дугим onBindViewHolder-ом или честим GC.

Systrace vs Perfetto: прелаз на нови формат

Perfetto је наследник Systrace-а, представљен од стране Google-а у Android 9 (Pie) као експериментални алат и постао главни од Android 12. Perfetto користи савремени протобуфер формат података, подржава дуге сесије (сати уместо секунди) и има Web UI за преглед трагова. Размотримо кључне разлике два система.

КритеријумSystracePerfetto
ФорматHTML извештај (trace.html)Протобуфер (.trace / .perfetto-trace)
ТрајањеДо 60 секундиСати, гигабајти података
ИнтерфејсУграђени HTMLWeb UI (ui.perfetto.dev)
КатегоријеФиксне (ftrace + atrace)Прошириве (SQL упити на трагу)
МобилностСамо AndroidAndroid, Linux, Chrome, Windows

Упркос преласку на Perfetto, вештина рада са Systrace-ом остаје актуелна: на уређајима до Android 11 користи се подразумевано, а Perfetto задржава уназад компатибилност са Systrace категоријама. Android Studio CPU Profiler користи Perfetto за нове уређаје и Systrace за старе — транспарентно за корисника. За CI/CD препоручује се коришћење Perfetto-а, јер је његов формат погодан за аутоматску обраду кроз Python и SQL.

Примери коришћења Systrace-а

За практично савладавање Systrace-а размотримо два сценарија: проналажење узрока пропуштених кадрова при скроловању и дијагностика честог GC-а који блокира UI нит.

Проналажење jank при скроловању RecyclerView-а

Покрените Systrace са категоријом gfx у трајању од 10 секунди, скролујте листу у апликацији. У извештају пронађите делове са црвеним кадровима. Кликните на проблематични кадар и погледајте траку app — ако се тамо налази блок “inflateLayout” или “onBindViewHolder” ширине >16 ms, проблем је у развлачењу распореда или везивању података. Решење: оптимизујте распоред (смањите дубину ViewGroup, ViewStub), преместите учитавање слика у Glide са onAttachedToWindow.

Дијагностика GC Throughput-а

Systrace са категоријом freq и sched омогућава да видите колико често GC циклуси истискују UI нит. Пронађите траку апликације на тајмлајну — ако видите периодичне блокове трајања 20–50 ms са именом “Concurrent GC”, то значи да сакупљач ђубрета ради пречесто. Додајте категорију “dalvik” за детаљну анализу. Решење: конвертујте Bitmap у ByteBuffer, користите пул објеката (ObjectPool) за честе алокације, смањите фрагментацију хипа кроз ART аргумент.

bash
# Покретање са категоријама за анализу UI + GC
$ python systrace.py \
    --time=15 \
    -o gc_analysis.html \
    gfx sched dalvik freq

# Хватање у трајању од 30 секунди за поновљиви тест
$ python systrace.py \
    --time=30 \
    --app=com.example.app \
    -o app_trace.html

Често постављана питања

Може ли се Systrace покренути без root права?

Да, за покретање Systrace-а није потребан root приступ. Алат користи atrace, који је доступан на сваком уређају са укљученим USB отклањањем грешака. Неке категорије (power, freq) могу захтевати потпис система, али основне (gfx, sched, input) раде на свим уређајима.

Која је максимална величина фајла трага?

Ограничење од 60 секунди повезано је са запремином кружног бафера ftrace-а — при дугом снимању бафер се преписује. Perfetto уклања ово ограничење: могуће је снимати сате и добити трагове величине до неколико гигабајта са преносом преко USB-а или стримовним записом на диск.

Зашто у HTML извештају нема података моје апликације?

Могући узроци: апликација није пребачена у debuggable режим, није додата заставица android:debuggable=”true” у манифесту или се користи релеазна верзија. Такође проверите да ли су у категоријама наведени --app=com.example.app — иначе Systrace хвата само системске процесе.

Како додати сопствену ознаку у Systrace из native кода?

За C++ користите ATRACE_BEGIN и ATRACE_END из библиотеке libcutils. Укључите заглавни фајл и обавите жељени део. Ознака ће се појавити у Systrace-у на траци вашег процеса, што је посебно корисно за анализу гејминг енџина (Unity, Unreal).

Чим заменити Systrace на Android 12+?

На Android 12 и новијим користите Perfetto. Инсталирајте perfetto агента на уређај преко ADB-а, покрените снимање у JSON формату. За брзи преглед користите Perfetto Web UI (ui.perfetto.dev), а за CI — командин извоз са TraceProcessor-ом у Python-у.

Закључак

  • Systrace — системски трасер Android-а, који ради на нивоу кернела кроз ftrace и atrace
  • Показује оптерећење CPU, GPU, SurfaceFlinger-а и Binder трансакције на јединственом тајмлајну
  • HTML извештај садржи аутоматске Alert поруке са назнаком проблема и препорука
  • Покретање преко Android Studio Profiler-а или командне линије са systrace.py
  • UI нит је критична: сваки кадар мора да стане у 16.6 ms за 60 FPS
  • На Android 12+ Systrace је замењен Perfetto-ом са подршком за дуге сесије и SQL упите
  • Препоручује се комбиновање Systrace-а и Traceview-а за системско и апликативно профилисање

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

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

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

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