Systrace — co to je, nástroj pro systémové trasování Androidu

Autor: IT Sectr Publikováno: 2026-03-31 Doba čtení: 9 min

Systrace je nástroj pro systémové trasování Androidu, který shromažďuje údaje o činnosti linuxového jádra, procesoru, grafického akcelerátoru a všech systémových procesů v krátkém časovém úseku. Na rozdíl od Traceview, který se zaměřuje na metody uvnitř aplikace, Systrace zobrazuje systémový obraz: zatížení každého jádra CPU, práci SurfaceFlingeru, volání Binder a cykly GC. Podle Google, 2024 je nástroj nepostradatelný pro diagnostiku vynechaných snímků, častého shromažďování odpadu a anomálií ve vlákně UI.

Hlavní body

  • Systrace — nástroj pro nízkoúrovňové systémové trasování Androidu, pracující přes atrace/ftrace
  • Stopy obsahují data CPU, GPU, vláken, SurfaceFlingeru a Binderu po dobu až 60 sekund
  • Analýza umožňuje vidět přesnou příčinu vynechaných snímků a blokování vlákna UI
  • Integrace s Android Studio a příkazovým řádkem pro flexibilní zachytávání a automatizaci
  • Perfetto — nástupce Systrace na Android 12+, používající společný formát protobuf

Co je Systrace

Systrace je nástroj příkazového řádku ze sady Android SDK, který zachycuje a kombinuje data z několika zdrojů trasování jádra (ftrace) a uživatelského prostoru (atrace) do jediné HTML zprávy. Nástroj se objevil v Android 4.1 (Jelly Bean) jako náhrada starého nástroje traceview pro systémové profilování a po dlouhou dobu zůstal standardním prostředkem diagnostiky výkonu na platformě Android.

Architektura Systrace

Systrace se spoléhá na ftrace — mechanismus trasování linuxového jádra, dostupný v Androidu od verze 4.1. Při spuštění Systrace aktivuje zadané kategorie stop: sched (plánovač úloh), freq (frekvence CPU), idle (stavy nečinnosti), workq (pracovní fronty), binder, gfx a další. Data se shromažďují v kruhovém bufferu jádra a po zastavení se spojí do jednoho souboru trace.html, který se otevře v libovolném prohlížeči.

Systrace v kontextu Android Studio

Od Android Studio 3.1 je Systrace integrován do CPU Profileru. V režimu “Trace System Calls” profiler spustí Systrace na připojeném zařízení a zobrazí výsledky přímo v okně Android Studio. Tím odpadá nutnost práce s příkazovým řádkem pro základní případy, přičemž je zachována plná funkčnost — všechny kategorie stop, filtrování a interaktivní časová osa. Výkon zařízení během trasování mírně klesá, protože ftrace je navržen pro minimální režii.

Jak Systrace funguje

Systrace používá dva mechanismy sběru dat: ftrace na úrovni jádra pro systémové události a atrace v uživatelském prostoru pro značky specifické pro Android. ftrace registruje přepnutí kontextu (sched_switch), změny frekvence CPU (cpu_frequency), přerušení (irq_handler_entry) a další události. atrace přidává značky z Android frameworku — začátek a konec vykreslování snímku, volání SurfaceFlingeru a transakce Binder.

Řetězec vykreslování snímku v Systrace

Klíčová možnost Systrace — vizualizace řetězce vykreslování každého snímku: aplikace → BufferQueue → SurfaceFlinger → HWC (composer) → Display. Pokud v některé fázi dojde ke zpoždění, Systrace ukáže přesnou příčinu: aplikace nestihla připravit buffer, SurfaceFlinger čekal na VSync nebo HWC nedokázal složit vrstvy. Frame Lifecycle na časové ose je barevně odlišen podle stavu: zelená (včas), žlutá (zpoždění), červená (vynechání). Tato vizualizace je hlavním nástrojem pro optimalizaci výkonu UI.

Kategorie stop

