แนวคิดและการติดตั้งใช้งาน 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: ระยะเวลาตั้งแต่ระบบได้รับ Intent การเปิดใช้งานจนถึงเวลาที่แสดงผลเฟรมแรกของActivityปลายทางtimeToFullDisplayMs: ระยะเวลาตั้งแต่ที่ระบบได้รับ 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
ดูข้อมูลเพิ่มเติมเกี่ยวกับการติดตามได้ที่ภาพรวมของ System Tracing และกำหนดเหตุการณ์ที่กำหนดเอง
TraceSectionMetric รายการแนะนำสำหรับคุณ
- หมายเหตุ: ข้อความลิงก์จะแสดงเมื่อ JavaScript ปิดอยู่
- สร้างโปรไฟล์พื้นฐาน {:#creating-profile-rules}
- การเขียน Macrobenchmark
- การวิเคราะห์และการเพิ่มประสิทธิภาพการเริ่มต้นแอป {:#app-startup-analysis-optimization}