spall adalah perpustakaan profiler dan antarmuka web untuk menjelajahi kode Anda dan menggali potensi masalah kinerja.
^ ini berukuran 180 MB (setara dengan 526 MB JSON), penelusuran 5 menit dari Happenlance, milik @pmttavara!
Cobalah di Gravity Moth
spall menyertakan perpustakaan C header tunggal kecil, spall.h
.
spall saat ini mendukung 2 format file berbeda:
perfetto
, chrome://tracing
, dan speedscope
, dijelaskan di bawah Anda dapat melengkapi kode Anda dengan header kami, atau menggunakan kode dumping JSON yang kompatibel dengan chrome://tracing
.
Jika Anda memulai dari awal, Anda mungkin ingin menggunakan header spall untuk menghasilkan acara. Format biner memiliki overhead pembuatan profil yang jauh lebih rendah (sehingga pelacakan Anda harus lebih akurat), dan menyerap sekitar 10x lebih cepat dibandingkan format JSON.
Jika Anda ingin menggunakan JSON, spall mengharapkan kejadian mengikuti format jejak JSON Google. Tampilannya seperti ini:
[
{"cat":"function", "name":"main", "ph": "X", "pid": 0, "tid": 0, "ts": 0, "dur": 1},
{"cat":"function", "name":"myfunction", "ph": "B", "pid": 0, "tid": 0, "ts": 0},
{"cat":"function", "ph": "E", "pid": 0, "tid": 0, "ts": 0}
]
(spall tidak peduli dengan tanda koma dan tanda kurung tutup tidak diperlukan, untuk memudahkan pembuatan file/streaming acara)
cat
- Kategori acara. Saat ini tidak digunakan
name
- nama acara, sebuah string
ph
- Jenis acara
Jenis | Simbol |
---|---|
Mulai | "B" |
Akhir | "E" |
Menyelesaikan | "X" |
tid
- id utas, u32 pid
- id proses, u32
Semua tids dan pids harus antara 0 dan u32_MAX, sebagai nilai keseluruhan
ts
- stempel waktu, ganda, dalam mikrodetik dur
- stempel waktu, ganda, dalam mikrodetik
(Stempel waktu 1 dimulai pada 1 s)
Spall saat ini hanya mendukung acara Mulai, Akhir, dan Selesai
{"cat":"function", "name":"foo", "ph": "X", "pid": 0, "tid": 0, "ts": 0, "dur": 1},
Peristiwa yang lengkap memerlukan bidang durasi, karena peristiwa tersebut melacak awal/akhir suatu fungsi sekaligus
{"cat":"function", "name":"myfunction", "ph": "B", "pid": 0, "tid": 0, "ts": 0},
{"cat":"function", "ph": "E", "pid": 0, "tid": 0, "ts": 0},
Acara akhir secara otomatis menutup acara awal terbaru dengan pid dan tid yang sama, sehingga tidak memerlukan nama
Terlepas dari format penyerapan, semua peristiwa awal dan akhir dalam suatu proses/utas (pid/tid) diharapkan berada pada stempel waktu paling awal terlebih dahulu, dengan urutan yang diurutkan, misalnya:
[
{"cat":"function", "name":"main", "ph": "B", "pid": 0, "tid": 0, "ts": 0},
{"cat":"function", "name":"foo", "ph": "B", "pid": 0, "tid": 0, "ts": 1},
{"cat":"function", "ph": "E", "pid": 0, "tid": 0, "ts": 2},
{"cat":"function", "ph": "E", "pid": 0, "tid": 0, "ts": 3}
]