spall คือไลบรารีโปรไฟล์และเป็นส่วนหน้าของเว็บสำหรับการสำรวจโค้ดของคุณและเจาะลึกถึงปัญหาด้านประสิทธิภาพที่อาจเกิดขึ้น
↑ นี่คือ 180 MB (เทียบเท่า JSON 526 MB) ติดตาม 5 นาทีจาก Happenlance โดยได้รับความอนุเคราะห์จาก @pmttavara!
ลองใช้ดูที่ Gravity Moth
spall มีไลบรารี C ส่วนหัวเดียวขนาดเล็ก spall.h
ปัจจุบัน spall รองรับไฟล์ 2 รูปแบบที่แตกต่างกัน:
perfetto
, chrome://tracing
และ speedscope
ตามที่อธิบายด้านล่าง คุณสามารถใช้ส่วนหัวของเราในโค้ดของคุณ หรือใช้โค้ดดัมพ์ JSON ที่เข้ากันได้กับ chrome://tracing
ที่มีอยู่
หากคุณเริ่มต้นใหม่ทั้งหมด คุณอาจต้องการใช้ส่วนหัว Spall เพื่อสร้างเหตุการณ์ รูปแบบไบนารี่มีค่าใช้จ่ายในการทำโปรไฟล์ต่ำกว่ามาก (ดังนั้นการติดตามของคุณควรแม่นยำยิ่งขึ้น) และนำเข้าเร็วกว่ารูปแบบ JSON ประมาณ 10 เท่า
หากคุณต้องการใช้ JSON spall คาดว่าเหตุการณ์จะเป็นไปตามรูปแบบการติดตาม JSON ของ Google ซึ่งจะมีลักษณะดังนี้:
[
{"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 ไม่สนใจเครื่องหมายจุลภาคต่อท้ายและไม่จำเป็นต้องใช้วงเล็บปิด เพื่อความสะดวกในการสร้างไฟล์ / การสตรีมกิจกรรม)
cat
- ประเภทของกิจกรรม ปัจจุบันไม่ได้ใช้
name
- ชื่อของเหตุการณ์, สตริง
ph
- ประเภทของเหตุการณ์
พิมพ์ | เครื่องหมาย |
---|---|
เริ่ม | "บี" |
จบ | "อี" |
สมบูรณ์ | "เอ็กซ์" |
tid
- รหัสเธรด, u32 pid
- รหัสกระบวนการ, u32
tid และ pid ทั้งหมดต้องอยู่ระหว่าง 0 ถึง u32_MAX โดยเป็นค่าทั้งหมด
ts
- การประทับเวลา, สองเท่า, ในหน่วยไมโครวินาที dur
- การประทับเวลา, สองเท่า, ในหน่วยไมโครวินาที
(การประทับเวลา 1 เริ่มต้นที่ 1 μs)
ปัจจุบัน Spall รองรับเฉพาะกิจกรรมเริ่มต้น สิ้นสุด และเสร็จสิ้นเท่านั้น
{"cat":"function", "name":"foo", "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},
กิจกรรมสิ้นสุดจะปิดกิจกรรมเริ่มต้นล่าสุดโดยอัตโนมัติด้วย pid และ tid เดียวกัน ดังนั้นจึงไม่จำเป็นต้องมีชื่อ
ไม่ว่ารูปแบบการนำเข้าจะเป็นอย่างไร กิจกรรมเริ่มต้นและสิ้นสุดทั้งหมดภายในกระบวนการ/เธรด (pid/tid) จะต้องอยู่ในการประทับเวลาแรกสุดก่อน ตามลำดับการจัดเรียง เช่น:
[
{"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}
]