แนวคิดและการใช้งาน Jetpack Compose
เมตริกเป็นข้อมูลประเภทหลักที่ดึงมาจากเกณฑ์มาตรฐาน โดยจะส่งไปยังmeasureRepeatedฟังก์ชันเป็นListซึ่งช่วยให้คุณระบุเมตริกที่วัดได้หลายรายการพร้อมกัน ต้องระบุเมตริกอย่างน้อย 1 ประเภทเพื่อให้เกณฑ์มาตรฐานทำงานได้
ข้อมูลโค้ดต่อไปนี้จะบันทึกเมตริกการกำหนดเวลาเฟรมและส่วนการติดตามที่กำหนดเอง
Kotlin
benchmarkRule.measureRepeated(
packageName = TARGET_PACKAGE,
metrics = listOf(
FrameTimingMetric(),
TraceSectionMetric("RV CreateView"),
TraceSectionMetric("RV OnBindView"),
),
iterations = 5,
// ...
)
Java
benchmarkRule.measureRepeated(
TARGET_PACKAGE, // packageName
Arrays.asList( // metrics
new StartupTimingMetric(),
new TraceSectionMetric("RV CreateView"),
new TraceSectionMetric("RV OnBindView"),
),
5, // Iterations
// ...
);
ในตัวอย่างนี้ RV CreateView และ RV OnBindView คือรหัสของ
บล็อกที่ติดตามได้ซึ่งกำหนดไว้ใน RecyclerView ซอร์สโค้ดสำหรับ
เมธอด createViewHolder() เป็นตัวอย่างวิธีที่คุณกำหนด
บล็อกที่ติดตามได้ภายในโค้ดของคุณเอง
StartupTimingMetric, TraceSectionMetric และ
FrameTimingMetric จะอธิบายโดยละเอียดในส่วนต่างๆ ของเอกสารนี้ หากต้องการดูรายการเมตริกทั้งหมด โปรดดูคลาสย่อยของ Metric
ระบบจะแสดงผลลัพธ์เกณฑ์มาตรฐานใน Android Studio ดังที่แสดงในรูปที่ 1 หากกำหนดเมตริกไว้หลายรายการ ระบบจะรวมเมตริกทั้งหมดไว้ในเอาต์พุต
TraceSectionMetric และ
FrameTimingMetric.StartupTimingMetric
StartupTimingMetric จะบันทึกเมตริกการกำหนดเวลาการเริ่มต้นแอปด้วยค่าต่อไปนี้
timeToInitialDisplayMs: ระยะเวลาตั้งแต่ระบบได้รับ Intent ในการเปิดแอปจนถึงเวลาที่แสดงผลเฟรมแรกของActivityปลายทางtimeToFullDisplayMs: ระยะเวลาตั้งแต่ระบบได้รับ Intent ในการเปิดแอปจนถึงเวลาที่แอปรายงานว่าแสดงผลอย่างสมบูรณ์แล้วโดยใช้เมธอดreportFullyDrawn()การวัดจะหยุดลงเมื่อแสดงผลเฟรมแรกเสร็จสมบูรณ์หลังจากหรือรวมการเรียกreportFullyDrawn()การวัดนี้อาจไม่พร้อมใช้งานใน Android 10 (ระดับ API 29) และเวอร์ชันก่อนหน้า
StartupTimingMetric จะแสดงค่าต่ำสุด ค่ามัธยฐาน และค่าสูงสุดจากการวนซ้ำการเริ่มต้น หากต้องการประเมินการปรับปรุงการเริ่มต้น ให้มุ่งเน้นที่ค่ามัธยฐานเสมอ เนื่องจากค่าดังกล่าวเป็นการประมาณที่ดีที่สุดสำหรับเวลาการเริ่มต้นของผู้ใช้ทั่วไป ดู
ข้อมูลเพิ่มเติมเกี่ยวกับปัจจัยที่มีส่วนทำให้เวลาการเริ่มต้นแอปนานขึ้นได้ที่เวลาการเริ่มต้นแอป
StartupTimingMetricFrameTimingMetric
FrameTimingMetric จะบันทึกข้อมูลการกำหนดเวลาจากเฟรมที่สร้างโดยเกณฑ์มาตรฐาน เช่น การเลื่อนหรือภาพเคลื่อนไหว และแสดงค่าต่อไปนี้
frameOverrunMs: ระยะเวลาที่เฟรมหนึ่งๆ ไม่เป็นไปตามกำหนดเวลา ตัวเลขที่เป็นบวกแสดงถึงเฟรมที่ถูกทิ้งพร้อมกับอาการกระตุกหรือติดขัดที่มองเห็นได้ ตัวเลขที่เป็นลบแสดงถึงระยะเวลาที่เฟรมเสร็จสมบูรณ์เร็วกว่ากำหนดเวลาฮาร์ดแวร์ของระบบย่อย หมายเหตุ: เมตริกนี้ใช้ได้เฉพาะใน Android 12 (ระดับ API 31) ขึ้นไปframeDurationCpuMs: ระยะเวลาที่ใช้ในการสร้างเฟรมใน CPU ทั้งในเธรด UI และRenderThread
ระบบจะรวบรวมการวัดเหล่านี้ในการกระจายเปอร์เซ็นไทล์ที่ 50, 90, 95 และ 99
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีระบุและปรับปรุงเฟรมที่ช้าได้ที่การแสดงผล ช้า
FrameTimingMetricTraceSectionMetric
TraceSectionMetric จะบันทึกจำนวนครั้งที่ส่วนการติดตามที่เฉพาะเจาะจงเกิดขึ้นและระยะเวลาทั้งหมดที่ใช้ในการดำเนินการ สำหรับการติดตามเวลา ระบบจะแสดงเวลาต่ำสุด เวลาเฉลี่ย และเวลาสูงสุดเป็นมิลลิวินาที
ส่วนการติดตามเป้าหมายจะกำหนดโดยการเรียกฟังก์ชัน
trace(sectionName) หรือขอบเขตบล็อกระดับล่างระหว่าง
Trace.beginSection(sectionName) กับ Trace.endSection() หรือตัวแปรแบบไม่พร้อมกัน โดยจะเลือกอินสแตนซ์แรกของส่วนการติดตามที่บันทึกไว้ระหว่างการวัดเสมอ ระบบจะแสดงส่วนการติดตามจากแพ็กเกจของคุณเท่านั้นโดย
ค่าเริ่มต้น หากต้องการรวมกระบวนการนอกแพ็กเกจ ให้ตั้งค่า targetPackageOnly =
false
ดูข้อมูลเพิ่มเติมเกี่ยวกับการติดตามได้ที่ภาพรวมของการติดตามระบบและ การกำหนดเหตุการณ์ที่กำหนดเอง
TraceSectionMetricแนะนำสำหรับคุณ
- หมายเหตุ: ข้อความลิงก์จะแสดงเมื่อ JavaScript ปิดอยู่
- สร้างโปรไฟล์พื้นฐาน {:#creating-profile-rules}
- การเขียน Macrobenchmark
- การวิเคราะห์และการเพิ่มประสิทธิภาพการเริ่มต้นแอป {:#app-startup-analysis-optimization}