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

เมตริกคือข้อมูลประเภทหลักที่ดึงมาจากการเปรียบเทียบ ระบบจะส่งค่าเหล่านี้ไปยังฟังก์ชัน 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 หากมีการกําหนดเมตริกหลายรายการ ระบบจะรวมเมตริกทั้งหมดไว้ในเอาต์พุต

ผลลัพธ์ของ TraceSectionMetric และ FrameTimingMetric
รูปที่ 1 ผลการค้นหาของ TraceSectionMetric และ FrameTimingMetric

StartupTimingMetric

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

  • timeToInitialDisplayMs: ระยะเวลานับจากเวลาที่ระบบได้รับ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 ผลลัพธ์