Systrace — bu Android tizim kuzatuvi vositasi bo‘lib, Linux yadrosi, protsessor, grafik tezlatkich va barcha tizim jarayonlari haqida qisqa vaqt ichida ma’lumot to‘playdi. Ilova ichidagi metodlarga e’tibor qaratadigan Traceview-dan farqli o‘laroq, Systrace tizim manzarasini ko‘rsatadi: har bir CPU yadrosining yuklanishi, SurfaceFlinger ishi, Binder chaqiruvlari va GC siklari. Google, 2024 ma’lumotiga ko‘ra, vosita o‘tkazib yuborilgan kadrlar, tez-tez axlat yig‘ish va UI oqimidagi anomaliyalarni tashxislash uchun ajralmasdir.
Asosiy fikrlar
Systrace — Android SDK dan buyruq satri vositasi bo‘lib, yadro (ftrace) va foydalanuvchi maydoni (atrace) dan bir nechta kuzatuv manbalaridan ma’lumotlarni yagona HTML hisobotida birlashtiradi. Vosita Android 4.1 (Jelly Bean) da eski traceview tizim profillash vositasini almashtirish uchun paydo bo‘ldi va uzoq vaqt Android platformasida ishlash diagnostikasining standart vositasi bo‘lib qoldi.
Systrace ftrace ga tayanadi — Android 4.1 versiyasidan boshlab mavjud bo‘lgan Linux yadro kuzatuv mexanizmi. Ishga tushirilganda, Systrace berilgan kuzatuv toifalarini faollashtiradi: sched (vazifa rejalashtiruvchisi), freq (CPU chastotasi), idle (bo‘sh holatlar), workq (ish navbatlari), binder, gfx va boshqalar. Ma’lumotlar yadro halqa buferida to‘planadi va to‘xtatilgandan so‘ng yagona trace.html faylida birlashtiriladi, istalgan brauzerda ochiladi.
Android Studio 3.1 dan boshlab, Systrace CPU Profiler ga o‘rnatilgan. “Trace System Calls” rejimida profiler ulangan qurilmada Systrace ni ishga tushiradi va natijalarni to‘g‘ridan-to‘g‘ri Android Studio oynasida ko‘rsatadi. Bu asosiy holatlarda buyruq satri bilan ishlash zaruratini bartaraf etadi, ammo to‘liq funksionallikni saqlaydi — barcha kuzatuv toifalari, filtrlash va interaktiv vaqt chizig‘i. Kuzatuv paytida qurilmaning ishlashi biroz pasayadi, chunki ftrace minimal yuk uchun mo‘ljallangan.
Systrace ikkita ma’lumot yig‘ish mexanizmidan foydalanadi: tizim hodisalari uchun yadro darajasida ftrace va Android-ga xos belgilar uchun foydalanuvchi maydonida atrace. ftrace kontekst almashinishlarini (sched_switch), CPU chastotasi o‘zgarishlarini (cpu_frequency), uzilishlarni (irq_handler_entry) va boshqa hodisalarni qayd qiladi. atrace Android freymvorkidan belgilar qo‘shadi — kadr renderlashning boshlanishi va tugashi, SurfaceFlinger chaqiruvlari va Binder operatsiyalari.
Systrace ning asosiy imkoniyati — har bir kadrning renderlash zanjirini vizuallashtirish: ilova → BufferQueue → SurfaceFlinger → HWC (composer) → Display. Agar biron-bosqichda kechikish yuz bersa, Systrace aniq sababni ko‘rsatadi: ilova bufer tayyorlay olmadi, SurfaceFlinger VSync ni kutdi yoki HWC qatlamlarni kompozitsiya qila olmadi. Vaqt chizig‘ida Frame Lifecycle holat bo‘yicha ranglanadi: yashil (o‘z vaqtida), sariq (kechikish), qizil (o‘tkazib yuborish). Bu vizuallashtirish UI ishlashini optimallashtirish uchun asosiy vositadir.
Systrace 20 dan ortiq kuzatuv toifalarini qo‘llab-quvvatlaydi, ularning har biri bog‘liq hodisalar to‘plamini o‘z ichiga oladi. Muhim toifalar: gfx (grafik renderlash), input (kiritishni qayta ishlash), view (View tizimi), webview (WebView), power (energiya iste’moli), hal (aparatura abstraksiyasi). O‘yinlarni profillash uchun AGI (Android GPU Inspector) orqali GPU buyruqlarigacha detallashtirish bilan gfx toifasi foydalidir.
Systrace Android uchun boshqa profillerda mavjud bo‘lmagan noyob imkoniyatlar to‘plamini taqdim etadi: tizim vaqt chizig‘i, yadro darajasidagi metrikalar va muammolarni avtomatik aniqlash.
Systrace HTML hisoboti ko‘p darajali vaqt chizig‘ini o‘z ichiga oladi, bu erda har bir yo‘l bitta jarayon yoki oqimga mos keladi. Vaqt shkalasini yaqinlashtirish va uzoqlashtirish, tafsilotlarni ko‘rish uchun hodisalarni bosish mumkin (davomiylik, boshlovchi jarayon, qo‘shimcha argumentlar). Rang kodlash tez yo‘nalishga yordam beradi: yashil bloklar — jarayon ishi, ko‘k — kutish, to‘q sariq — uzilish, oq — bo‘sh holat.
Systrace izni avtomatik tahlil qiladi va muammoli joylarni ko‘rsatadigan Alert xabarlari ni chiqaradi. Masalan: “Buffer underrun — SurfaceFlinger VSync dan oldin bufer ololmadi” yoki “Long Binder transaction — Binder_1 oqimida 42 ms”. Har bir alert vaqt chizig‘ining tegishli qismiga havola va tuzatish bo‘yicha tavsiyani o‘z ichiga oladi. Bu soatlab qo‘l tahlilini tejaydi va qo‘lda loglash o‘rniga Systrace dan foydalanishning asosiy sabablaridan biridir.
Dasturchi Trace.beginSection va Trace.endSection API orqali Systrace iziga o‘z belgilarini qo‘shishi mumkin. Bu kritik kod qismlarining bajarilishini to‘g‘ridan-to‘g‘ri tizim vaqt chizig‘ida kuzatish imkonini beradi — masalan, ma’lumot yuklashning boshlanishi va tugashini yoki tartibni hisoblashni belgilash. Belgilar ilova yo‘lida alohida bloklar sifatida ko‘rsatiladi va tizim hodisalari yonida ko‘rinadi.
| Toifa | Ma’lumot | Odatiy qo‘llanish |
|---|---|---|
| sched | Kontekst almashinishlari, bo‘sh holatlar | Oqim blokirovkalari, contention |
| gfx | VSync, bufer tayyorlash, HWC | Kadr tushishlari, jank |
| binder | Binder operatsiyalari, kechikish | IPC kechikishlari, uzoq chaqiruvlar |
| freq | CPU chastotasi, scaling governor | Throttling, energiya iste’moli |
| gfx + AGI | GPU buyruqlari, sheyderlar | O‘yin ishlashi |
Systrace ni ishga tushirish ikki usulda mumkin: Android Studio CPU Profiler orqali (“Trace System Calls” rejimi) yoki platform-tools papkasidan systrace.py python skripti orqali buyruq satri orqali. Har bir usulning o‘z qo‘llanish stsenariylari bor.
Qurilmani ulang, Profiler ni oching (View → Tool Windows → Profiler), jarayoningizni tanlang, CPU yorlig‘iga o‘ting, “Trace System Calls” rejimini tanlang va Record tugmasini bosing. 5–30 soniyadan so‘ng Stop tugmasini bosing — Android Studio qurilmada Systrace ni ishga tushiradi, tugashini kutadi va natijani yuklaydi. Cheklov: yozib olish faqat Profiler ochiq bo‘lganda mumkin, bu uzoq stsenariylar yoki avtomatlashtirish uchun noqulay.
Moslashuvchanroq nazorat uchun systrace.py skriptidan foydalaning. Kuzatuv toifalarini, davomiylikni va chiqish fayli nomini belgilang. Misol: 10 soniya davomida gfx, input va sched ma’lumotlarini ushlash. Ishga tushirish uchun Python 2.7+ va USB nosozliklarni tuzatish bilan ulangan qurilma talab qilinadi. Android 12+ da Systrace Perfetto bilan almashtirildi — buyruq bir xil qoladi, ammo skript chaqiruvlarni perfetto ga yo‘naltiradi.
# Systrace ni 10 soniya asosiy ishga tushirish
$ python systrace.py \
--time=10 \
-o trace.html \
gfx input sched
# Faqat UI tahlili uchun gfx toifasi
$ python systrace.py \
--time=5 \
-t gfx \
-o ui_trace.html
Kodingiz Systrace vaqt chizig‘ida ko‘rinishi uchun kritik qismni Trace.beginSection / Trace.endSection bilan o‘rab oling. Muhimki, beginSection va endSection qat’iy juftlashgan bo‘lishi kerak — aks holda Systrace noto‘g‘ri vaqt chizig‘ini ko‘rsatadi. Kotlin da istisno holatida ham bo‘limning yopilishini kafolatlash uchun inline-extension dan foydalanish qulay.
import android.os.Trace
fun traceSection(name: String, block: () -> Unit) {
Trace.beginSection(name)
try {
block()
} finally {
Trace.endSection()
}
}
// Kodda foydalanish
traceSection("load_screen_data") {
fetchData()
updateUI()
}
Systrace hisoboti — Chrome, Edge yoki Firefox da ochiladigan mustaqil HTML fayl. Interaktiv vaqt chizig‘i, jarayon tanlash paneli, alert xabarlari ro‘yxati va asosiy metrikalarni (kadr tezligi, CPU ishlatilishi, binder operatsiyalari) o‘z ichiga oladi. Hisobot tuzilishini tushunish samarali profillash uchun asosiy mahoratdir.
Vaqt chizig‘i vaqtni chapdan o‘ngga ko‘rsatadi. Har bir jarayon va oqim — alohida yo‘l. W/S tugmalari yaqinlashtiradi/uzoqlashtiradi, A/D vaqt bo‘ylab harakatlantiradi. Bo‘limni kattalashtirish uchun sichqoncha bilan maydonni tanlang. VSync chiziqlari kadr chegaralarini ko‘rsatadi (60 FPS da har 16.6 ms). Agar ikki VSync chizig‘i orasida to‘liq render sikli sig‘masa — kadr o‘tkazib yuborilgan. SurfaceFlinger yo‘liga e’tibor bering: agar uzoq vaqt band bo‘lsa (to‘q sariq blok), qatlam kompozitsiyasi umumiy renderlashni sekinlashtiradi.
Hisobotning chap qismidagi Alerts paneli avtomatik aniqlangan muammolarni o‘z ichiga oladi. Har bir alert bosiladigan — bosilganda vaqt chizig‘i muammoli momentga o‘tadi. Eng keng tarqalgan alertlar: “Long Sync” (oqimning uzoq sinxronizatsiyasi), “Scheduling Delay” (rejalashtiruvchi kechikishi), “Buffer Overrun” (SurfaceFlinger buferining toshib ketishi). Agar alert Scheduling Delay uchun taxminan 100 ms ni ko‘rsatsa, bu UI oqimi fon yuki tufayli CPU ni kutganini bildiradi — og‘ir hisoblashlarni Worker Thread ga ko‘chirish kerak.
O‘tkazib yuborilgan kadrlarni tahlil qilish uchun SurfaceFlinger va app.gfx yo‘llarini faollashtiring. Har bir kadr to‘rtburchak sifatida ko‘rsatiladi: yashil (≤16 ms), sariq (16–32 ms), qizil (>32 ms). Ilova yo‘lida qizil to‘rtburchakni ko‘rsangiz, ustiga bosing — Systrace chegaradan oshgan metodni (yoki tizim chaqiruvini) ko‘rsatadi. Google (Android Performance Patterns, 2023) ma’lumotiga ko‘ra, jank muammolarining 70% uzoq onBindViewHolder yoki tez-tez GC sabab bo‘ladi.
Perfetto — Google tomonidan Android 9 (Pie) da eksperimental vosita sifatida taqdim etilgan va Android 12 dan boshlab asosiy vosita bo‘lgan Systrace ning vorisidir. Perfetto zamonaviy protobuf ma’lumot formatidan foydalanadi, uzoq sessiyalarni (soniyalar o‘rniga soatlar) qo‘llab-quvvatlaydi va izlarni ko‘rish uchun Web UI ga ega. Ikki tizim o‘rtasidagi asosiy farqlarni ko‘rib chiqamiz.
| Mezon | Systrace | Perfetto |
|---|---|---|
| Format | HTML hisoboti (trace.html) | Protobuf (.trace / .perfetto-trace) |
| Davomiylik | 60 soniyagacha | Soatlar, gigabayt ma’lumot |
| Interfeys | Ichki HTML | Web UI (ui.perfetto.dev) |
| Toifalar | Ruxsat etilgan (ftrace + atrace) | Kengaytiriladigan (izga SQL so‘rovlar) |
| Mobillik | Faqat Android | Android, Linux, Chrome, Windows |
Perfetto ga o‘tishga qaramay, Systrace bilan ishlash mahorati dolzarb bo‘lib qoladi: Android 11 gacha qurilmalarda standart sifatida ishlatiladi va Perfetto Systrace toifalari bilan orqaga muvofiqlikni saqlaydi. Android Studio CPU Profiler yangi qurilmalar uchun Perfetto va eskilari uchun Systrace dan foydalanadi — foydalanuvchi uchun shaffof tarzda. CI/CD uchun Perfetto tavsiya etiladi, chunki uning formati Python va SQL orqali avtomatik qayta ishlash uchun mos keladi.
Systrace ni amaliy o‘zlashtirish uchun ikkita stsenariyni ko‘rib chiqamiz: aylantirish paytida o‘tkazib yuborilgan kadrlarning sababini topish va UI oqimini bloklaydigan tez-tez GC diagnostikasi.
Systrace ni gfx toifasi bilan 10 soniya ishga tushiring, ilovada ro‘yxatni aylantiring. Hisobotda qizil kadrli qismlarni toping. Muammoli kadrga bosing va app yo‘liga qarang — agar u erda “inflateLayout” yoki “onBindViewHolder” bloki >16 ms kenglikda bo‘lsa, muammo tartibni kengaytirish yoki ma’lumot bog‘lashdadir. Yechim: tartibni optimallashtiring (ViewGroup chuqurligini kamaytiring, ViewStub), rasm yuklashni Glide bilan onAttachedToWindow da bajaring.
freq va sched toifalari bilan Systrace GC sikllari UI oqimini qanchalik tez-tez siqib chiqarishini ko‘rish imkonini beradi. Vaqt chizig‘ida ilova yo‘lini toping — 20–50 ms davomiylikdagi “Concurrent GC” nomli davriy bloklarni ko‘rsangiz, axlat yig‘uvchi juda tez-tez ishlaydi. Batafsil tahlil uchun “dalvik” toifasini qo‘shing. Yechim: Bitmap ni ByteBuffer ga aylantiring, tez-tez ajratishlar uchun obekt hovuzidan (ObjectPool) foydalaning, ART argumenti orqali yig‘in parchalanishini kamaytiring.
# UI + GC tahlili uchun toifalar bilan ishga tushirish
$ python systrace.py \
--time=15 \
-o gc_analysis.html \
gfx sched dalvik freq
# Takrorlanadigan test uchun 30 soniya davomiylikda ushlash
$ python systrace.py \
--time=30 \
--app=com.example.app \
-o app_trace.html
Tez-tez beriladigan savollar
Ha, Systrace ni ishga tushirish uchun root kirish talab qilinmaydi. Vosita USB nosozliklarni tuzatish yoqilgan har qanday qurilmada mavjud bo‘lgan atrace dan foydalanadi. Ba’zi toifalar (power, freq) tizim imzosini talab qilishi mumkin, ammo asosiy (gfx, sched, input) barcha qurilmalarda ishlaydi.
60 soniya cheklovi ftrace halqa buferining hajmi bilan bog‘liq — uzoq yozish paytida bufer ustiga yoziladi. Perfetto bu cheklovni olib tashlaydi: soatlab yozish va USB orqali yoki diskka oqimli yozish bilan bir necha gigabaytgacha izlar olish mumkin.
Mumkin sabablar: ilova debuggable rejimiga o‘tkazilmagan, manifestda android:debuggable=”true” bayrog‘i qo‘shilmagan yoki release qurilishi ishlatilmoqda. Shuningdek, toifalarda --app=com.example.app ko‘rsatilganligini tekshiring — aks holda Systrace faqat tizim jarayonlarini ushlaydi.
C++ uchun libcutils kutubxonasidan ATRACE_BEGIN va ATRACE_END dan foydalaning. Sarlavha faylini ulang va kerakli qismni o‘rab oling. Belgilar Systrace da jarayoningiz yo‘lida ko‘rinadi, bu ayniqsa o‘yin dvigatellarini (Unity, Unreal) tahlil qilish uchun foydalidir.
Android 12 va undan yuqori versiyalarda Perfetto dan foydalaning. ADB orqali qurilmada perfetto agentini o‘rnating, JSON formatida yozishni boshlang. Tez ko‘rish uchun Perfetto Web UI (ui.perfetto.dev), CI uchun esa Pythonda TraceProcessor bilan buyruq eksportidan foydalaning.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.