Android มีตัวเลือกสำหรับนักพัฒนาแอปในอุปกรณ์บางอย่างที่จะช่วยให้คุณเห็นภาพ ตำแหน่งที่แอปอาจพบปัญหาในการแสดงผล UI เช่น การทำงาน การแสดงผลมากกว่าที่จำเป็น หรือการดำเนินการกับเธรดและ GPU เป็นเวลานาน หน้านี้อธิบายวิธีแก้ไขข้อบกพร่องการแสดงพิกเซลซ้ำด้วย GPU และการแสดงผล GPU ตามโปรไฟล์
ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกสำหรับนักพัฒนาแอปในอุปกรณ์ รวมถึงวิธีเปิดใช้ได้ที่กำหนดค่าตัวเลือกสำหรับนักพัฒนาแอปในอุปกรณ์
ความเร็วในการแสดงผล GPU ตามโปรไฟล์
เครื่องมือการแสดงผล GPU ตามโปรไฟล์จะแสดงภาพ แทนระยะเวลาที่ใช้ในการ แสดงผลเฟรมของหน้าต่าง UI เมื่อเทียบกับเกณฑ์มาตรฐานที่ 16.67 มิลลิวินาทีต่อเฟรมเป็นฮิสโทแกรมแบบเลื่อน
ใน GPU ที่มีประสิทธิภาพน้อยกว่า อัตราการส่งโฆษณาที่ใช้ได้ (ความเร็วที่ GPU สามารถเติม เฟรมบัฟเฟอร์) อาจต่ำมาก เมื่อจำนวนพิกเซลที่ต้องใช้ในการวาดเฟรมเพิ่มขึ้น GPU อาจใช้เวลาในการประมวลผลคำสั่งใหม่นานขึ้น ซึ่งจะทำให้ส่วนอื่นๆ ของระบบต้องรอจนกว่า GPU จะประมวลผลได้ทัน
เครื่องมือสร้างโปรไฟล์ช่วยให้คุณระบุได้ว่าเมื่อใดที่ GPU ทำงานหนักเกินไปในการพยายามวาดพิกเซล หรือทำงานหนักเนื่องจากการแสดงพิกเซลซ้ำที่มากเกินไป
เปิดใช้โปรไฟล์
ก่อนเริ่มต้น ให้ตรวจสอบว่าคุณใช้อุปกรณ์ที่ใช้ Android 4.1 (ระดับ API 16) ขึ้นไป และเปิดใช้ตัวเลือกสำหรับนักพัฒนาแอป หากต้องการเริ่มการสร้างโปรไฟล์การแสดงผล GPU ของอุปกรณ์ ขณะใช้แอป ให้ทำดังนี้
- ไปที่การตั้งค่าในอุปกรณ์ แล้วแตะตัวเลือกสำหรับนักพัฒนาแอป
- ในส่วนการตรวจสอบ ให้เลือกการแสดงผล GPU ของโปรไฟล์หรือ การแสดงผล HWUI ตามโปรไฟล์ ทั้งนี้ขึ้นอยู่กับเวอร์ชันของ Android ที่ทำงานใน อุปกรณ์
- ในกล่องโต้ตอบการแสดงผล GPU ของโปรไฟล์ ให้เลือกบนหน้าจอเป็นแถบเพื่อ วางซ้อนกราฟบนหน้าจอของอุปกรณ์
- เปิดแอปที่ต้องการสร้างโปรไฟล์
ตรวจสอบเอาต์พุต
ในรูปภาพที่ขยายของกราฟการแสดงผล GPU ของโปรไฟล์ที่แสดงในรูปที่ 1 คุณจะเห็นส่วนที่มีสีตามที่แสดงใน Android 6.0 (ระดับ API 23)
รูปที่ 1 กราฟการแสดงผล GPU ของโปรไฟล์ที่ขยาย
ต่อไปนี้คือข้อควรทราบเกี่ยวกับเอาต์พุต
- เครื่องมือจะแสดงกราฟสำหรับแต่ละแอปพลิเคชันที่มองเห็นได้
- แถบแนวตั้งแต่ละแถบตามแกนนอนแสดงเฟรม และความสูงของแถบแนวตั้งแต่ละแถบแสดงระยะเวลาที่เฟรมใช้ในการแสดงผล (เป็นมิลลิวินาที)
- เส้นสีเขียวแนวนอนแสดงถึง 16.67 มิลลิวินาที หากต้องการให้ได้ 60 เฟรม ต่อวินาที แถบแนวตั้งของแต่ละเฟรมต้องอยู่ใต้เส้นนี้ เมื่อใดก็ตามที่แท่งเกินเส้นนี้ ภาพเคลื่อนไหวอาจหยุดชั่วคราว
- เครื่องมือจะไฮไลต์เฟรมที่เกินเกณฑ์ 16.67 มิลลิวินาทีโดย ทำให้แถบที่เกี่ยวข้องกว้างขึ้นและโปร่งใสน้อยลง
- แต่ละแท่งมีคอมโพเนนต์สีที่แมปกับขั้นตอนในไปป์ไลน์การแสดงผล จำนวนคอมโพเนนต์จะแตกต่างกันไปตามระดับ API ของอุปกรณ์
ตารางต่อไปนี้อธิบายแต่ละส่วนของแถบแนวตั้งในเอาต์พุตของโปรไฟล์เลอร์เมื่อใช้อุปกรณ์ที่ใช้ Android 6.0 ขึ้นไป
| ส่วนประกอบของบาร์ | ขั้นตอนการแสดงผล | คำอธิบาย |
|---|---|---|
| สลับบัฟเฟอร์ | แสดงเวลาที่ CPU รอให้ GPU ทำงานเสร็จ หาก แถบนี้สูงขึ้น แสดงว่าแอปทำงานบน GPU มากเกินไป | |
| ปัญหาเกี่ยวกับคำสั่ง | แสดงเวลาที่ตัวแสดงผล 2 มิติของ Android ใช้ในการออกคำสั่งไปยัง OpenGL เพื่อวาดและ วาดรายการที่แสดงซ้ำ ความสูงของแถบนี้แปรผันโดยตรงกับผลรวมของเวลาที่ใช้ในการดำเนินการแต่ละรายการแสดงผล ยิ่งมีรายการแสดงผลมาก แถบสีแดงก็จะยิ่งสูงขึ้น | |
| ซิงค์และอัปโหลด | แสดงเวลาที่ใช้ในการอัปโหลดข้อมูลบิตแมปลงใน GPU กลุ่มขนาดใหญ่ บ่งชี้ว่าแอปใช้เวลานานพอสมควรในการโหลดกราฟิกจำนวนมาก | |
| วาด |
แสดงเวลาที่ใช้ในการบันทึกคำสั่งวาด เช่น drawLine ในขั้นตอนการจัดองค์ประกอบ บางครั้งขั้นตอนนี้อาจรวมถึงการดำเนินการเกี่ยวกับมาตรการและเลย์เอาต์ หากแถบนี้สูง ให้บันทึกการติดตามระบบและตรวจสอบโดยใช้ Perfetto เพื่อดูรายละเอียด
|
|
| วัด / วาง | แสดงระยะเวลาที่ใช้ในการ จัดตำแหน่งและกำหนดขนาดของคอมโพเนนต์ UI ในเฟสเลย์เอาต์ ซึ่งรวมถึงการเรียกใช้ตัวแก้ไขการวัดและการจัดวาง กลุ่มขนาดใหญ่บ่งบอกถึงการคำนวณที่ซับซ้อนภายในตัวแก้ไขเหล่านี้ หรือโครงสร้างแผนผังที่ลึกเกินไปซึ่งต้องมีการคำนวณซ้ำบ่อยๆ | |
| การจัดการอินพุตและภาพเคลื่อนไหว |
แสดงระยะเวลาที่ใช้ในการประเมินการเรียก Animation API หรือจัดการอินพุตของตัวชี้และโค้ดเรียกกลับ หากส่วนนี้มีขนาดใหญ่ อาจบ่งชี้ว่าภาพเคลื่อนไหวที่กำหนดเองหรือการเรียกกลับของอินพุตใช้เวลาในการประมวลผลมากเกินไป การคำนวณสถานะและการแมปข้อมูลขณะเลื่อนผ่าน LazyColumn หรือ LazyRow
มักเกิดขึ้นในช่วงนี้เช่นกัน และเป็นสาเหตุที่พบบ่อยกว่า
ที่ทำให้เกิดการชะลอตัวในส่วนนี้
|
|
| เวลาอื่นๆ / ความล่าช้าของ VSync | แสดงเวลาที่แอปใช้ในการดำเนินการระหว่างเฟรม 2 เฟรมติดต่อกัน ซึ่งอาจเป็นตัวบ่งชี้ว่ามีการประมวลผลมากเกินไปในเทรด UI ซึ่ง อาจส่งไปยังเทรดอื่นได้ |
ตารางที่ 1 แถบส่วนประกอบใน Android 6.0 ขึ้นไป
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีตีความข้อมูลที่เครื่องมือสร้างโปรไฟล์ระบุได้ที่การวิเคราะห์ด้วยการแสดงผล GPU ของโปรไฟล์