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

เมตริกเป็นข้อมูลประเภทหลักที่ดึงมาจากเกณฑ์มาตรฐาน โดยจะส่งไปยัง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 จะกล่าวถึงโดยละเอียดในส่วนต่างๆ ของเอกสารนี้ หากต้องการดูรายการเมตริกทั้งหมด โปรดดูคลาสย่อยของ 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 จะบันทึกจำนวนครั้งที่ส่วนการติดตามซึ่งตรงกับ sectionName ที่ระบุเกิดขึ้นและระยะเวลาที่ใช้ สำหรับเวลา ระบบจะแสดงเวลาต่ำสุด เวลาเฉลี่ย และเวลาสูงสุดเป็นมิลลิวินาที ส่วนการติดตามจะกำหนดโดย การเรียกใช้ฟังก์ชัน trace(sectionName) หรือโค้ดระหว่าง Trace.beginSection(sectionName) กับ Trace.endSection() หรือ ตัวแปรแบบไม่พร้อมกัน ระบบจะเลือกอินสแตนซ์แรกของส่วนการติดตามที่บันทึกไว้ระหว่างการวัดเสมอ โดยค่าเริ่มต้น ระบบจะแสดงเฉพาะส่วนการติดตามจากแพ็กเกจของคุณ หากต้องการรวมกระบวนการนอกแพ็กเกจ ให้ตั้งค่า targetPackageOnly = false

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

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

PowerMetric

PowerMetric จะบันทึก การเปลี่ยนแปลงของกำลังหรือพลังงานตลอดระยะเวลาการทดสอบสำหรับ หมวดหมู่กำลังที่ระบุ ระบบจะแบ่งแต่ละหมวดหมู่ที่เลือกออกเป็นคอมโพเนนต์ย่อยที่วัดได้ และเพิ่มหมวดหมู่ที่ไม่ได้เลือกไปยังเมตริก "ไม่ได้เลือก"

เมตริกเหล่านี้จะวัดการใช้พลังงานทั้งระบบ ไม่ใช่การใช้พลังงานต่อแอป และใช้ได้เฉพาะในอุปกรณ์ Pixel 6, Pixel 6 Pro และอุปกรณ์รุ่นที่ใหม่กว่า

  • power<category>Uw: ปริมาณกำลังที่ใช้ตลอดระยะเวลาการทดสอบ ในหมวดหมู่นี้
  • energy<category>Uws: ปริมาณพลังงานที่ถ่ายโอนต่อหน่วยเวลาสำหรับ ระยะเวลาการทดสอบในหมวดหมู่นี้

หมวดหมู่มีดังนี้

  • CPU
  • DISPLAY
  • GPU
  • GPS
  • MEMORY
  • MACHINE_LEARNING
  • NETWORK
  • UNCATEGORIZED

ในบางหมวดหมู่ เช่น CPU การแยกงานที่กระบวนการอื่นๆ ทำออกจากงานที่แอปของคุณทำอาจเป็นเรื่องยาก โปรดนำแอปและบัญชีที่ไม่จำเป็นออกหรือจำกัดการใช้งานเพื่อลดการรบกวน

ผลลัพธ์ PowerMetric
รูปที่ 5 ผลลัพธ์ของ PowerMetric