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