Systrace podporuje více než 20 kategorií stop, z nichž každá obsahuje sadu souvisejících událostí. Důležité kategorie: gfx (vykreslování grafiky), input (zpracování vstupu), view (systém View), webview (WebView), power (spotřeba energie), hal (hardwarová abstrakce). Pro profilování her je užitečná kategorie gfx s detailním rozpisem až na úroveň příkazů GPU přes AGI (Android GPU Inspector).

Klíčové možnosti Systrace

Systrace poskytuje jedinečnou sadu možností pro Android, které nejsou k dispozici v jiných profilerech: systémová časová osa, metriky na úrovni jádra a automatické odhalování problémů.

Interaktivní časová osa

HTML zpráva Systrace obsahuje víceúrovňovou časovou osu, kde každá stopa odpovídá jednomu procesu nebo vláknu. Časovou škálu lze přibližovat a oddalovat, na události lze klikat pro zobrazení podrobností (doba trvání, iniciující proces, další argumenty). Barevné kódování pomáhá rychle se orientovat: zelené bloky — práce procesu, modré — čekání, oranžové — přerušení, bílé — nečinnost.

Alert zprávy

Systrace automaticky analyzuje stopu a zobrazuje Alert zprávy s označením problematických míst. Například: „Buffer underrun — SurfaceFlinger nestihl přijmout buffer před VSync” nebo „Long Binder transaction — 42 ms ve vlákně Binder_1”. Každý alert obsahuje odkaz na odpovídající část časové osy a doporučení k opravě. To šetří hodiny ruční analýzy a je jedním z hlavních důvodů pro použití Systrace místo ručního logování.

Metoda Trace.beginSection

Vývojář může přidávat vlastní značky do stopy Systrace pomocí API Trace.beginSection a Trace.endSection. To umožňuje sledovat provádění kritických částí kódu přímo na systémové časové ose — například označit začátek a konec načítání dat nebo výpočtu rozvržení. Značky se zobrazí jako samostatné bloky na stopě aplikace a jsou viditelné vedle systémových událostí.

KategorieDataTypické použití
schedPřepnutí kontextu, stavy nečinnostiBlokování vláken, contention
gfxVSync, příprava bufferu, HWCZtráta snímků, jank
binderTransakce Binder, latenceZpoždění IPC, vzdálená volání
freqFrekvence CPU, scaling governorThrottling, spotřeba energie
gfx + AGIPříkazy GPU, shaderyVýkon her

Jak spustit Systrace

Spuštění Systrace je možné dvěma způsoby: přes Android Studio CPU Profiler (režim “Trace System Calls”) nebo přes příkazový řádek pomocí python skriptu systrace.py ze složky platform-tools. Každý způsob má své scénáře použití.

Spuštění přes Android Studio

Připojte zařízení, otevřete Profiler (View → Tool Windows → Profiler), vyberte svůj proces, přejděte na kartu CPU, vyberte režim “Trace System Calls” a stiskněte Record. Po 5–30 sekundách stiskněte Stop — Android Studio spustí Systrace na zařízení, počká na dokončení a načte výsledek. Omezení: nahrávání je možné pouze při otevřeném Profileru, což je nepraktické pro dlouhé scénáře nebo automatizaci.

Spuštění z příkazového řádku

Pro flexibilnější ovládání použijte skript systrace.py. Určete kategorie stop, dobu trvání a název výstupního souboru. Příklad: zachycení dat gfx, input a sched po dobu 10 sekund. Ke spuštění je potřeba Python 2.7+ a připojené zařízení s USB laděním. Na Android 12+ byl Systrace nahrazen Perfettem — příkaz zůstává stejný, ale skript přesměrovává volání na perfetto.

bash
# Základní spuštění systrace na 10 sekund
$ python systrace.py \
    --time=10 \
    -o trace.html \
    gfx input sched

# Pouze kategorie gfx pro analýzu UI
$ python systrace.py \
    --time=5 \
    -t gfx \
    -o ui_trace.html

Nastavení vlastních značek v kódu

Aby se váš kód objevil na časové ose Systrace, obalte kritickou část do Trace.beginSection / Trace.endSection. Je důležité, aby beginSection a endSection byly striktně spárovány — jinak Systrace zobrazí nesprávnou časovou osu. V Kotlinu je vhodné použít inline-extension k zaručení uzavření sekce i při výjimce.

kotlin
import android.os.Trace

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

// Použití v kódu
traceSection("load_screen_data") {
    fetchData()
    updateUI()
}

Čtení HTML zprávy Systrace

Zpráva Systrace je samostatný HTML soubor, který lze otevřít v Chrome, Edge nebo Firefox. Obsahuje interaktivní časovou osu, panel výběru procesů, seznam alert zpráv a klíčové metriky (snímková frekvence, využití CPU, transakce Binder). Porozumění struktuře zprávy je klíčovou dovedností pro efektivní profilování.

Časová osa a navigace

Časová osa zobrazuje čas zleva doprava. Každý proces a vlákno — samostatná stopa. Klávesy W/S přibližují/oddalují, A/D posouvají v čase. Vyberte oblast myší pro zvětšení části. VSync čáry ukazují hranice snímků (každých 16.6 ms při 60 FPS). Pokud se mezi dvě VSync čáry nevejde celý cyklus vykreslování — snímek je vynechán. Věnujte pozornost stopě SurfaceFlinger: pokud je dlouho obsazená (oranžový blok), znamená to, že kompozice vrstev zpomaluje celkové vykreslování.

Analýza alert zpráv

Panel Alerts v levé části zprávy obsahuje automaticky zjištěné problémy. Každý alert je klikací — při kliknutí se časová osa přesune na problematický okamžik. Nejčastější alerty: „Long Sync” (dlouhá synchronizace vlákna), „Scheduling Delay” (zpoždění plánovače), „Buffer Overrun” (přetečení bufferu SurfaceFlingeru). Pokud alert zobrazuje hodnotu kolem 100 ms pro Scheduling Delay, přímo to ukazuje, že vlákno UI čekalo na CPU kvůli zátěži na pozadí — těžké výpočty je třeba přesunout do Worker Thread.

Frame Lifecycle a jank

Pro analýzu vynechaných snímků zapněte stopy SurfaceFlinger a app.gfx. Každý snímek je zobrazen jako obdélník: zelený (≤16 ms), žlutý (16–32 ms), červený (>32 ms). Pokud vidíte červený obdélník na stopě aplikace, klikněte na něj — Systrace ukáže, která metoda (nebo systémové volání) překročila limit. Podle Google (Android Performance Patterns, 2023) je 70% problémů s jank způsobeno dlouhým onBindViewHolder nebo častým GC.

Systrace vs Perfetto: přechod na nový formát

Perfetto je nástupce Systrace, představený Googlem v Android 9 (Pie) jako experimentální nástroj a stal se hlavním od Android 12. Perfetto používá moderní protobuf formát dat, podporuje dlouhé relace (hodiny místo sekund) a má Web UI pro prohlížení stop. Podívejme se na klíčové rozdíly mezi oběma systémy.

KritériumSystracePerfetto
FormátHTML zpráva (trace.html)Protobuf (.trace / .perfetto-trace)
Doba trváníAž 60 sekundHodiny, gigabajty dat
RozhraníVestavěné HTMLWeb UI (ui.perfetto.dev)
KategoriePevné (ftrace + atrace)Rozšiřitelné (SQL dotazy na stopu)
MobilitaPouze AndroidAndroid, Linux, Chrome, Windows

Navzdory přechodu na Perfetto zůstává dovednost práce se Systrace aktuální: na zařízeních do Android 11 se používá standardně a Perfetto zachovává zpětnou kompatibilitu s kategoriemi Systrace. Android Studio CPU Profiler používá Perfetto pro nová zařízení a Systrace pro stará — transparentně pro uživatele. Pro CI/CD se doporučuje použití Perfetta, protože jeho formát je vhodný pro automatické zpracování přes Python a SQL.

Příklady použití Systrace

Pro praktické zvládnutí Systrace prozkoumáme dva scénáře: nalezení příčiny vynechaných snímků při posouvání a diagnostika častého GC blokujícího vlákno UI.

