Systrace, Linux çekirdeği, CPU, GPU ve tüm sistem süreçleri hakkında kısa bir süre içinde veri toplayan bir Android sistem izleme aracıdır. Uygulama içindeki yöntemlere odaklanan Traceview'in aksine Systrace, sistem resmini gösterir: her CPU çekirdeğinin yükü, SurfaceFlinger çalışması, Binder çağrıları ve GC döngüleri. Google, 2024'e göre araç, düşen kareleri, sık çöp toplamalarını ve UI iş parçacığındaki anormallikleri teşhis etmek için vazgeçilmezdir.
Önemli Noktalar
Systrace, Android SDK'dan bir komut satırı yardımcı programıdır ve birden çok çekirdek izleme (ftrace) ve kullanıcı alanı (atrace) kaynağından gelen verileri tek bir HTML raporunda yakalar ve birleştirir. Araç, Android 4.1'de (Jelly Bean) sistem profilleme için eski traceview yardımcı programının yerine ortaya çıktı ve uzun süre Android platformunda standart performans teşhis aracı olarak kaldı.
Systrace, ftrace'e dayanır — Android 4.1'den beri mevcut olan bir Linux çekirdeği izleme mekanizmasıdır. Systrace başladığında, belirtilen izleme kategorilerini etkinleştirir: sched (görev zamanlayıcı), freq (CPU frekansı), idle (boşta durumları), workq (çalışma kuyrukları), binder, gfx ve diğerleri. Veriler çekirdeğin halka tamponunda toplanır ve durdurulduktan sonra herhangi bir tarayıcıda açılabilen tek bir trace.html dosyasında birleştirilir.
Android Studio 3.1'den itibaren Systrace, CPU Profiler'a entegre edilmiştir. “Trace System Calls” modunda, profil oluşturucu bağlı cihazda Systrace'i çalıştırır ve sonuçları doğrudan Android Studio penceresinde görüntüler. Bu, tüm işlevselliği — tüm izleme kategorileri, filtreleme ve etkileşimli zaman çizelgesi — korurken temel durumlar için komut satırıyla çalışma ihtiyacını ortadan kaldırır. İzleme sırasında cihaz performansı önemsiz derecede azalır çünkü ftrace minimum ek yük için tasarlanmıştır.
Systrace iki veri toplama mekanizması kullanır: sistem olayları için çekirdek seviyesinde ftrace ve Android'e özgü etiketler için kullanıcı alanında atrace. ftrace, bağlam değişimlerini (sched_switch), CPU frekansı değişimlerini (cpu_frequency), kesmeleri (irq_handler_entry) ve diğer olayları kaydeder. atrace, Android çerçevesinden etiketler ekler — kare oluşturmanın başlangıcı ve bitişi, SurfaceFlinger çağrıları ve Binder işlemleri.
Systrace'in temel özelliği, her karenin oluşturma hattının görselleştirilmesidir: uygulama → BufferQueue → SurfaceFlinger → HWC (bileştirici) → Ekran. Herhangi bir aşamada bir gecikme olursa, Systrace kesin nedeni gösterir: uygulama tamponu zamanında hazırlamadı, SurfaceFlinger VSync'i bekliyordu veya HWC katmanları birleştiremedi. Zaman çizelgesindeki kare yaşam döngüsü duruma göre renk kodludur: yeşil (zamanında), sarı (gecikmeli), kırmızı (düşürülmüş). Bu görselleştirme, UI performansını optimize etmek için birincil araçtır.
Systrace, her biri ilgili olayları içeren 20'den fazla izleme kategorisini destekler. Önemli kategoriler şunları içerir: gfx (grafik oluşturma), input (giriş işleme), view (View sistemi), webview (WebView), power (güç tüketimi), hal (donanım soyutlama katmanı). Oyun profilleme için, AGI (Android GPU Inspector) aracılığıyla GPU komut ayrıntılarını içeren gfx kategorisi kullanışlıdır.
Systrace, diğer profil oluşturucularda bulunmayan Android için benzersiz bir yetenek seti sağlar: sistem zaman çizelgesi, çekirdek seviyesi metrikleri ve otomatik sorun tespiti.
Systrace HTML raporu, her şeridin bir işlem veya iş parçacığına karşılık geldiği çok seviyeli bir zaman çizelgesi içerir. Zaman ölçeğini yakınlaştırıp uzaklaştırabilir, ayrıntıları görmek için olaylara tıklayabilirsiniz (süre, başlatıcı işlem, ek argümanlar). Renk kodlaması hızlı gezinmeye yardımcı olur: yeşil bloklar — işlem çalışıyor, mavi — bekliyor, turuncu — kesme, beyaz — boşta.
Systrace, izi otomatik olarak analiz eder ve sorunlu alanları belirten uyarı mesajları görüntüler. Örneğin: “Buffer underrun — SurfaceFlinger tamponu VSync'ten önce almadı” veya “Long Binder transaction — Binder_1 iş parçacığında 42 ms”. Her uyarı, zaman çizelgesinin ilgili bölümüne bir bağlantı ve düzeltme önerisi içerir. Bu, saatlerce süren manuel analizden tasarruf sağlar ve manuel günlük kaydı yerine Systrace kullanmanın ana nedenlerinden biridir.
Geliştiriciler, Trace.beginSection ve Trace.endSection API'si aracılığıyla Systrace izine özel etiketler ekleyebilir. Bu, kritik kod bölümlerinin yürütülmesini doğrudan sistem zaman çizelgesinde izlemeye olanak tanır — örneğin, veri yükleme veya düzen hesaplamasının başlangıcını ve bitişini işaretlemek. Etiketler, uygulama şeridinde ayrı bloklar olarak görünür ve sistem olaylarının yanında görünür.
| Kategori | Veri | Tipik Kullanım |
|---|---|---|
| sched | Bağlam değişimleri, boşta durumlar | İş parçacığı tıkanmaları, çekişme |
| gfx | VSync, tampon hazırlığı, HWC | Kare düşmeleri, takılma |
| binder | Binder işlemleri, gecikme | IPC gecikmeleri, uzak çağrılar |
| freq | CPU frekansı, ölçekleme yöneticisi | Kısma, güç tüketimi |
| gfx + AGI | GPU komutları, gölgelendiriciler | Oyun performansı |
Systrace iki şekilde çalıştırılabilir: Android Studio CPU Profiler (“Trace System Calls” modu) aracılığıyla veya platform-tools klasöründeki systrace.py Python betiğini kullanarak komut satırı aracılığıyla. Her yöntemin kendi kullanım senaryoları vardır.
Cihazı bağlayın, Profiler'ı açın (View → Tool Windows → Profiler), işleminizi seçin, CPU sekmesine gidin, “Trace System Calls” modunu seçin ve Record'a tıklayın. 5–30 saniye sonra Stop'a tıklayın — Android Studio cihazda Systrace'i çalıştıracak, tamamlanmasını bekleyecek ve sonucu yükleyecektir. Sınırlama: kayıt yalnızca Profiler açıkken mümkündür, bu da uzun senaryolar veya otomasyon için elverişsizdir.
Daha esnek kontrol için systrace.py betiğini kullanın. İzleme kategorilerini, süreyi ve çıktı dosya adını belirtin. Örnek: 10 saniye boyunca gfx, input ve sched verilerini yakalama. Çalıştırmak için Python 2.7+ ve USB hata ayıklaması etkinleştirilmiş bağlı bir cihaz gerekir. Android 12+'da Systrace'in yerini Perfetto alır — komut aynı kalır, ancak betik çağrıları perfetto'ya yönlendirir.
# systrace'in 10 saniyelik temel çalıştırılması
$ python systrace.py \
--time=10 \
-o trace.html \
gfx input sched
# UI analizi için yalnızca gfx kategorisi
$ python systrace.py \
--time=5 \
-t gfx \
-o ui_trace.html
Kodunuzun Systrace zaman çizelgesinde görünmesini sağlamak için kritik bölümü Trace.beginSection / Trace.endSection ile sarın. beginSection ve endSection'un kesinlikle eşleşmesi önemlidir — aksi takdirde Systrace yanlış bir zaman çizelgesi gösterir. Kotlin'de, bir istisna durumunda bile bölüm kapatmayı garanti etmek için satir içi uzantı kullanmak uygundur.
import android.os.Trace
fun traceSection(name: String, block: () -> Unit) {
Trace.beginSection(name)
try {
block()
} finally {
Trace.endSection()
}
}
// Kodda kullanım
traceSection("load_screen_data") {
fetchData()
updateUI()
}
Systrace raporu, Chrome, Edge veya Firefox'ta açılabilen, kendi kendine yeten bir HTML dosyasıdır. Etkileşimli bir zaman çizelgesi, işlem seçme paneli, uyarı mesajları listesi ve temel metrikler (kare hızı, CPU kullanımı, Binder işlemleri) içerir. Rapor yapısını anlamak, etkili profilleme için önemli bir beceridir.
Zaman çizelgesi zamanı soldan sağa görüntüler. Her işlem ve iş parçacığı ayrı bir şerittir. W/S tuşları yakınlaştırır/uzaklaştırır, A/D tuşları zamanda hareket eder. Bir bölümü yakınlaştırmak için fareyle bir alan seçin. VSync çizgileri kare sınırlarını gösterir (60 FPS'de her 16,6 ms'de bir). İki VSync çizgisi arasına tam bir oluşturma döngüsü sığmazsa — kare düşer. SurfaceFlinger şeridine dikkat edin: uzun süre meşgulse (turuncu blok), katman birleştirme genel oluşturmayı yavaşlatıyor demektir.
Raporun sol tarafındaki Uyarılar paneli, otomatik olarak algılanan sorunları içerir. Her uyarı tıklanabilir — tıklandığında zaman çizelgesi sorunlu ana hareket eder. En yaygın uyarılar: “Long Sync” (uzun iş parçacığı senkronizasyonu), “Scheduling Delay” (zamanlayıcı gecikmesi), “Buffer Overrun” (SurfaceFlinger tampon taşması). Bir uyarı Scheduling Delay için ~100 ms değeri gösteriyorsa, bu UI iş parçacığının arka plan yükü nedeniyle CPU'yu beklediğini doğrudan gösterir — ağır hesaplamalar bir Worker Thread'e taşınmalıdır.
Düşen kareleri analiz etmek için SurfaceFlinger ve app.gfx şeritlerini etkinleştirin. Her kare bir dikdörtgen olarak görüntülenir: yeşil (≤16 ms), sarı (16–32 ms), kırmızı (>32 ms). Uygulama şeridinde kırmızı bir dikdörtgen görürseniz, üzerine tıklayın — Systrace, sınırı aşan belirli yöntemi (veya sistem çağrısını) gösterecektir. Google'a (Android Performance Patterns, 2023) göre, takılma sorunlarının %70'i yavaş onBindViewHolder veya sık GC'den kaynaklanır.
Perfetto, Systrace'in halefidir ve Google tarafından Android 9'da (Pie) deneysel bir araç olarak tanıtılmış ve Android 12'den itibaren birincil çözüm haline gelmiştir. Perfetto modern bir protobuf veri formatı kullanır, uzun oturumları destekler (saniyeler yerine saatler) ve izleri görüntülemek için bir Web arayüzüne sahiptir. İki sistem arasındaki temel farkları inceleyelim.
| Kriter | Systrace | Perfetto |
|---|---|---|
| Format | HTML raporu (trace.html) | Protobuf (.trace / .perfetto-trace) |
| Süre | 60 saniyeye kadar | Saatler, gigabaytlarca veri |
| Arayüz | Yerleşik HTML | Web arayüzü (ui.perfetto.dev) |
| Kategoriler | Sabit (ftrace + atrace) | Genişletilebilir (ize SQL sorguları) |
| Hareketlilik | Sadece Android | Android, Linux, Chrome, Windows |
Perfetto'ya geçişe rağmen, Systrace becerileri hala geçerlidir: Android 11 ve altı cihazlarda varsayılan olarak kullanılır ve Perfetto, Systrace kategorileriyle geriye dönük uyumluluğu korur. Android Studio CPU Profiler'da, yeni cihazlar için Perfetto ve eski cihazlar için Systrace kullanılır — kullanıcı için şeffaf bir şekilde. CI/CD için Perfetto önerilir çünkü formatı Python ve SQL aracılığıyla otomatik olarak işlenebilir.
Systrace'te pratik olarak ustalaşmak için iki senaryoyu ele alalım: kaydırma sırasında düşen karelerin nedenini bulma ve UI iş parçacığını bloke eden sık GC'yi teşhis etme.
Systrace'i gfx kategorisiyle 10 saniye çalıştırın, uygulamadaki listeyi kaydırın. Raporda kırmızı karelerin olduğu bölümleri bulun. Sorunlu kareye tıklayın ve uygulama şeridine bakın — 16 ms'den geniş “inflateLayout” veya “onBindViewHolder” bloğu varsa, sorun düzen şişirmesi veya veri bağlamadadır. Çözüm: düzeni optimize edin (derin ViewGroup'u azaltın, ViewStub), görüntü yüklemeyi onAttachedToWindow ile Glide'a aktarın.
freq ve sched kategorileriyle Systrace, GC döngülerinin UI iş parçacığını ne sıklıkta öncelediğini görmenizi sağlar. Zaman çizelgesinde uygulama şeridini bulun — “Concurrent GC” adlı 20–50 ms süren periyodik bloklar görüyorsanız, çöp toplayıcı çok sık çalışıyor demektir. Ayrıntılı analiz için “dalvik” kategorisini ekleyin. Çözüm: Bitmap'i ByteBuffer'a dönüştürün, sık ayırmalar için bir nesne havuzu (ObjectPool) kullanın, ART argümanları aracılığıyla yığın parçalanmasını azaltın.
# UI + GC analizi için kategorilerle çalıştırma
$ python systrace.py \
--time=15 \
-o gc_analysis.html \
gfx sched dalvik freq
# Tekrarlanabilir test için 30 saniyelik yakalama
$ python systrace.py \
--time=30 \
--app=com.example.app \
-o app_trace.html
Sıkça Sorulan Sorular
Evet, Systrace çalıştırmak için kök erişimi gerekmez. Araç, USB hata ayıklaması etkinleştirilmiş herhangi bir cihazda bulunan atrace'i kullanır. Bazı kategoriler (power, freq) sistem imzası gerektirebilir, ancak ana kategoriler (gfx, sched, input) tüm cihazlarda çalışır.
60 saniye sınırı, ftrace halka tampon kapasitesiyle ilgilidir — uzun kayıt sırasında tamponun üzerine yazılır. Perfetto bu sınırlamayı kaldırır: USB aktarımı veya diske akış yoluyla saatlerce kayıt yapabilir ve birkaç gigabayta kadar izler elde edebilirsiniz.
Olası nedenler: uygulama hata ayıklanabilir modda değil, manifestte android:debuggable=“true” bayrağı ayarlanmamış veya sürüm derlemesi kullanılıyor. Ayrıca kategorilerde --app=com.example.app belirttiğinizi kontrol edin — aksi takdirde Systrace yalnızca sistem işlemlerini yakalar.
C++ için libcutils kitaplığından ATRACE_BEGIN ve ATRACE_END kullanın. Başlık dosyasını ekleyin ve istediğiniz bölümü sarın. Etiket, işlem şeridinizde Systrace'te görünecek ve özellikle oyun motorlarını (Unity, Unreal) analiz etmek için kullanışlı olacaktır.
Android 12 ve üzerinde Perfetto kullanın. ADB aracılığıyla cihaza perfetto aracısını yükleyin, JSON formatında kaydı başlatın. Hızlı görüntüleme için Perfetto Web arayüzünü (ui.perfetto.dev) ve CI için Python'da TraceProcessor ile komut satırı dışa aktarımını kullanın.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun