Systrace adalah alat pelacakan sistem Android yang mengumpulkan data tentang kerja kernel Linux, prosesor, akselerator grafis, dan semua proses sistem dalam waktu singkat. Tidak seperti Traceview yang berfokus pada metode di dalam aplikasi, Systrace menunjukkan gambaran sistem: beban setiap inti CPU, kerja SurfaceFlinger, panggilan Binder, dan siklus GC. Menurut Google, 2024, alat ini sangat diperlukan untuk mendiagnosis frame yang terlewat, pengumpulan sampah yang sering, dan anomali di thread UI.
Poin Utama
Systrace adalah alat baris perintah dari Android SDK yang menangkap dan menggabungkan data dari beberapa sumber pelacakan kernel (ftrace) dan ruang pengguna (atrace) menjadi satu laporan HTML. Alat ini muncul di Android 4.1 (Jelly Bean) sebagai pengganti alat traceview lama untuk profiling sistem dan untuk waktu yang lama tetap menjadi alat standar diagnostik kinerja di platform Android.
Systrace bergantung pada ftrace — mekanisme pelacakan kernel Linux, tersedia di Android mulai versi 4.1. Saat dijalankan, Systrace mengaktifkan kategori jejak tertentu: sched (penjadwal tugas), freq (frekuensi CPU), idle (status diam), workq (antrian kerja), binder, gfx, dan lainnya. Data dikumpulkan dalam buffer melingkar kernel dan setelah dihentikan digabungkan menjadi satu file trace.html yang dapat dibuka di browser mana pun.
Mulai Android Studio 3.1, Systrace terintegrasi dalam CPU Profiler. Dalam mode “Trace System Calls”, profiler menjalankan Systrace pada perangkat yang terhubung dan menampilkan hasilnya langsung di jendela Android Studio. Ini menghilangkan kebutuhan untuk bekerja dengan baris perintah untuk kasus dasar, namun tetap mempertahankan fungsionalitas penuh — semua kategori jejak, pemfilteran, dan garis waktu interaktif. Kinerja perangkat selama pelacakan sedikit berkurang, karena ftrace dirancang untuk overhead minimal.
Systrace menggunakan dua mekanisme pengumpulan data: ftrace di level kernel untuk peristiwa sistem dan atrace di ruang pengguna untuk penanda khusus Android. ftrace mencatat peralihan konteks (sched_switch), perubahan frekuensi CPU (cpu_frequency), interupsi (irq_handler_entry), dan peristiwa lainnya. atrace menambahkan penanda dari framework Android — awal dan akhir rendering frame, panggilan SurfaceFlinger, dan transaksi Binder.
Fitur utama Systrace — visualisasi rantai rendering setiap frame: aplikasi → BufferQueue → SurfaceFlinger → HWC (composer) → Display. Jika pada tahap mana pun terjadi keterlambatan, Systrace menunjukkan penyebab pastinya: aplikasi tidak sempat menyiapkan buffer, SurfaceFlinger menunggu VSync, atau HWC tidak dapat menyusun layer. Frame Lifecycle pada garis waktu diwarnai berdasarkan status: hijau (tepat waktu), kuning (tertunda), merah (terlewat). Visualisasi ini adalah alat utama untuk mengoptimalkan kinerja UI.
Systrace mendukung lebih dari 20 kategori jejak, yang masing-masing mencakup serangkaian peristiwa terkait. Kategori penting: gfx (rendering grafis), input (pemrosesan masukan), view (sistem View), webview (WebView), power (konsumsi daya), hal (abstraksi perangkat keras). Untuk profiling game, kategori gfx dengan detail hingga perintah GPU melalui AGI (Android GPU Inspector) berguna.
Systrace menyediakan serangkaian fitur unik untuk Android yang tidak tersedia di profiler lain: garis waktu sistem, metrik level kernel, dan deteksi masalah otomatis.
Laporan HTML Systrace berisi garis waktu bertingkat, di mana setiap jalur sesuai dengan satu proses atau thread. Skala waktu dapat diperbesar dan diperkecil, peristiwa dapat diklik untuk melihat detail (durasi, proses inisiator, argumen tambahan). Pengkodean warna membantu orientasi cepat: blok hijau — kerja proses, biru — menunggu, oranye — interupsi, putih — diam.
Systrace secara otomatis menganalisis jejak dan menampilkan pesan Alert dengan menunjukkan lokasi masalah. Contoh: “Buffer underrun — SurfaceFlinger tidak sempat menerima buffer sebelum VSync” atau “Long Binder transaction — 42 ms di thread Binder_1”. Setiap alert berisi tautan ke bagian garis waktu yang sesuai dan rekomendasi perbaikan. Ini menghemat jam analisis manual dan merupakan salah satu alasan utama menggunakan Systrace daripada pencatatan manual.
Pengembang dapat menambahkan penanda sendiri ke jejak Systrace melalui API Trace.beginSection dan Trace.endSection. Ini memungkinkan pelacakan eksekusi bagian kode kritis langsung di garis waktu sistem — misalnya, menandai awal dan akhir pemuatan data atau perhitungan tata letak. Penanda ditampilkan sebagai blok terpisah di jalur aplikasi dan terlihat di samping peristiwa sistem.
| Kategori | Data | Penggunaan umum |
|---|---|---|
| sched | Peralihan konteks, status diam | Pemblokiran thread, contention |
| gfx | VSync, persiapan buffer, HWC | Frame drop, jank |
| binder | Transaksi Binder, latensi | Keterlambatan IPC, panggilan jarak jauh |
| freq | Frekuensi CPU, scaling governor | Throttling, konsumsi daya |
| gfx + AGI | Perintah GPU, shader | Kinerja game |
Menjalankan Systrace dapat dilakukan dengan dua cara: melalui Android Studio CPU Profiler (mode “Trace System Calls”) atau melalui baris perintah menggunakan skrip python systrace.py dari folder platform-tools. Setiap cara memiliki skenario penerapannya sendiri.
Hubungkan perangkat, buka Profiler (View → Tool Windows → Profiler), pilih proses Anda, buka tab CPU, pilih mode “Trace System Calls” dan tekan Record. Setelah 5–30 detik tekan Stop — Android Studio akan menjalankan Systrace di perangkat, menunggu selesai, dan memuat hasilnya. Keterbatasan: perekaman hanya mungkin dilakukan saat Profiler terbuka, yang tidak nyaman untuk skenario panjang atau otomatisasi.
Untuk kontrol yang lebih fleksibel, gunakan skrip systrace.py. Tentukan kategori jejak, durasi, dan nama file keluaran. Contoh: menangkap data gfx, input, dan sched selama 10 detik. Untuk menjalankan diperlukan Python 2.7+ dan perangkat terhubung dengan debugging USB. Di Android 12+, Systrace telah digantikan oleh Perfetto — perintahnya tetap sama, tetapi skrip mengarahkan panggilan ke perfetto.
# Menjalankan systrace dasar selama 10 detik
$ python systrace.py \
--time=10 \
-o trace.html \
gfx input sched
# Hanya kategori gfx untuk analisis UI
$ python systrace.py \
--time=5 \
-t gfx \
-o ui_trace.html
Agar kode Anda muncul di garis waktu Systrace, bungkus bagian kritis dengan Trace.beginSection / Trace.endSection. Penting bahwa beginSection dan endSection benar-benar berpasangan — jika tidak, Systrace akan menampilkan garis waktu yang tidak akurat. Di Kotlin, lebih mudah menggunakan inline-extension untuk menjamin penutupan bagian bahkan saat terjadi pengecualian.
import android.os.Trace
fun traceSection(name: String, block: () -> Unit) {
Trace.beginSection(name)
try {
block()
} finally {
Trace.endSection()
}
}
// Penggunaan dalam kode
traceSection("load_screen_data") {
fetchData()
updateUI()
}
Laporan Systrace adalah file HTML mandiri yang dapat dibuka di Chrome, Edge, atau Firefox. Ini berisi garis waktu interaktif, panel pemilihan proses, daftar pesan alert, dan metrik utama (frame rate, penggunaan CPU, transaksi Binder). Memahami struktur laporan adalah keterampilan kunci untuk profiling yang efektif.
Garis waktu menampilkan waktu dari kiri ke kanan. Setiap proses dan thread — jalur terpisah. Tombol W/S memperbesar/memperkecil, A/D bergerak dalam waktu. Pilih area dengan mouse untuk memperbesar bagian. Garis VSync menunjukkan batas frame (setiap 16,6 ms pada 60 FPS). Jika antara dua garis VSync tidak muat siklus rendering penuh — frame terlewat. Perhatikan jalur SurfaceFlinger: jika lama sibuk (blok oranye), berarti komposisi layer memperlambat rendering keseluruhan.
Panel Alerts di sisi kiri laporan berisi masalah yang terdeteksi secara otomatis. Setiap alert dapat diklik — saat diklik, garis waktu berpindah ke momen masalah. Alert paling umum: “Long Sync” (sinkronisasi thread panjang), “Scheduling Delay” (keterlambatan penjadwal), “Buffer Overrun” (buffer SurfaceFlinger meluap). Jika alert menunjukkan nilai sekitar 100 ms untuk Scheduling Delay, ini langsung menunjukkan bahwa thread UI menunggu CPU karena beban latar belakang — komputasi berat harus dipindahkan ke Worker Thread.
Untuk analisis frame terlewat, aktifkan jalur SurfaceFlinger dan app.gfx. Setiap frame ditampilkan sebagai persegi panjang: hijau (≤16 ms), kuning (16–32 ms), merah (>32 ms). Jika Anda melihat persegi panjang merah di jalur aplikasi, klik di atasnya — Systrace akan menunjukkan metode (atau panggilan sistem) mana yang melebihi batas. Menurut Google (Android Performance Patterns, 2023), 70% masalah jank disebabkan oleh onBindViewHolder yang panjang atau GC yang sering.
Perfetto adalah penerus Systrace, diperkenalkan oleh Google di Android 9 (Pie) sebagai alat eksperimental dan menjadi alat utama mulai Android 12. Perfetto menggunakan format data protobuf modern, mendukung sesi panjang (jam bukan detik), dan memiliki Web UI untuk melihat jejak. Mari kita bahas perbedaan utama antara kedua sistem.
| Kriteria | Systrace | Perfetto |
|---|---|---|
| Format | Laporan HTML (trace.html) | Protobuf (.trace / .perfetto-trace) |
| Durasi | Hingga 60 detik | Jam, gigabyte data |
| Antarmuka | HTML bawaan | Web UI (ui.perfetto.dev) |
| Kategori | Tetap (ftrace + atrace) | Dapat diperluas (kueri SQL pada jejak) |
| Mobilitas | Hanya Android | Android, Linux, Chrome, Windows |
Meskipun transisi ke Perfetto, keterampilan bekerja dengan Systrace tetap relevan: pada perangkat hingga Android 11 digunakan secara default, dan Perfetto mempertahankan kompatibilitas mundur dengan kategori Systrace. Android Studio CPU Profiler menggunakan Perfetto untuk perangkat baru dan Systrace untuk yang lama — transparan bagi pengguna. Untuk CI/CD, disarankan menggunakan Perfetto karena formatnya cocok untuk pemrosesan otomatis melalui Python dan SQL.
Untuk penguasaan praktis Systrace, mari kita bahas dua skenario: menemukan penyebab frame terlewat saat menggulir dan mendiagnosis GC sering yang memblokir thread UI.
Jalankan Systrace dengan kategori gfx selama 10 detik, gulir daftar di aplikasi. Dalam laporan, temukan bagian dengan frame merah. Klik pada frame bermasalah dan lihat jalur app — jika ada blok “inflateLayout” atau “onBindViewHolder” dengan lebar >16 ms, masalahnya ada pada pengembangan tata letak atau pengikatan data. Solusi: optimalkan tata letak (kurangi kedalaman ViewGroup, ViewStub), pindahkan pemuatan gambar ke Glide dengan onAttachedToWindow.
Systrace dengan kategori freq dan sched memungkinkan melihat seberapa sering siklus GC mendesak thread UI. Temukan jalur aplikasi di garis waktu — jika Anda melihat blok periodik dengan durasi 20–50 ms bernama “Concurrent GC”, berarti pengumpul sampah bekerja terlalu sering. Tambahkan kategori “dalvik” untuk analisis mendetail. Solusi: konversikan Bitmap ke ByteBuffer, gunakan kumpulan objek (ObjectPool) untuk alokasi sering, kurangi fragmentasi heap melalui argumen ART.
# Menjalankan dengan kategori untuk analisis UI + GC
$ python systrace.py \
--time=15 \
-o gc_analysis.html \
gfx sched dalvik freq
# Penangkapan dengan durasi 30 detik untuk tes yang dapat diulang
$ python systrace.py \
--time=30 \
--app=com.example.app \
-o app_trace.html
Pertanyaan yang Sering Diajukan
Ya, untuk menjalankan Systrace tidak diperlukan akses root. Alat ini menggunakan atrace, yang tersedia di perangkat mana pun dengan debugging USB diaktifkan. Beberapa kategori (power, freq) mungkin memerlukan tanda tangan sistem, tetapi kategori dasar (gfx, sched, input) berfungsi di semua perangkat.
Batasan 60 detik terkait dengan volume buffer melingkar ftrace — saat perekaman panjang, buffer akan ditimpa. Perfetto menghilangkan batasan ini: Anda dapat merekam berjam-jam dan mendapatkan jejak berukuran hingga beberapa gigabyte dengan transfer melalui USB atau perekaman streaming ke disk.
Kemungkinan penyebab: aplikasi tidak dialihkan ke mode debuggable, bendera android:debuggable=”true” tidak ditambahkan di manifes, atau menggunakan build rilis. Juga periksa apakah dalam kategori ditentukan --app=com.example.app — jika tidak, Systrace hanya menangkap proses sistem.
Untuk C++, gunakan ATRACE_BEGIN dan ATRACE_END dari pustaka libcutils. Sertakan file header dan bungkus bagian yang diinginkan. Penanda akan muncul di Systrace pada jalur proses Anda, yang sangat berguna untuk analisis mesin game (Unity, Unreal).
Di Android 12 dan yang lebih baru, gunakan Perfetto. Instal agen perfetto di perangkat melalui ADB, mulai perekaman dalam format JSON. Untuk tampilan cepat, gunakan Perfetto Web UI (ui.perfetto.dev), dan untuk CI — ekspor perintah dengan TraceProcessor di Python.
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga