Systrace — Android sistem izləmə alətidir, Linux nüvəsi, prosessor, qrafik sürətləndiricisi və bütün sistem prosesləri haqqında qısa müddət ərzində məlumat toplayır. Traceview-dən fərqli olaraq, tətbiq daxilindəki metodlara fokuslanan Systrace sistem mənzərəsini göstərir: hər CPU nüvəsinin yükü, SurfaceFlinger işi, Binder çağırışları və GC dövrləri. Google, 2024 məlumatına görə, alət buraxılmış kadrların, tez-tez zibil yığılmasının və UI thread-də anomaliyaların diaqnostikası üçün əvəzolunmazdır.
Əsas məqamlar
Systrace — Android SDK-dan komanda xətti vasitəsidir, nüvə (ftrace) və istifadəçi məkanından (atrace) bir neçə izləmə mənbəyindən məlumatları tək HTML hesabatında birləşdirir. Alət Android 4.1-də (Jelly Bean) köhnə traceview sistem profilləmə alətini əvəz etmək üçün ortaya çıxdı və uzun müddət Android platformasında performans diaqnostikasının standart vasitəsi olaraq qaldı.
Systrace ftrace-ə əsaslanır — Android 4.1 versiyasından etibarən mövcud olan Linux nüvə izləmə mexanizmi. Systrace işə salındıqda müəyyən iz kateqoriyalarını aktivləşdirir: sched (tapşırıq planlayıcısı), freq (CPU tezliyi), idle (boş vəziyyətlər), workq (iş növbələri), binder, gfx və digərləri. Məlumatlar nüvənin halqa buferində toplanır və dayandırıldıqdan sonra tək trace.html faylında birləşdirilir, istənilən brauzerdə açılır.
Android Studio 3.1-dən başlayaraq, Systrace CPU Profiler-ə daxil edilmişdir. “Trace System Calls” rejimində profiler qoşulmuş cihazda Systrace-i işə salır və nəticələri birbaşa Android Studio pəncərəsində göstərir. Bu, əsas hallarda komanda xətti ilə işləmək ehtiyacını aradan qaldırır, lakin tam funksionallığı qoruyur — bütün iz kateqoriyaları, filtrləmə və interaktiv zaman xətti. İzləmə zamanı cihazın performansı az dərəcədə azalır, çünki ftrace minimal yük üçün hazırlanmışdır.
Systrace iki məlumat toplama mexanizmindən istifadə edir: sistem hadisələri üçün nüvə səviyyəsində ftrace və Android-ə xas etiketlər üçün istifadəçi məkanında atrace. ftrace kontekst dəyişmələrini (sched_switch), CPU tezliyi dəyişikliklərini (cpu_frequency), kəsilmələri (irq_handler_entry) və digər hadisələri qeyd edir. atrace Android freymvorkundan etiketlər əlavə edir — kadr renderlənməsinin başlanğıcı və sonu, SurfaceFlinger çağırışları və Binder əməliyyatları.
Systrace-in əsas imkanı — hər kadrın renderlənmə zəncirinin vizuallaşdırılması: tətbiq → BufferQueue → SurfaceFlinger → HWC (composer) → Display. Əgər hansısa mərhələdə gecikmə baş verərsə, Systrace dəqiq səbəbi göstərir: tətbiq bufer hazırlaya bilmədi, SurfaceFlinger VSync gözlədi və ya HWC təbəqələri birləşdirə bilmədi. Zaman xəttində Frame Lifecycle statuslara görə rənglənir: yaşıl (vaxtında), sarı (gecikmə), qırmızı (buraxılma). Bu vizuallaşdırma UI performansının optimallaşdırılması üçün əsas alətdir.
Systrace 20-dən çox iz kateqoriyasını dəstəkləyir, hər biri əlaqəli hadisələr toplusunu ehtiva edir. Əhəmiyyətli kateqoriyalar: gfx (qrafik renderlənməsi), input (giriş emalı), view (View sistemi), webview (WebView), power (enerji istehlakı), hal (aparatur abstraksiyası). Oyunların profillənməsi üçün AGI (Android GPU Inspector) vasitəsilə GPU əmrlərinə qədər detallaşdırma ilə gfx kateqoriyası faydalıdır.
Systrace Android üçün digər profilerlərdə mövcud olmayan unikal imkanlar dəsti təqdim edir: sistem zaman xətti, nüvə səviyyəsində metrikalar və problemlərin avtomatik aşkarlanması.
Systrace HTML hesabatı çoxsəviyyəli zaman xətti ehtiva edir, burada hər bir yol bir prosesə və ya thread-ə uyğundur. Zaman şkalasını yaxınlaşdırmaq və uzaqlaşdırmaq, detalları görmək üçün hadisələrə klikləmək olar (müddət, başladıcı proses, əlavə arqumentlər). Rəng kodlaşdırması sürətli naviqasiyaya kömək edir: yaşıl bloklar — proses işi, mavi — gözləmə, narıncı — kəsilmə, ağ — boş vəziyyət.
Systrace izi avtomatik analiz edir və problemli yerləri göstərən Alert mesajları çıxarır. Məsələn: “Buffer underrun — SurfaceFlinger VSync-dən əvvəl bufer ala bilmədi” və ya “Long Binder transaction — Binder_1 thread-də 42 ms”. Hər alert zaman xəttinin müvafiq hissəsinə keçid və düzəliş tövsiyəsi ehtiva edir. Bu, saatlarla əl analizini qənaət edir və əl ilə loglama əvəzinə Systrace istifadə etməyin əsas səbəblərindən biridir.
Developer Trace.beginSection və Trace.endSection API vasitəsilə Systrace izinə öz etiketlərini əlavə edə bilər. Bu, kritik kod hissələrinin icrasını birbaşa sistem zaman xəttində izləməyə imkan verir — məsələn, məlumat yükləməsinin başlanğıcı və sonunu və ya düzən hesablanmasını qeyd etmək. Etiketlər tətbiq yolunda ayrı bloklar kimi göstərilir və sistem hadisələri ilə yanaşı görünür.
| Kateqoriya | Məlumat | Tipik istifadə |
|---|---|---|
| sched | Kontekst dəyişmələri, boş vəziyyətlər | Thread bloklanmaları, contention |
| gfx | VSync, bufer hazırlığı, HWC | Kadr düşmələri, jank |
| binder | Binder əməliyyatları, gecikmə | IPC gecikmələri, uzaq çağırışlar |
| freq | CPU tezliyi, miqyaslama qubernatoru | Throttling, enerji istehlakı |
| gfx + AGI | GPU əmrləri, şeyderlər | Oyun performansı |
Systrace-i işə salmağın iki yolu var: Android Studio CPU Profiler vasitəsilə (“Trace System Calls” rejimi) və ya platform-tools qovluğundan systrace.py python skripti ilə komanda xətti vasitəsilə. Hər metodun öz tətbiq ssenariləri var.
Cihazı qoşun, Profiler-i açın (View → Tool Windows → Profiler), prosesinizi seçin, CPU sekmesine keçin, “Trace System Calls” rejimini seçin və Record düyməsini basın. 5–30 saniyədən sonra Stop düyməsini basın — Android Studio cihazda Systrace-i işə salacaq, tamamlanmasını gözləyəcək və nəticəni yükləyəcək. Məhdudiyyət: qeyd yalnız Profiler açıq olduqda mümkündür, bu da uzun ssenarilər və ya avtomatlaşdırma üçün əlverişsizdir.
Daha çevik nəzarət üçün systrace.py skriptindən istifadə edin. İz kateqoriyalarını, müddəti və çıxış faylının adını göstərin. Nümunə: 10 saniyə ərzində gfx, input və sched məlumatlarının tutulması. İşə salmaq üçün Python 2.7+ və USB debuging ilə qoşulmuş cihaz tələb olunur. Android 12+-da Systrace Perfetto ilə əvəz edilmişdir — əmr eyni qalır, lakin skript çağırışları perfetto-ya yönləndirir.
# Systrace-in 10 saniyə əsas işə salınması
$ python systrace.py \
--time=10 \
-o trace.html \
gfx input sched
# Yalnız UI analizi üçün gfx kateqoriyası
$ python systrace.py \
--time=5 \
-t gfx \
-o ui_trace.html
Kodunuzun Systrace zaman xəttində görünməsi üçün kritik hissəni Trace.beginSection / Trace.endSection ilə əhatə edin. Vacibdir ki, beginSection və endSection ciddi şəkildə qoşalaşmış olsun — əks halda Systrace səhv zaman xətti göstərəcək. Kotlin-də istisna halında belə bölmənin bağlanmasını təmin etmək üçün inline-extension istifadə etmək rahatdır.
import android.os.Trace
fun traceSection(name: String, block: () -> Unit) {
Trace.beginSection(name)
try {
block()
} finally {
Trace.endSection()
}
}
// Kodda istifadə
traceSection("load_screen_data") {
fetchData()
updateUI()
}
Systrace hesabatı — Chrome, Edge və ya Firefox-da açıla bilən müstəqil HTML faylıdır. İnteraktiv zaman xətti, proses seçim paneli, alert mesajları siyahısı və əsas metrikaları (kadr sürəti, CPU istifadəsi, binder əməliyyatları) ehtiva edir. Hesabatın strukturunu başa düşmək effektiv profilləmə üçün əsas bacarıqdır.
Zaman xətti vaxtı soldan sağa göstərir. Hər proses və thread — ayrı bir yol. W/S düymələri yaxınlaşdırır/uzaqlaşdırır, A/D zaman boyunca hərəkət edir. Bölməni böyütmək üçün siçan ilə sahəni seçin. VSync xətləri kadr sərhədlərini göstərir (60 FPS-də hər 16.6 ms). Əgər iki VSync xətti arasında tam render dövrü sığmırsa — kadr buraxılmışdır. SurfaceFlinger yoluna diqqət yetirin: uzun müddət məşğuldursa (narıncı blok), təbəqə kompozisiyası ümumi renderləməni yavaşladır.
Hesabatın sol hissəsindəki Alerts paneli avtomatik aşkarlanmış problemləri ehtiva edir. Hər alert kliklənə bilər — klik edildikdə zaman xətti problemli anı göstərir. Ən çox rast gəlinən alertlər: “Long Sync” (thread-in uzun sinxronizasiyası), “Scheduling Delay” (planlayıcı gecikməsi), “Buffer Overrun” (SurfaceFlinger buferinin daşması). Əgər alert Scheduling Delay üçün təxminən 100 ms göstərirsə, bu, UI thread-in fon yükü səbəbindən CPU gözlədiyini bildirir — ağır hesablamaları Worker Thread-ə köçürmək lazımdır.
Buraxılmış kadrların analizi üçün SurfaceFlinger və app.gfx yollarını aktivləşdirin. Hər kadr düzbucaqlı kimi göstərilir: yaşıl (≤16 ms), sarı (16–32 ms), qırmızı (>32 ms). Tətbiq yolunda qırmızı düzbucaqlı görsəniz, üzərinə klikləyin — Systrace limiti keçən metodu (və ya sistem çağırışını) göstərəcək. Google (Android Performance Patterns, 2023) məlumatına görə, jank problemlərinin 70%-i uzun onBindViewHolder və ya tez-tez GC səbəbindən yaranır.
Perfetto — Google tərəfindən Android 9-da (Pie) eksperimental alət kimi təqdim edilmiş və Android 12-dən başlayaraq əsas alətə çevrilmiş Systrace-in varisidir. Perfetto müasir protobuf məlumat formatından istifadə edir, uzun sessiyaları (saniyələr əvəzinə saatlar) dəstəkləyir və izlərə baxmaq üçün Web UI-ə malikdir. İki sistem arasındakı əsas fərqləri nəzərdən keçirək.
| Meyar | Systrace | Perfetto |
|---|---|---|
| Format | HTML hesabatı (trace.html) | Protobuf (.trace / .perfetto-trace) |
| Müddət | 60 saniyəyə qədər | Saatlar, gigabayt məlumat |
| İnterfeys | Daxili HTML | Web UI (ui.perfetto.dev) |
| Kateqoriyalar | Sabit (ftrace + atrace) | Genişləndirilə bilən (izə SQL sorğuları) |
| Mobillik | Yalnız Android | Android, Linux, Chrome, Windows |
Perfetto-ya keçidə baxmayaraq, Systrace ilə iş bacarığı aktual olaraq qalır: Android 11-ə qədər cihazlarda standart olaraq istifadə olunur, Perfetto isə Systrace kateqoriyaları ilə geriyə uyğunluğu qoruyur. Android Studio CPU Profiler yeni cihazlar üçün Perfetto, köhnələr üçün Systrace istifadə edir — istifadəçi üçün şəffaf şəkildə. CI/CD üçün Perfetto tövsiyə olunur, çünki onun formatı Python və SQL vasitəsilə avtomatik emal üçün əlverişlidir.
Systrace-i praktiki mənimsəmək üçün iki ssenarini nəzərdən keçirək: sürüşdürmə zamanı buraxılmış kadrların səbəbinin tapılması və UI thread-i bloklayan tez-tez GC-nin diaqnostikası.
Systrace-i gfx kateqoriyası ilə 10 saniyə işə salın, tətbiqdə siyahını sürüşdürün. Hesabatda qırmızı kadrları olan hissələri tapın. Problemli kadra klikləyin və app yoluna baxın — əgər orada “inflateLayout” və ya “onBindViewHolder” bloku >16 ms genişlikdədirsə, problem düzənin genişlənməsi və ya məlumat bağlanmasındadır. Həll: düzəni optimallaşdırın (ViewGroup dərinliyini azaldın, ViewStub), şəkil yükləməsini Glide ilə onAttachedToWindow-da aparın.
freq və sched kateqoriyaları ilə Systrace GC dövrlərinin UI thread-i nə qədər tez-tez sıxışdırdığını görməyə imkan verir. Zaman xəttində tətbiq yolunu tapın — 20–50 ms müddətində “Concurrent GC” adlı dövri bloklar görürsünüzsə, zibil yığıcı çox tez-tez işləyir. Detallı analiz üçün “dalvik” kateqoriyasını əlavə edin. Həll: Bitmap-i ByteBuffer-ə çevirin, tez-tez ayrılmalar üçün obyekt hovuzundan (ObjectPool) istifadə edin, ART arqumenti ilə yığın parçalanmasını azaldın.
# UI + GC analizi üçün kateqoriyalarla işə salma
$ python systrace.py \
--time=15 \
-o gc_analysis.html \
gfx sched dalvik freq
# Təkrarlana bilən test üçün 30 saniyə müddətində tutma
$ python systrace.py \
--time=30 \
--app=com.example.app \
-o app_trace.html
Tez-tez verilən suallar
Bəli, Systrace-i işə salmaq üçün root girişi tələb olunmur. Alət USB debuging aktiv olan istənilən cihazda mövcud olan atrace-dən istifadə edir. Bəzi kateqoriyalar (power, freq) sistem imzası tələb edə bilər, lakin əsas olanlar (gfx, sched, input) bütün cihazlarda işləyir.
60 saniyə məhdudiyyəti ftrace halqa buferinin həcmi ilə bağlıdır — uzun müddətli yazı zamanı bufer üzərinə yazılır. Perfetto bu məhdudiyyəti aradan qaldırır: saatlarla yazmaq və USB vasitəsilə və ya diskə axın yazısı ilə bir neçə giqabayta qədər izlər əldə etmək olar.
Mümkün səbəblər: tətbiq debuggable rejiminə keçirilməyib, manifestdə android:debuggable=”true” bayrağı əlavə edilməyib və ya release quruluşu istifadə olunur. Həmçinin kateqoriyalarda --app=com.example.app göstərildiyini yoxlayın — əks halda Systrace yalnız sistem proseslərini tutur.
C++ üçün libcutils kitabxanasından ATRACE_BEGIN və ATRACE_END istifadə edin. Başlıq faylını qoşun və lazımi hissəni əhatə edin. Etiket Systrace-də prosesinizin yolunda görünəcək, bu xüsusilə oyun mühərriklərinin (Unity, Unreal) analizi üçün faydalıdır.
Android 12 və daha yuxarı versiyalarda Perfetto istifadə edin. ADB vasitəsilə cihazda perfetto agentini quraşdırın, JSON formatında yazmağa başlayın. Sürətli baxış üçün Perfetto Web UI (ui.perfetto.dev), CI üçün isə Pythonda TraceProcessor ilə əmr ixracından istifadə edin.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun