Systrace egy Android rendszernyomkövető eszköz, amely adatokat gyűjt a Linux kernel, a processzor, a grafikus gyorsító és az összes rendszerfolyamat működéséről rövid idő alatt. Ellentétben a Traceview-val, amely az alkalmazáson belüli metódusokra összpontosít, a Systrace a rendszerképet mutatja: az egyes CPU magok terhelését, a SurfaceFlinger munkáját, a Binder-hívásokat és a GC-ciklusokat. A Google, 2024 szerint az eszköz nélkülözhetetlen a kihagyott keretek, a gyakori szemétgyűjtés és az UI szál rendellenességeinek diagnosztizálásához.
Főbb pontok
Systrace egy parancssori eszköz az Android SDK-ból, amely a kernel (ftrace) és a felhasználói tér (atrace) több nyomkövetési forrásából származó adatokat rögzíti és egyetlen HTML jelentésbe egyesíti. Az eszköz az Android 4.1-ben (Jelly Bean) jelent meg a régi traceview rendszerprofilozó eszköz helyettesítőjeként, és hosszú ideig az Android platform teljesítménydiagnosztikájának szabványos eszköze maradt.
Systrace az ftrace-re támaszkodik — a Linux kernel nyomkövetési mechanizmusára, amely Android 4.1 verziótól elérhető. A Systrace indításakor aktiválja a megadott nyomkövetési kategóriákat: sched (feladatütemező), freq (CPU frekvencia), idle (tétlen állapotok), workq (munka sorok), binder, gfx és mások. Az adatok a kernel gyűrűpufferében gyűlnek, és leállítás után egy trace.html fájlba egyesülnek, amely bármely böngészőben megnyitható.
Az Android Studio 3.1-től kezdve a Systrace beépült a CPU Profilerbe. A “Trace System Calls” módban a profiler elindítja a Systrace-t a csatlakoztatott eszközön, és az eredményeket közvetlenül az Android Studio ablakában jeleníti meg. Ez kiküszöböli a parancssor használatának szükségességét alapvető esetekben, miközben megtartja a teljes funkcionalitást — minden nyomkövetési kategória, szűrés és interaktív idővonal. Az eszköz teljesítménye a nyomkövetés során enyhén csökken, mivel az ftrace minimális többletterhelésre lett tervezve.
Systrace két adatgyűjtő mechanizmust használ: ftrace a kernel szintjén a rendszereseményekhez és atrace a felhasználói térben az Android-specifikus jelölőkhöz. Az ftrace regisztrálja a kontextusváltásokat (sched_switch), a CPU frekvenciaváltozásokat (cpu_frequency), a megszakításokat (irq_handler_entry) és más eseményeket. Az atrace jelölőket ad hozzá az Android keretrendszerből — a keret renderelésének kezdetét és végét, a SurfaceFlinger hívásokat és a Binder tranzakciókat.
A Systrace legfontosabb funkciója — az egyes keretek renderelési láncának vizualizálása: alkalmazás → BufferQueue → SurfaceFlinger → HWC (composer) → Display. Ha bármely szakaszban késés lép fel, a Systrace megmutatja a pontos okot: az alkalmazás nem tudta előkészíteni a puffert, a SurfaceFlinger a VSync-re várt, vagy a HWC nem tudta összeállítani a rétegeket. A Frame Lifecycle az idővonalon állapot szerint van színezve: zöld (időben), sárga (késés), piros (kihagyás). Ez a vizualizáció a fő eszköz az UI teljesítmény optimalizálásához.
Systrace több mint 20 nyomkövetési kategóriát támogat, amelyek mindegyike kapcsolódó események halmazát tartalmazza. Fontos kategóriák: gfx (grafikus renderelés), input (bemenet feldolgozása), view (View rendszer), webview (WebView), power (energiafogyasztás), hal (hardver absztrakció). Játékok profilozásához hasznos a gfx kategória GPU parancsokig történő részletezéssel AGI-n (Android GPU Inspector) keresztül.
Systrace egyedülálló funkciókészletet kínál Androidhoz, amelyek más profilerekben nem elérhetők: rendszer idővonal, kernel szintű metrikák és automatikus problémadetektálás.
A Systrace HTML jelentés többszintű idővonalat tartalmaz, ahol minden sáv egy folyamatnak vagy szálnak felel meg. Az időskála nagyítható és kicsinyíthető, az eseményekre kattintva részletek jeleníthetők meg (időtartam, kezdeményező folyamat, további argumentumok). A színkódolás segít a gyors tájékozódásban: zöld blokkok — folyamat munka, kék — várakozás, narancssárga — megszakítás, fehér — tétlenség.
A Systrace automatikusan elemzi a nyomkövetést és Alert üzeneteket jelenít meg a problémás helyek jelölésével. Például: „Buffer underrun — A SurfaceFlinger nem tudta átvenni a puffert a VSync előtt” vagy „Long Binder transaction — 42 ms a Binder_1 szálban”. Minden alert tartalmaz egy hivatkozást az idővonal megfelelő szakaszára és egy javítási javaslatot. Ez órák kézi elemzését takarítja meg, és az egyik fő ok a Systrace használatára a kézi naplózás helyett.
A fejlesztő saját jelölőket adhat hozzá a Systrace nyomkövetéshez a Trace.beginSection és Trace.endSection API-n keresztül. Ez lehetővé teszi a kritikus kódszakaszok végrehajtásának közvetlen nyomon követését a rendszer idővonalon — például az adatbetöltés kezdetének és végének vagy az elrendezés számításának megjelölését. A jelölők külön blokkokként jelennek meg az alkalmazás sávján, és láthatóak a rendszeresemények mellett.
| Kategória | Adatok | Jellemző használat |
|---|---|---|
| sched | Kontextusváltások, tétlen állapotok | Szál blokkolások, contention |
| gfx | VSync, puffer előkészítés, HWC | Keret kihagyás, jank |
| binder | Binder tranzakciók, késleltetés | IPC késések, távoli hívások |
| freq | CPU frekvencia, scaling governor | Throttling, energiafogyasztás |
| gfx + AGI | GPU parancsok, shaderek | Játék teljesítmény |
A Systrace indítása kétféleképpen lehetséges: Android Studio CPU Profileren keresztül (“Trace System Calls” mód) vagy parancssoron keresztül a platform-tools mappában található systrace.py python szkript segítségével. Mindegyik módnak megvannak a saját alkalmazási forgatókönyvei.
Csatlakoztassa az eszközt, nyissa meg a Profilert (View → Tool Windows → Profiler), válassza ki a folyamatát, lépjen a CPU fülre, válassza a “Trace System Calls” módot, és nyomja meg a Record gombot. 5–30 másodperc után nyomja meg a Stop gombot — az Android Studio elindítja a Systrace-t az eszközön, megvárja a befejeződést, és betölti az eredményt. Korlátozás: a rögzítés csak addig lehetséges, amíg a Profiler nyitva van, ami kényelmetlen hosszú forgatókönyvekhez vagy automatizáláshoz.
A rugalmasabb vezérléshez használja a systrace.py szkriptet. Adja meg a nyomkövetési kategóriákat, az időtartamot és a kimeneti fájl nevét. Példa: gfx, input és sched adatok rögzítése 10 másodpercig. Az indításhoz Python 2.7+ és USB hibakereséssel csatlakoztatott eszköz szükséges. Android 12+-on a Systrace-t a Perfetto váltotta fel — a parancs ugyanaz marad, de a szkript átirányítja a hívásokat a perfetto-ba.
# A systrace alapindítása 10 másodpercre
$ python systrace.py \
--time=10 \
-o trace.html \
gfx input sched
# Csak gfx kategória az UI elemzéshez
$ python systrace.py \
--time=5 \
-t gfx \
-o ui_trace.html
Ahhoz, hogy a kódja megjelenjen a Systrace idővonalon, csomagolja a kritikus szakaszt Trace.beginSection / Trace.endSection közé. Fontos, hogy a beginSection és endSection szigorúan páros legyen — különben a Systrace hibás idővonalat jelenít meg. Kotlin-ban kényelmes az inline-extension használata a szakasz lezárásának garantálásához, még kivétel esetén is.
import android.os.Trace
fun traceSection(name: String, block: () -> Unit) {
Trace.beginSection(name)
try {
block()
} finally {
Trace.endSection()
}
}
// Használat a kódban
traceSection("load_screen_data") {
fetchData()
updateUI()
}
A Systrace jelentés egy önálló HTML fájl, amely Chrome-ban, Edge-ben vagy Firefox-ban nyitható meg. Interaktív idővonalat, folyamatkiválasztó panelt, alert üzenetek listáját és kulcs metrikákat (képkocka sebesség, CPU használat, Binder tranzakciók) tartalmaz. A jelentés szerkezetének megértése kulcsfontosságú készség a hatékony profilozáshoz.
Az idővonal balról jobbra mutatja az időt. Minden folyamat és szál — külön sáv. A W/S billentyűk nagyítanak/kicsinyítenek, az A/D időben mozgat. Válasszon ki egy területet az egérrel egy szakasz nagyításához. A VSync vonalak mutatják a keretek határait (16.6 ms-ként 60 FPS-nél). Ha két VSync vonal között nem fér el egy teljes renderelési ciklus — a keret kimaradt. Figyelje a SurfaceFlinger sávot: ha hosszú ideig foglalt (narancssárga blokk), a rétegkompozíció lassítja az általános renderelést.
A jelentés bal oldalán található Alerts panel automatikusan észlelt problémákat tartalmaz. Minden alert kattintható — kattintáskor az idővonal a problémás pillanathoz ugrik. A leggyakoribb alert-ek: „Long Sync” (hosszú szál szinkronizáció), „Scheduling Delay” (ütemező késleltetés), „Buffer Overrun” (SurfaceFlinger puffer túlcsordulás). Ha az alert körülbelül 100 ms értéket mutat a Scheduling Delay-ra, ez közvetlenül jelzi, hogy az UI szál a CPU-ra várt a háttérterhelés miatt — a nehéz számításokat át kell helyezni egy Worker Thread-be.
A kihagyott keretek elemzéséhez kapcsolja be a SurfaceFlinger és app.gfx sávokat. Minden keret téglalapként jelenik meg: zöld (≤16 ms), sárga (16–32 ms), piros (>32 ms). Ha piros téglalapot lát az alkalmazás sávján, kattintson rá — a Systrace megmutatja, melyik metódus (vagy rendszerhívás) lépte túl a határt. A Google (Android Performance Patterns, 2023) szerint a jank problémák 70%-át a hosszú onBindViewHolder vagy a gyakori GC okozza.
Perfetto a Systrace utódja, amelyet a Google az Android 9-ben (Pie) kísérleti eszközként mutatott be, és az Android 12-től vált elsődlegessé. A Perfetto modern protobuf adatformátumot használ, támogatja a hosszú munkameneteket (másodpercek helyett órák), és Web UI-val rendelkezik a nyomok megtekintéséhez. Tekintsük át a két rendszer közötti fő különbségeket.
| Szempont | Systrace | Perfetto |
|---|---|---|
| Formátum | HTML jelentés (trace.html) | Protobuf (.trace / .perfetto-trace) |
| Időtartam | Akár 60 másodperc | Órák, gigabájt adat |
| Felület | Beépített HTML | Web UI (ui.perfetto.dev) |
| Kategóriák | Rögzített (ftrace + atrace) | Bővíthető (SQL lekérdezések a nyomon) |
| Mobilitás | Csak Android | Android, Linux, Chrome, Windows |
A Perfetto-ra való átállás ellenére a Systrace-szel való munkavégzés készsége továbbra is releváns: az Android 11-ig terjedő eszközökön alapértelmezés szerint használatos, és a Perfetto megtartja a visszamenőleges kompatibilitást a Systrace kategóriákkal. Az Android Studio CPU Profiler a Perfetto-t használja az új eszközökhöz és a Systrace-t a régi eszközökhöz — átláthatóan a felhasználó számára. CI/CD-hez a Perfetto használata ajánlott, mivel formátuma alkalmas automatikus feldolgozásra Pythonon és SQL-en keresztül.
A Systrace gyakorlati elsajátításához vizsgáljunk meg két forgatókönyvet: a görgetés közben kihagyott keretek okának megtalálása és a gyakori GC diagnosztizálása, amely blokkolja az UI szálat.
Indítsa el a Systrace-t gfx kategóriával 10 másodpercre, görgessen a listán az alkalmazásban. Keresse meg a piros kereteket a jelentésben. Kattintson a problémás keretre, és nézze meg az app sávot — ha van egy “inflateLayout” vagy “onBindViewHolder” blokk >16 ms szélességgel, a probléma az elrendezés kiterjesztésében vagy az adatkötésben van. Megoldás: optimalizálja az elrendezést (csökkentse a ViewGroup mélységet, ViewStub), helyezze át a képbetöltést Glide-ba onAttachedToWindow-val.
A Systrace freq és sched kategóriákkal lehetővé teszi, hogy lássa, milyen gyakran szorítják ki a GC ciklusok az UI szálat. Keresse meg az alkalmazás sávját az idővonalon — ha periodikus blokkokat lát 20–50 ms időtartammal “Concurrent GC” néven, a szemétgyűjtő túl gyakran dolgozik. Adja hozzá a “dalvik” kategóriát a részletes elemzéshez. Megoldás: konvertálja a Bitmap-ot ByteBuffer-ré, használjon objektumpool-t (ObjectPool) a gyakori foglalásokhoz, csökkentse a heap fragmentációt az ART argumentumon keresztül.
# Indítás kategóriákkal az UI + GC elemzéshez
$ python systrace.py \
--time=15 \
-o gc_analysis.html \
gfx sched dalvik freq
# Rögzítés 30 másodperces időtartammal reprodukálható teszthez
$ python systrace.py \
--time=30 \
--app=com.example.app \
-o app_trace.html
Gyakran Ismételt Kérdések
Igen, a Systrace futtatásához nincs szükség root hozzáférésre. Az eszköz az atrace-t használja, amely bármely engedélyezett USB hibakereséssel rendelkező eszközön elérhető. Egyes kategóriák (power, freq) rendszer aláírást igényelhetnek, de az alapvetők (gfx, sched, input) minden eszközön működnek.
A 60 másodperces korlátozás az ftrace gyűrűpuffer kapacitásával kapcsolatos — hosszú rögzítéskor a puffer felülíródik. A Perfetto feloldja ezt a korlátozást: órákig lehet rögzíteni, és akár több gigabájt méretű nyomokat kaphat USB-n keresztüli átvitellel vagy streamelő lemezírásával.
Lehetséges okok: az alkalmazás nincs debuggable módba kapcsolva, az android:debuggable=”true” jelző nincs hozzáadva a manifestben, vagy release buildet használ. Ellenőrizze azt is, hogy a kategóriákban meg van-e adva a --app=com.example.app — különben a Systrace csak rendszerfolyamatokat rögzít.
C++-hoz használja a libcutils könyvtár ATRACE_BEGIN és ATRACE_END függvényeit. Illessze be a header fájlt, és csomagolja be a kívánt szakaszt. A jelölő megjelenik a Systrace-ben a folyamata sávján, ami különösen hasznos a játékmotorok (Unity, Unreal) elemzéséhez.
Android 12 és újabb verziókon használja a Perfetto-t. Telepítse a perfetto ágenst az eszközre ADB-n keresztül, indítsa el a rögzítést JSON formátumban. Gyors megtekintéshez használja a Perfetto Web UI-t (ui.perfetto.dev), CI-hez pedig a TraceProcessor-rel történő parancs exportálást Pythonban.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is