แนวคิดและการติดตั้งใช้งาน 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 และ
FrameTimingMetricStartupTimingMetric
StartupTimingMetric จะบันทึกเมตริกเวลาเริ่มต้นของแอปด้วยค่าต่อไปนี้
timeToInitialDisplayMs: ระยะเวลาตั้งแต่ระบบได้รับ เจตนาในการเปิดแอปจนถึงเวลาที่แสดงผลเฟรมแรกของปลายทางActivitytimeToFullDisplayMs: ระยะเวลาตั้งแต่ระบบได้รับ Intent ในการเปิดแอปจนถึงเวลาที่แอปรายงานว่าวาดเสร็จสมบูรณ์แล้วโดยใช้วิธีการreportFullyDrawn()การวัดจะหยุดเมื่อการแสดงผลเฟรมแรกเสร็จสมบูรณ์หลังจากหรือมีreportFullyDrawn()เรียกใช้ การวัดนี้อาจไม่พร้อมใช้งานใน Android 10 (ระดับ API 29) และเวอร์ชันก่อนหน้า
StartupTimingMetric แสดงค่าต่ำสุด ค่ามัธยฐาน และค่าสูงสุดจากการ
การทำซ้ำของสตาร์ทอัป หากต้องการประเมินการปรับปรุงการเริ่มต้น ให้มุ่งเน้นค่ามัธยฐานเสมอ เนื่องจากค่ามัธยฐานให้ค่าประมาณที่ดีที่สุดของเวลาเริ่มต้นของผู้ใช้ทั่วไป ดูข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่ส่งผลต่อเวลาเริ่มต้นของแอปได้ที่เวลาเริ่มต้นของแอป
StartupTimingMetric ผลลัพธ์FrameTimingMetric
FrameTimingMetric จะบันทึกข้อมูลเวลาจากเฟรมที่สร้างขึ้นโดยการทดสอบประสิทธิภาพ เช่น การเลื่อนหรือภาพเคลื่อนไหว และแสดงค่าต่อไปนี้
frameOverrunMs: ระยะเวลาที่เฟรมหนึ่งๆ แสดงผลช้ากว่ากำหนด ตัวเลขที่เป็นค่าบวกแสดงถึงเฟรมที่ขาดหายไปพร้อมกับอาการกระตุกที่มองเห็นได้ หรือ การหยุดชะงัก ตัวเลขติดลบแสดงให้เห็นว่าเฟรมเสร็จสมบูรณ์เร็วขึ้นเท่าใด เมื่อเทียบกับกำหนดเวลาของฮาร์ดแวร์ของระบบย่อย หมายเหตุ: เมตริกนี้ใช้ได้ ใน Android 12 (ระดับ API 31) ขึ้นไปเท่านั้นframeDurationCpuMs: ระยะเวลาที่เฟรมใช้ในการสร้างบน CPU ทั้งในเธรด UI และRenderThread
ระบบจะรวบรวมการวัดเหล่านี้ในการกระจายเปอร์เซ็นไทล์ที่ 50, 90, 95 และ 99
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีระบุและปรับปรุงเฟรมที่ช้าได้ที่การแสดงผลที่ช้า
FrameTimingMetric ผลลัพธ์TraceSectionMetric
TraceSectionMetric จะบันทึกจำนวนครั้งที่ส่วนการติดตามที่เฉพาะเจาะจง
เกิดขึ้นและระยะเวลาสัมบูรณ์ที่ใช้ในการดำเนินการ สำหรับการติดตามเวลา
จะแสดงเวลาต่ำสุด ค่ามัธยฐาน และเวลาสูงสุดเป็นมิลลิวินาที
ส่วนการติดตามเป้าหมายจะกำหนดโดยการเรียกใช้ฟังก์ชัน
trace(sectionName) หรือขอบเขตบล็อกระดับล่างระหว่าง
Trace.beginSection(sectionName) กับ Trace.endSection() หรือตัวแปรแบบไม่พร้อมกัน โดยจะเลือกอินสแตนซ์แรกของส่วนการติดตามที่บันทึกไว้
ระหว่างการวัดผลเสมอ โดยค่าเริ่มต้น เครื่องมือจะแสดงเฉพาะส่วนการติดตามจากแพ็กเกจของคุณ หากต้องการรวมกระบวนการภายนอกแพ็กเกจ ให้ตั้งค่า targetPackageOnly =
false
ดูข้อมูลเพิ่มเติมเกี่ยวกับการติดตามได้ที่ภาพรวมของการติดตามระบบและ กําหนดเหตุการณ์ที่กําหนดเอง
TraceSectionMetric ผลลัพธ์แนะนำสำหรับคุณ
- หมายเหตุ: ข้อความลิงก์จะแสดงเมื่อ JavaScript ปิดอยู่
- สร้างโปรไฟล์พื้นฐาน {:#creating-profile-rules}
- การเขียนการทดสอบประสิทธิภาพระดับสูง
- การวิเคราะห์และการเพิ่มประสิทธิภาพการเริ่มต้นแอป {:#app-startup-analysis-optimization}