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

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