คู่มือนี้อธิบายกระบวนการวิเคราะห์และเพิ่มประสิทธิภาพเกม ในอุปกรณ์ Android เพื่อให้ผู้ใช้ได้รับประสบการณ์ที่ราบรื่น โดยจะครอบคลุมการระบุคอขวดด้านประสิทธิภาพ การแยกแยะปัญหาระหว่าง CPU และ GPU และการยืนยันผลลัพธ์การเพิ่มประสิทธิภาพ
ไม่ว่าเกมจะสนุกหรือน่าสนใจเพียงใด แต่หากทำงานบนอุปกรณ์เคลื่อนที่ได้ไม่ดี ผู้เล่นก็จะไม่สนุกและเกมก็จะไม่ประสบความสำเร็จ แม้แต่เกมสนุกๆ ก็อาจมีปัญหา เช่น เฟรมต่อวินาที (FPS) ต่ำหรืออุปกรณ์ร้อนเกินไป ปัญหาเหล่านี้ทำให้ผู้เล่นไม่พอใจ ดังนั้น การปรับปรุงประสิทธิภาพของเกมจึงเป็นสิ่งสำคัญและคุณต้องเข้าใจวิธีเพิ่มประสิทธิภาพ
กระบวนการเพิ่มประสิทธิภาพเกี่ยวข้องกับขั้นตอนต่อไปนี้
การวัดประสิทธิภาพโดยรวมของเกม วัดปริมาณประสิทธิภาพที่ลดลงในแต่ละฉากเพื่อระบุความผิดปกติ
ตรวจสอบว่า CPU และ GPU ทำงานได้ตามขีดจำกัดหรือไม่ ระบุสาเหตุเบื้องหลัง ไม่ว่าจะเป็น CPU หรือ GPU
เครื่องมือ: Unreal Insight, Unity Profiler, Perfetto และ เครื่องมือวัดประสิทธิภาพ
การเพิ่มประสิทธิภาพ CPU แก้ไขจุดคอขวดด้านประสิทธิภาพที่ระบุ
เครื่องมือ: Unreal Insight, Unity Profiler, Perfetto และ Simpleperf
การเพิ่มประสิทธิภาพ GPU แก้ไขจุดคอขวดด้านประสิทธิภาพที่ระบุ
เครื่องมือ: RenderDoc, Arm Mobile Studio, AGI, เครื่องมือเฉพาะของผู้ให้บริการ
การทดสอบ A/B ทำการทดสอบ A/B เพื่อตรวจสอบประสิทธิภาพของการเพิ่มประสิทธิภาพที่ใช้ อย่างเข้มงวด
เครื่องมือ: Unreal Insight, Unity Profiler, Perfetto และ เครื่องมือวัดประสิทธิภาพ, การล็อกความถี่ของ CPU หรือ GPU และ RenderDoc
กระบวนการแบบวนซ้ำนี้ (1-5) จะดำเนินต่อไปจนกว่าจะบรรลุ FPS และพารามิเตอร์ความร้อน เป้าหมายได้สำเร็จ
สิ่งที่ต้องมีก่อน
มีบิลด์เกมที่พร้อมสำหรับการทดสอบในอุปกรณ์ที่ใช้ Android
ติดตั้งเครื่องมือต่อไปนี้
วิเคราะห์ประสิทธิภาพของเกมอย่างครอบคลุม
คุณต้องตรวจสอบประสิทธิภาพโดยรวมของเกมและระบุการเสื่อมถอยหรือความผิดปกติของประสิทธิภาพตามฉาก ก่อนเพิ่มประสิทธิภาพเกม ให้ตรวจสอบ ประสิทธิภาพปัจจุบัน เนื่องจากเกมมี UI และฉากจำนวนมาก ให้วิเคราะห์ฉากที่มีการใช้งาน CPU หรือ GPU สูง หรือเลย์เอาต์ที่ทำงานอย่างไม่คาดคิด เพื่อตรวจสอบประสิทธิภาพที่ลดลงและการใช้งาน CPU หรือ GPU ต่อฉาก
- วัดการลดประสิทธิภาพ: ใช้เครื่องมือวัดประสิทธิภาพเพื่อ วัดประสิทธิภาพโดยรวมของเกม วัดประสิทธิภาพในแต่ละฉาก เพื่อระบุพื้นที่ที่เฉพาะเจาะจงซึ่งมีประสิทธิภาพลดลงหรือมีความผิดปกติ
- ระบุฉากที่มีปัญหา: วิเคราะห์ข้อมูลเพื่อค้นหาฉากที่มีการใช้งาน CPU หรือ GPU สูง หรือฉากที่เลย์เอาต์หน้าจอไม่ให้ ประสิทธิภาพตามที่คาดไว้
- รวบรวมข้อมูลการติดตาม: ใช้เครื่องมือติดตามเพื่อรวบรวมข้อมูลประสิทธิภาพโดยละเอียด สำหรับฉากที่มีปัญหาที่ระบุ
ระบุคอขวดของ CPU หรือ GPU
หากเกมไม่เป็นไปตามเป้าหมาย FPS ให้พิจารณาว่าเกมนั้นขึ้นอยู่กับ CPU หรือ GPU การวิเคราะห์ลักษณะการทำงานของ CPU และ GPU เป็นสิ่งสำคัญในการค้นหาโอกาสในการเพิ่มประสิทธิภาพ แม้ว่าอุปกรณ์จะร้อนหรือใช้พลังงานมากเกินไประหว่างการเล่นเกมก็ตาม คุณสามารถใช้วิธีต่างๆ เพื่อดูว่าระบบมีข้อจำกัดด้าน CPU หรือ GPU
วิเคราะห์ข้อมูลการติดตาม: ใช้เครื่องมือที่ต้องการเพื่อวิเคราะห์ข้อมูลการติดตาม
- Unreal Insight (Unreal Engine): วิเคราะห์การติดตามเพื่อดูเวลาสำหรับ
GameThread,RenderThreadและRHIThread- หาก
GameThreadหรือRenderThreadเกินขีดจำกัดเวลาเฟรม (เช่น 33.3 มิลลิวินาทีสำหรับ 30 FPS) แสดงว่าเกมขึ้นอยู่กับ CPU - หาก
RHIThreadมีการดำเนินการเป็นเวลานานหรือคิดเป็น เวลาที่ใช้ในการแสดงผลเฟรมส่วนใหญ่ แสดงว่าเกมขึ้นอยู่กับ GPU
- หาก
รูปที่ 2 การติดตามข้อมูลเชิงลึกของ Unreal ด้วย GameThread, RenderThread และ RHIThread (คลิกเพื่อขยาย) - Profiler ของ Unity (Unity): หากเธรดหลักใช้เวลานานมาก
ในเครื่องหมายอย่าง
Gfx.WaitForPresentOnGfxThreadขณะที่เธรดการแสดงผล แสดงGfx.PresentFrameหรือ<GraphicsAPIName>.WaitForLastPresentแสดงว่า เกมขึ้นอยู่กับ GPU
รูปที่ 3 ตัวอย่างที่ขึ้นอยู่กับ GPU สำหรับ Unity Profiler (คลิกเพื่อขยาย) - Perfetto: วิเคราะห์การกำหนดค่าหลักของ CPU และรายละเอียดการดำเนินการของเธรด การวิเคราะห์นี้ช่วยให้ระบุคอขวดด้านประสิทธิภาพได้ ผ่านการตรวจสอบข้อมูลการดำเนินการของเธรดอย่างละเอียด
ค่าใช้จ่ายของ CPU: การติดตามระบุว่าภาระงานใน
GameThreadและRenderThreadร่วมกับ VSync เป็น สาเหตุของความล่าช้าในQueuePresentของ RHI Thread ซึ่ง แสดงให้เห็นถึงสถานการณ์ที่ CPU ทำงานหนัก
รูปที่ 4 การติดตาม Perfetto พร้อมรายละเอียดการดำเนินการของ CPU (คลิกเพื่อขยาย) ค่าใช้จ่ายของ GPU: หากเวลาที่ GPU ใช้ในการประมวลผลจนเสร็จเกินขีดจำกัดเวลาที่ใช้ในการแสดงผลเฟรม เช่น 25 มิลลิวินาที แสดงว่าเกมขึ้นอยู่กับ GPU การติดตามระบุว่า การทำงานของ GPU ใช้เวลานานกว่า 25 มิลลิวินาที ซึ่งแสดงถึงสถานการณ์ที่ GPU เป็นตัวจำกัด
รูปที่ 5 การติดตาม Perfetto ที่มีรายละเอียดค่าใช้จ่ายของ GPU (คลิกเพื่อขยาย)
- Unreal Insight (Unreal Engine): วิเคราะห์การติดตามเพื่อดูเวลาสำหรับ
ใช้คำสั่ง stat ของ Unreal Engine:
stat unit: เปรียบเทียบเวลาที่จัดสรรให้กับเธรดเกม วาด และ RHI หากเวลาของเกมและเวลาในการวาดต่ำ แต่เวลา RHI เกิน ขีดจำกัดเวลาเฟรมอย่างต่อเนื่อง แสดงว่าเกมขึ้นอยู่กับ GPU ตัวอย่างเช่น หาก FPS ที่จำเป็นคือ 30 (เทียบเท่ากับ 33.33 มิลลิวินาทีต่อเฟรม) และทั้งเธรดเกมและเธรดวาดภาพยังคงอยู่ในช่วง 10-15 มิลลิวินาทีอย่างต่อเนื่อง แต่ RHI เกิน 30 มิลลิวินาทีอย่างต่อเนื่อง แสดงว่ามีแนวโน้มสูงที่จะเป็นสถานการณ์ที่ GPU เป็นตัวจำกัด
รูปที่ 6 หน่วยสถิติช่วยในการประมาณเงื่อนไขที่ขึ้นอยู่กับ GPU stat VulkanRHI: ตรวจสอบระยะเวลาการส่งคิวและระยะเวลาการนำเสนอคิว
รูปที่ 7 Stat VulkanRHI ช่วยในการประมาณ สภาวะที่ GPU ทำงานหนัก (คลิกเพื่อขยาย) stat slow: ตรวจสอบเวลาที่จัดสรรให้กับเธรดเกม, เธรดการแสดงผล และเธรด RHI เพื่อระบุอุปสรรค
ตรวจสอบเมตริกประสิทธิภาพ: ใช้ผลลัพธ์จากการวิเคราะห์ประสิทธิภาพเกมอย่างละเอียด ใน Android ให้ทำดังนี้
- ขึ้นอยู่กับ CPU: การใช้งาน CPU (ปรับให้เป็นมาตรฐาน) มากกว่า 15% โดยมีการใช้งาน GPU ต่ำและ FPS ต่ำ
- ขึ้นอยู่กับ GPU: การใช้งาน GPU มากกว่า 90%
โดยปกติแล้ว หาก FPS และการใช้งาน GPU ต่ำในขณะที่การใช้งาน CPU เกิน 15% สถานการณ์ดังกล่าวถือว่า CPU ทำงานหนัก
รูปที่ 8 เมตริกประสิทธิภาพที่มีการใช้งาน CPU และ GPU
เพิ่มประสิทธิภาพ CPU
หากการวิเคราะห์ระบุว่าเกมขึ้นอยู่กับ CPU ให้ตรวจสอบเพิ่มเติมเพื่อระบุ เธรดหรือ API ที่เฉพาะเจาะจงซึ่งทำให้เกิดคอขวด
ดูคำแนะนำโดยละเอียดได้ที่เคล็ดลับการเพิ่มประสิทธิภาพ CPU และ GPU สำหรับ Android
เพิ่มประสิทธิภาพ GPU
หากการวิเคราะห์ระบุว่าเกมขึ้นอยู่กับ GPU ให้ตรวจสอบเพิ่มเติมโดยใช้เครื่องมือแก้ไขข้อบกพร่องของเฟรมเพื่อวิเคราะห์ไปป์ไลน์การแสดงผลและการเรียกวาด
ดูคำแนะนำโดยละเอียดได้ที่เคล็ดลับการเพิ่มประสิทธิภาพ CPU และ GPU สำหรับ Android
ยืนยันประสิทธิภาพการเพิ่มประสิทธิภาพ
- ทำการทดสอบ A/B: สร้างบิลด์ที่มีการเพิ่มประสิทธิภาพที่ใช้งาน
- วัดประสิทธิภาพ: ใช้เครื่องมือและวิธีการเดียวกันจากการวิเคราะห์เริ่มต้น เพื่อวัดประสิทธิภาพของบิลด์ที่เพิ่มประสิทธิภาพแล้ว
- เปรียบเทียบผลลัพธ์: เปรียบเทียบข้อมูลประสิทธิภาพใหม่กับข้อมูลเริ่มต้น เพื่อยืนยันว่าปัญหาคอขวดที่ระบุได้รับการแก้ไขแล้ว และเป็นไปตามเป้าหมาย FPS และเป้าหมายด้านความร้อน
- ทำซ้ำ: ทำซ้ำขั้นตอนการวิเคราะห์และการเพิ่มประสิทธิภาพจนกว่าจะ ได้ประสิทธิภาพตามที่ต้องการ