บันทึกเมตริกการเปรียบเทียบมาโคร

แนวคิดและการใช้งาน 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
รูปที่ 1 ผลลัพธ์ของ TraceSectionMetric และ FrameTimingMetric.

StartupTimingMetric

StartupTimingMetric จะบันทึกเมตริกการกำหนดเวลาการเริ่มต้นแอปด้วยค่าต่อไปนี้

  • timeToInitialDisplayMs: ระยะเวลาตั้งแต่ระบบได้รับ Intent ในการเปิดแอปจนถึงเวลาที่แสดงผลเฟรมแรกของ Activityปลายทาง
  • timeToFullDisplayMs: ระยะเวลาตั้งแต่ระบบได้รับ Intent ในการเปิดแอปจนถึงเวลาที่แอปรายงานว่าแสดงผลอย่างสมบูรณ์แล้วโดยใช้เมธอด reportFullyDrawn() การวัดจะหยุดลงเมื่อแสดงผลเฟรมแรกเสร็จสมบูรณ์หลังจากหรือรวมการเรียก reportFullyDrawn() การวัดนี้อาจไม่พร้อมใช้งานใน Android 10 (ระดับ API 29) และเวอร์ชันก่อนหน้า

StartupTimingMetric จะแสดงค่าต่ำสุด ค่ามัธยฐาน และค่าสูงสุดจากการวนซ้ำการเริ่มต้น หากต้องการประเมินการปรับปรุงการเริ่มต้น ให้มุ่งเน้นที่ค่ามัธยฐานเสมอ เนื่องจากค่าดังกล่าวเป็นการประมาณที่ดีที่สุดสำหรับเวลาการเริ่มต้นของผู้ใช้ทั่วไป ดู ข้อมูลเพิ่มเติมเกี่ยวกับปัจจัยที่มีส่วนทำให้เวลาการเริ่มต้นแอปนานขึ้นได้ที่เวลาการเริ่มต้นแอป

ผลลัพธ์ StartupTimingMetric
รูปที่ 2 ผลลัพธ์ของ StartupTimingMetric

FrameTimingMetric

FrameTimingMetric จะบันทึกข้อมูลการกำหนดเวลาจากเฟรมที่สร้างโดยเกณฑ์มาตรฐาน เช่น การเลื่อนหรือภาพเคลื่อนไหว และแสดงค่าต่อไปนี้

  • frameOverrunMs: ระยะเวลาที่เฟรมหนึ่งๆ ไม่เป็นไปตามกำหนดเวลา ตัวเลขที่เป็นบวกแสดงถึงเฟรมที่ถูกทิ้งพร้อมกับอาการกระตุกหรือติดขัดที่มองเห็นได้ ตัวเลขที่เป็นลบแสดงถึงระยะเวลาที่เฟรมเสร็จสมบูรณ์เร็วกว่ากำหนดเวลาฮาร์ดแวร์ของระบบย่อย หมายเหตุ: เมตริกนี้ใช้ได้เฉพาะใน Android 12 (ระดับ API 31) ขึ้นไป
  • frameDurationCpuMs: ระยะเวลาที่ใช้ในการสร้างเฟรมใน CPU ทั้งในเธรด UI และ RenderThread

ระบบจะรวบรวมการวัดเหล่านี้ในการกระจายเปอร์เซ็นไทล์ที่ 50, 90, 95 และ 99

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีระบุและปรับปรุงเฟรมที่ช้าได้ที่การแสดงผล ช้า

ผลลัพธ์ FrameTimingMetric
รูปที่ 3 ผลลัพธ์ของ FrameTimingMetric

TraceSectionMetric

TraceSectionMetric จะบันทึกจำนวนครั้งที่ส่วนการติดตามที่เฉพาะเจาะจงเกิดขึ้นและระยะเวลาทั้งหมดที่ใช้ในการดำเนินการ สำหรับการติดตามเวลา ระบบจะแสดงเวลาต่ำสุด เวลาเฉลี่ย และเวลาสูงสุดเป็นมิลลิวินาที

ส่วนการติดตามเป้าหมายจะกำหนดโดยการเรียกฟังก์ชัน trace(sectionName) หรือขอบเขตบล็อกระดับล่างระหว่าง Trace.beginSection(sectionName) กับ Trace.endSection() หรือตัวแปรแบบไม่พร้อมกัน โดยจะเลือกอินสแตนซ์แรกของส่วนการติดตามที่บันทึกไว้ระหว่างการวัดเสมอ ระบบจะแสดงส่วนการติดตามจากแพ็กเกจของคุณเท่านั้นโดย ค่าเริ่มต้น หากต้องการรวมกระบวนการนอกแพ็กเกจ ให้ตั้งค่า targetPackageOnly = false

ดูข้อมูลเพิ่มเติมเกี่ยวกับการติดตามได้ที่ภาพรวมของการติดตามระบบและ การกำหนดเหตุการณ์ที่กำหนดเอง

TraceSectionMetric
รูปที่ 4 ผลลัพธ์ของ TraceSectionMetric