Hledání jank při posouvání RecyclerView

Spusťte Systrace s kategorií gfx na 10 sekund, posouvejte seznam v aplikaci. Ve zprávě najděte části s červenými snímky. Klikněte na problematický snímek a podívejte se na stopu aplikace — pokud je tam blok “inflateLayout” nebo “onBindViewHolder” o šířce >16 ms, problém je v rozbalování rozvržení nebo vázání dat. Řešení: optimalizujte rozvržení (snižte hloubku ViewGroup, ViewStub), přesuňte načítání obrázků do Glide s onAttachedToWindow.

Diagnostika GC Throughput

Systrace s kategorií freq a sched umožňuje vidět, jak často cykly GC vytlačují vlákno UI. Najděte stopu aplikace na časové ose — pokud vidíte periodické bloky s dobou trvání 20–50 ms s názvem “Concurrent GC”, znamená to, že garbage collector pracuje příliš často. Přidejte kategorii “dalvik” pro podrobnou analýzu. Řešení: převeďte Bitmap na ByteBuffer, používejte fond objektů (ObjectPool) pro časté alokace, snižte fragmentaci haldy přes argument ART.

bash
# Spuštění s kategoriemi pro analýzu UI + GC
$ python systrace.py \
    --time=15 \
    -o gc_analysis.html \
    gfx sched dalvik freq

# Zachycení s dobou trvání 30 sekund pro reprodukovatelný test
$ python systrace.py \
    --time=30 \
    --app=com.example.app \
    -o app_trace.html

Často kladené otázky

Lze Systrace spustit bez root oprávnění?

Ano, pro spuštění Systrace není vyžadován root přístup. Nástroj používá atrace, který je dostupný na každém zařízení s povoleným USB laděním. Některé kategorie (power, freq) mohou vyžadovat podpis systému, ale základní (gfx, sched, input) fungují na všech zařízeních.

Jaká je maximální velikost souboru stopy?

Omezení 60 sekund souvisí s kapacitou kruhového bufferu ftrace — při dlouhém nahrávání se buffer přepisuje. Perfetto toto omezení odstraňuje: lze nahrávat hodiny a získávat stopy o velikosti až několik gigabajtů s přenosem přes USB nebo streamováním na disk.

Proč v HTML zprávě nejsou data mé aplikace?

Možné příčiny: aplikace není převedena do režimu debuggable, není přidán příznak android:debuggable=”true” v manifestu, nebo je použita release verze. Také zkontrolujte, zda je v kategoriích uvedeno --app=com.example.app — jinak Systrace zachycuje pouze systémové procesy.

Jak přidat vlastní značku do Systrace z nativního kódu?

Pro C++ použijte ATRACE_BEGIN a ATRACE_END z knihovny libcutils. Připojte hlavičkový soubor a obalte požadovanou část. Značka se objeví v Systrace na stopě vašeho procesu, což je užitečné zejména pro analýzu herních enginů (Unity, Unreal).

Čím nahradit Systrace na Android 12+?

Na Android 12 a novějších používejte Perfetto. Nainstalujte perfetto agenta na zařízení přes ADB, spusťte nahrávání ve formátu JSON. Pro rychlé prohlížení použijte Perfetto Web UI (ui.perfetto.dev) a pro CI — export příkazem s TraceProcessor v Pythonu.

Shrnutí

  • Systrace — systémový tracer Androidu, pracující na úrovni jádra přes ftrace a atrace
  • Zobrazuje zatížení CPU, GPU, SurfaceFlingeru a transakce Binder na jedné časové ose
  • HTML zpráva obsahuje automatické Alert zprávy s označením problémů a doporučení
  • Spuštění přes Android Studio Profiler nebo příkazový řádek s systrace.py
  • Vlákno UI je kritické: každý snímek se musí vejít do 16.6 ms pro 60 FPS
  • Na Android 12+ byl Systrace nahrazen Perfettem s podporou dlouhých relací a SQL dotazů
  • Doporučuje se kombinovat Systrace a Traceview pro systémové a aplikační profilování

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také