Hero Benchmark คือชุดการเปรียบเทียบที่ครอบคลุมเส้นทางของผู้ใช้แอปในระดับสูง เช่น การเริ่มต้นแอปหรือการเลื่อนในแอป Pokedex แบบโอเพนซอร์ส
- การเปรียบเทียบฮีโร่เมื่อเริ่มต้นระบบ: ติดตามเวลาตั้งแต่เปิดแอปจนถึงเวลาที่เนื้อหาแสดง
- Scroll hero benchmarks: การวัดประสิทธิภาพการเลื่อนของ Lazy Grid ที่มีรูปภาพ
การตั้งค่าการทดสอบ
- การเลือกแอป: เราทำการทดสอบเหล่านี้โดยใช้แอป Pokedex แบบโอเพนซอร์ส โดยเปรียบเทียบเวอร์ชันที่อิงตามมุมมองกับเวอร์ชันที่อิงตาม Compose แอปนี้ได้รับเลือกให้เป็นตัวแทนของสถานการณ์ในชีวิตจริง และไม่ได้พัฒนาโดยทีม Compose
- การตั้งค่าฮาร์ดแวร์: การเปรียบเทียบทำงานบน Pixel 6 ที่ใช้ Android 17 (ระดับ API 37) พร้อม CPU และ GPU ที่ล็อกไว้ ก่อน Compose 1.12 การเปรียบเทียบจะดำเนินการใน Pixel 3a ตั้งแต่ Compose 1.12 เป็นต้นไป Pixel 6 จะใช้เป็นเกณฑ์พื้นฐานด้านประสิทธิภาพมาตรฐานสำหรับการเปรียบเทียบหลัก และ Compose 1.11 ก็ได้รับการวัดใน Pixel 6 เพื่อเปรียบเทียบด้วย
- การตั้งค่าบิลด์: การเปรียบเทียบใช้แอปที่สร้างในโหมดรุ่นที่มีการเปิดใช้ R8 แอปได้รับการคอมไพล์ล่วงหน้าอย่างสมบูรณ์เพื่อลดความไม่เสถียรจากการคอมไพล์ JIT
- การเลือกผลลัพธ์: เพื่อให้มั่นใจว่าการวิเคราะห์กรณีที่แย่ที่สุด ค่าผิดปกติสุดโต่งและสัญญาณรบกวนที่ไม่เป็นตัวแทนจะถูกยกเว้นจากผลลัพธ์การเปรียบเทียบ จากนั้นจึงสร้างเกณฑ์พื้นฐานโดยเลือกค่ามัธยฐานของข้อมูลประสิทธิภาพขอบเขตบน
เกณฑ์เปรียบเทียบฮีโร่ของสตาร์ทอัพ
เราใช้ PokedexStartupBenchmark เพื่อวัดการเริ่มต้นระบบ PokedexStartupBenchmark จะวัดเวลาที่ใช้เพื่อให้ผู้ใช้เห็นแอป Pokedex
การเปิดแอปอาจเกิดขึ้นในสถานะใดสถานะหนึ่งจาก 3 สถานะ ได้แก่ Cold Start, Warm Start หรือ Hot Start แต่ละสถานะจะส่งผลต่อระยะเวลาที่แอปจะแสดงต่อผู้ใช้ ใน Cold Start แอปจะเริ่มใหม่ตั้งแต่ต้น ในการเปรียบเทียบนี้ เราจะวัดประสิทธิภาพการเปิดแอปในสถานะ Cold Start เราขอแนะนำให้คุณเพิ่มประสิทธิภาพแอปโดยอิงตามสมมติฐานของ Cold Start เสมอ การดำเนินการนี้ยังช่วยปรับปรุงประสิทธิภาพของ Warm Start และ Hot Start ได้ด้วย
เมตริกที่เราใช้ในการวัดเวลาเริ่มต้นของแอปคือเวลาที่ใช้ในการแสดงผลครั้งแรกและเวลาที่ใช้ในการแสดงผลทั้งหมด
เวลาที่ใช้ในการแสดงผลครั้งแรก
เวลาที่ใช้ในการแสดงผลครั้งแรก (TTID) จะวัดระยะเวลาที่แอปใช้ในการสร้างเฟรมแรก ซึ่งรวมถึงการเริ่มต้นกระบวนการระหว่างการเริ่มระบบใหม่ทั้งหมด การสร้างกิจกรรมระหว่างการเริ่มระบบใหม่ทั้งหมดหรือการเริ่มระบบใหม่บางส่วน และการแสดงเฟรมแรก
ใน PokedexStartupBenchmark, Compose 1.13 แสดงผลครั้งแรกใน 147.65 มิลลิวินาทีเมื่อเริ่มต้นแบบ Cold Start ผลลัพธ์นี้อยู่ในช่วงความผันผวนปกติของการรันแต่ละครั้งของ Compose 1.12.1 (145.51 มิลลิวินาที) และ Compose 1.11.4 (147.78 มิลลิวินาที) และเร็วกว่า Views (152.87 มิลลิวินาที) 3.4%
| เวอร์ชัน | เวลาที่ใช้ในการแสดงผลครั้งแรก (มิลลิวินาที) |
|---|---|
| Compose 1.11 | 147.78 |
| Compose 1.12 | 145.51 |
| Compose 1.13 | 147.65 |
| ยอดดู | 152.87 |
เวลาที่ใช้ในการแสดงผลเต็มรูปแบบ
เวลาในการแสดงผลเต็มรูปแบบ (TTFD) จะวัดระยะเวลาจนกว่าแอปจะโต้ตอบได้ ซึ่งหมายความว่าระบบได้โหลดและแสดงข้อมูลทั้งหมดแล้ว ดูข้อมูลเพิ่มเติมเกี่ยวกับเวลาที่ใช้ในการแสดงผลเต็มรูปแบบได้ที่เวลาเริ่มต้นของแอป
ใน PokedexStartupBenchmark, Compose 1.13 แสดงผลเต็มรูปแบบใน 202.79 มิลลิวินาทีเมื่อเริ่มระบบแบบ Cold Start ผลลัพธ์นี้อยู่ในช่วงความผันผวนปกติของการรันแต่ละครั้งของ Compose 1.12.1 (201.96 มิลลิวินาที) และ Compose 1.11.4 (203.33 มิลลิวินาที) Views ใช้เวลา 180.32 มิลลิวินาทีในการแสดงผลเต็มรูปแบบ ดังนั้น Compose 1.13 จึงช้ากว่า Views 12.5% สำหรับ TTFD
| เวอร์ชัน | เวลาที่ใช้ในการแสดงผลเต็มรูปแบบ (มิลลิวินาที) |
|---|---|
| Compose 1.11 | 203.33 |
| Compose 1.12 | 201.96 |
| Compose 1.13 | 202.79 |
| ยอดดู | 180.32 |
เลื่อนดูการเปรียบเทียบฮีโร่
เราใช้ PokedexScrollBenchmark เพื่อวัดประสิทธิภาพการเลื่อน โดยจะวัดประสิทธิภาพการเลื่อนของหน้าจอแอป Pokedex สำหรับ Lazy Grid ที่มีรูปภาพ ในการเปรียบเทียบนี้ ระบบจะเลื่อนและเหวี่ยงทั้งหน้าจอหลายครั้งและโหลดรายการใหม่ ประสิทธิภาพการเลื่อนวัดจากอัตราการกระตุก
อัตราความกระตุก
อุปกรณ์ Android จะแสดงผลที่ความเร็วสูงสุด 60 หรือ 120 เฟรมต่อวินาที (FPS) ซึ่งหมายความว่าระบบมีกำหนดเวลาที่เข้มงวด (เช่น 16.6 มิลลิวินาทีสำหรับ 60 FPS) ในการสร้างเฟรม หากแอปใช้เวลานานเกินไปในการทำงาน อาจทำให้เกิดการกระตุกที่มองเห็นได้ ซึ่งเราเรียกว่า Jank
ใน PokedexScrollBenchmark, Compose มีประสิทธิภาพเทียบเท่ากับ View โดยมีเปอร์เซ็นต์พอยต์ของอาการกระตุกส่วนเกินเป็น 0 ตั้งแต่ Compose 1.9.0 ใน Pixel 6 ทั้ง Views และ Compose มีอาการกระตุก 0.00% ใน Compose 1.11.4, 1.12.1 และ 1.13
| เวอร์ชัน Compose | อุปกรณ์ | ความล่าช้าที่มากเกินไปเทียบกับยอดดู (pp) |
|---|---|---|
| 1.3.3 | Pixel 3a | +0.35 |
| 1.4.3 | Pixel 3a | +0.41 |
| 1.5.4 | Pixel 3a | +0.42 |
| 1.6.8 | Pixel 3a | +0.21 |
| 1.7.8 | Pixel 3a | +0.36 |
| 1.8.0 | Pixel 3a | +0.38 |
| 1.9.0 | Pixel 3a | 0 |
| 1.10.0 | Pixel 3a | 0 |
| 1.11 | Pixel 6 | 0 |
| 1.12 | Pixel 6 | 0 |
| 1.13 | Pixel 6 | 0 |
เรียกใช้การเปรียบเทียบฮีโร่
วิธีตรวจสอบผลลัพธ์ด้านประสิทธิภาพและเรียกใช้การเปรียบเทียบในเครื่อง
- ทำตามคู่มือ AndroidX เพื่อดูซอร์สโค้ด
- ทำตามวิธีการในไฟล์ README ของซอร์สโค้ด Hero Benchmarks เพื่อสร้าง APK ของการเปรียบเทียบและ APK เป้าหมาย (
pokedex-macrobenchmarkและpokedex-macrobenchmark-target) ติดตั้ง APK เหล่านั้นในอุปกรณ์ทดสอบ และเรียกใช้ชุดPokedexStartupBenchmarkและPokedexScrollBenchmarkโดยใช้adbหรือ Android Studio
คุณสามารถเรียกใช้การเปรียบเทียบเหล่านี้ในอุปกรณ์ที่รองรับ เช่น อุปกรณ์ที่เฉพาะเจาะจงซึ่งคุณกำลังเพิ่มประสิทธิภาพแอปให้รองรับ อย่างไรก็ตาม หากต้องการตรวจสอบผลลัพธ์อย่างเป็นทางการ ให้ใช้การตั้งค่าฮาร์ดแวร์เดียวกัน