เซสชันที่ช้า (เกมเท่านั้น)

เซสชันที่ช้าเป็นเมตริกใหม่ของ Android Vitals ใน Google Play Console ช้า คือเซสชันที่มีเฟรมมากกว่า 25% ที่ช้า กรอบรูป จะช้าหากไม่ได้นำเสนอน้อยกว่า 50 มิลลิวินาทีหลังจากเฟรมก่อนหน้า (เทียบเท่ากับ 20 FPS) Android Vitals รายงานเซสชันที่ช้าเป็นครั้งที่ 2 ด้วย ที่มีเป้าหมายเท่ากับ 34 มิลลิวินาที (เทียบเท่ากับ 30FPS) เมื่อใช้เซสชันที่ช้า สามารถทำความเข้าใจประสิทธิภาพอัตราเฟรมของเกมได้ ซึ่งจะส่งผลต่อวิธี เล่นได้อย่างราบรื่นและลื่นไหลไม่มีสะดุด

Play จะเริ่มพาผู้ใช้ออกจากเกมที่ไม่สามารถเล่นได้ทันเวลา ได้ 20 FPS ในโทรศัพท์ โปรดทราบว่า Android Vitals จะเริ่มตรวจสอบเท่านั้น อัตราเฟรมหลังจากที่เกมทำงานไปแล้ว 1 นาที

โปรดไปที่ศูนย์ช่วยเหลือเพื่อดูรายละเอียดเพิ่มเติม เกี่ยวกับเมตริก

วันที่ กราฟิกคล้ายแผนภูมิวงกลมซึ่งแสดงจำนวนเฟรมที่ช้าและเฟรมที่ไม่ช้า
รูปที่ 1 เซสชันที่ช้าใน Android Vitals

วิธีวัด FPS และตรวจจับเฟรมที่ช้า

คำสั่ง dumpsys surfaceflinger timestats ของ Android มี FPS เฉลี่ย และ นำเสนอถึงปัจจุบัน การจับเวลาฮิสโตแกรมสำหรับทุกเลเยอร์ที่ ที่แสดงผล เวลานำเสนอถึงปัจจุบันของเฟรมคือช่วงเวลาระหว่าง เฟรมปัจจุบันและเฟรมก่อนหน้าที่วาด นี่คือ โดยทำตามขั้นตอนต่อไปนี้เพื่อใช้คำสั่งเพื่อรวบรวม FPS ของเกม

  1. เรียกใช้คำสั่งที่มีแฟล็ก enable และ clear เพื่อเริ่มบันทึก ข้อมูล:

    adb shell dumpsys SurfaceFlinger --timestats -clear -enable
    
  2. เมื่อเกมเล่นนานพอแล้ว ให้เรียกใช้คำสั่งอีกครั้งด้วย ตั้งค่าสถานะ dump เพื่อถ่ายโอนข้อมูล:

    adb shell dumpsys SurfaceFlinger --timestats -dump
    

    ข้อมูลที่ถ่ายโอนจะมีเฟรมทั้งหมดและฮิสโตแกรมปัจจุบันสำหรับการนำเสนอ เลเยอร์ทั้งหมดที่แสดงผลโดย SurfaceFlinger คุณต้องค้นหา ส่วนของเกมโดยกรองตาม layerName ดังนี้

    layerName = SurfaceView[com.google.test/com.devrel.MainActivity]@0(BLAST)#132833
    

    อัตราเฟรมที่ช้าของเซสชันสามารถคำนวณได้โดยอาศัยข้อมูลของ แต่ละเลเยอร์

    เช่น เปอร์เซ็นต์เฟรมที่ช้า 20 FPS = (ผลรวมของค่าตั้งแต่ 54 มิลลิวินาทีถึง 1,000 มิลลิวินาที) / totalFrames x 100

    totalFrames = 274
    ...
    presentToPresent histogram is as below:
    0ms=0 1ms=0 2ms=0 3ms=0 4ms=0 5ms=0 6ms=0 7ms=0 8ms=0 9ms=0 10ms=0 11ms=0 12ms=0
    13ms=0 14ms=0 15ms=0 16ms=1 17ms=0 18ms=0 19ms=0 20ms=0 21ms=0 22ms=0 23ms=0
    24ms=0 25ms=0 26ms=0 27ms=0 28ms=0 29ms=0 30ms=0 31ms=0 32ms=0 33ms=269 34ms=0
    36ms=0 38ms=0 40ms=0 42ms=0 44ms=0 46ms=0 48ms=0 50ms=1 54ms=0 58ms=0 62ms=0
    66ms=0 70ms=1 74ms=0 78ms=0 82ms=0 86ms=0 90ms=0 94ms=0 98ms=0 102ms=0 106ms=0
    110ms=0 114ms=0 118ms=0 122ms=0 126ms=0 130ms=0 134ms=0 138ms=0 142ms=0 146ms=0
    150ms=0 200ms=0 250ms=0 300ms=0 350ms=0 400ms=0 450ms=0 500ms=0 550ms=0 600ms=0
    650ms=0 700ms=0 750ms=0 800ms=0 850ms=0 900ms=0 950ms=0 1000ms=0
    

    FPS เฉลี่ยของแต่ละเลเยอร์จะแสดงในดัมพ์ด้วย:

    ...
    averageFPS = 30.179
    ...
    
  3. หลังจากรวบรวมข้อมูลทั้งหมดแล้ว คุณควรปิดใช้งาน timestats โดยใช้แฟล็ก disable:

    adb shell dumpsys SurfaceFlinger --timestats -disable
    

สาเหตุและวิธีแก้ไขเฟรมที่ช้า

มีหลายสาเหตุที่เฟรมอาจแสดงขึ้นหรือแสดงผลบนหน้าจอนานขึ้น มากกว่าเป้าหมายของนักพัฒนาซอฟต์แวร์ เกมอาจมีผลผูกพันกับ CPU/GPU หรือ อุปกรณ์ร้อนเกินไปและเปิดใช้งานสถานะความร้อนที่มีการควบคุม หรือ อัตราเฟรมของเกมและการแสดงผลของอุปกรณ์ไม่ตรงกัน อัตราการรีเฟรช

ใช้การกำหนดอัตราการแสดงโฆษณาของ Android Frame (สลับ) Vulkan และ ADPF เป็น แก้ปัญหาเหล่านี้และปรับปรุงประสิทธิภาพของเกม

การสลับคืออะไร

ไลบรารี Android Frame Pacing หรือเรียกอีกอย่างว่า Swappy เป็นส่วนหนึ่งของ ไลบรารี AGDK การสลับช่วยให้เกม OpenGL และ Vulkan แสดงผลที่ลื่นไหลและการกำหนดอัตราเฟรมที่ถูกต้องใน Android

การกำหนดอัตราการแสดงโฆษณาเฟรมคือการซิงค์ลอจิกและลูปการแสดงผลของเกมกับ ระบบย่อยของจอแสดงผลระบบปฏิบัติการและฮาร์ดแวร์การแสดงผลที่ใช้ Android ระบบย่อยของจอแสดงผลออกแบบมาเพื่อหลีกเลี่ยงสิ่งแปลกปลอมทางภาพ (หรือที่เรียกว่าการฉีกขาด) อาจเกิดขึ้นได้เมื่อฮาร์ดแวร์แสดงผลเปลี่ยนไปเป็นเฟรมใหม่กลางคัน ผ่านการอัปเดต เพื่อหลีกเลี่ยงอาร์ติแฟกต์เหล่านี้ ระบบย่อยของจอแสดงผล ดังต่อไปนี้

  • บัฟเฟอร์ที่ผ่านเฟรมภายใน
  • ตรวจหาการส่งเฟรมล่าช้า
  • แสดงเฟรมที่ผ่านมาซ้ำเมื่อตรวจพบเฟรมที่ล่าช้า

วิธีใช้การสลับในโปรเจ็กต์เนทีฟ

ดูคำแนะนำต่อไปนี้เพื่อผสานรวมไลบรารี Android Frame Pacing ในเกมของคุณ:

วิธีใช้การสลับในเครื่องมือเกมของ Unity

Unity ได้ผสานรวม Android Frame Pacing ไว้ในเครื่องมือของตน เพื่อเปิดใช้ ฟีเจอร์ใน Unity 2019.2 หรือสูงกว่า ให้เลือกช่องทำเครื่องหมาย "ความเร็วในการจัดเฟรมที่เพิ่มประสิทธิภาพ" ในส่วนการตั้งค่าโปรเจ็กต์ > โปรแกรมเล่น > การตั้งค่าสำหรับ Android > ความละเอียดและการนำเสนอ

วันที่ กล่องโต้ตอบการตั้งค่าโปรเจ็กต์
รูปที่ 2 เปิดใช้ Frame Pacing ใน Unity Engine

อีกวิธีหนึ่งคือเปิดใช้ตัวเลือกการกำหนดระยะห่างของเฟรมที่เพิ่มประสิทธิภาพในโค้ดตรรกะแบบเป็นโปรแกรมเพื่อให้ Unity ทำงานได้อย่างเท่าเทียมกัน กระจายเฟรมเพื่อให้อัตราเฟรมแตกต่างไปจากเดิมน้อยลง ทำให้เกมเพลย์ราบรื่นขึ้น

วิธีใช้การสลับในเครื่องมือเกม Unreal

Unreal 4.25 ขึ้นไปผสานรวมไลบรารี Android Frame Pacing ซึ่งเป็นส่วนหนึ่งของ Android Game Development Kit บทความการกำหนดอัตราการแสดงโฆษณาในเฟรมสำหรับอุปกรณ์เคลื่อนที่จะอธิบายวิธีเปิดใช้ Android Frame Pacing Library และวิธีควบคุมการกำหนดอัตราเฟรมจากโค้ด C++

Vulkan คืออะไร

Vulkan คือ 3 มิติข้ามแพลตฟอร์มที่ทันสมัย API กราฟิกที่ออกแบบมาเพื่อลดการแอบสแตรกระหว่างฮาร์ดแวร์กราฟิกของอุปกรณ์ และเกมของคุณ Vulkan คือ API กราฟิกระดับต่ำหลักใน Android โดยแทนที่ OpenGL ES OpenGL ES ยังคงรองรับใน Android แต่จะไม่อยู่ในฟีเจอร์ที่ใช้งานอยู่อีกต่อไป ที่กำลังพัฒนา

Vulkan มีข้อได้เปรียบเหนือ OpenGL ES ดังต่อไปนี้

  • สถาปัตยกรรมที่มีประสิทธิภาพมากขึ้นพร้อมโอเวอร์เฮด CPU ในไดรเวอร์กราฟิกที่ลดลง
  • กลยุทธ์การเพิ่มประสิทธิภาพแบบใหม่เพื่อปรับปรุงการทำงานของ CPU
  • ฟีเจอร์กราฟิกใหม่ที่ไม่มีให้บริการใน OpenGL ES เช่น API แบบไม่มีการเชื่อมโยงและ Ray Tracing

วิธีใช้ Vulkan ในโปรเจ็กต์ Android แบบดั้งเดิม

การเริ่มต้นใช้งาน Vulkan บน Android Codelab จะแนะนำคุณตลอดขั้นตอนการตั้งค่า การแสดงผลไปป์ไลน์ Vulkan แล้วแสดงผลสามเหลี่ยมหมุนพื้นผิว บนหน้าจอ ใช้ Codelab เพื่อเรียนรู้วิธีแสดงผลกราฟิกในเกม

วิธีใช้ Vulkan ในเครื่องมือเกม Unity

หากต้องการเปิดใช้การเลือกอุปกรณ์อัตโนมัติใน Unity ให้ทำตามขั้นตอนเพื่อกำหนดค่า Auto Graphics API

วันที่ กล่องโต้ตอบการตั้งค่าโปรเจ็กต์
รูปที่ 3 เปิดใช้ Unity Auto Graphics API

คุณสามารถเปิดใช้ Vulkan ด้วยตนเองโดยปิดใช้ Auto Graphics API และวาง Vulkan ไว้ในลำดับความสำคัญสูงสุดในรายการ Graphics API หากคุณ ที่ใช้ Unity 2021.1 หรือเวอร์ชันก่อนหน้า นี่จึงเป็นวิธีเดียวในการใช้ Vulkan

วันที่ กล่องโต้ตอบการตั้งค่าโปรเจ็กต์
รูปที่ 4 เลือก Vulkan เป็น Graphics API หลักใน Unity ด้วยตนเอง

ใช้ปลั๊กอินเครื่องมือ Vkquality Unity เพื่อให้คำแนะนำเกี่ยวกับเวลาเปิดตัว API กราฟิกสำหรับให้เกมของคุณใช้งาน บนอุปกรณ์ที่เฉพาะเจาะจง

วิธีใช้ Vulkan ใน Unreal Game Engine

หากต้องการเปิดใช้ Vulkan Graphic API ให้ไปที่การตั้งค่าโปรเจ็กต์ > แพลตฟอร์ม > Android > สร้างและเลือก Support Vulkan เมื่อคุณเลือกทั้ง การสนับสนุน Vulkan และรองรับ OpenGL ES3.2 นั้น Unreal จะใช้ Vulkan โดยค่าเริ่มต้น หากอุปกรณ์ ไม่รองรับ Vulkan และ Unreal จะกลับไปใช้ OpenGL ES 3.2

วันที่ กล่องโต้ตอบการตั้งค่าโปรเจ็กต์
รูปที่ 5 เปิดใช้ Vulkan ใน Unreal Engine

หากคุณใช้ฟีเจอร์ Vulkan ที่เจาะจงซึ่งเป็นที่ทราบแล้วว่ามีลักษณะการทำงานที่ไม่เหมาะสม ในอุปกรณ์บางรุ่น คุณปรับแต่งไฟล์ BaseDeviceProfile.ini เพื่อยกเว้นได้ อุปกรณ์เหล่านั้น ดูการปรับแต่งโปรไฟล์อุปกรณ์และความสามารถในการปรับขนาด สำหรับ Android เพื่อดูวิธี ปรับแต่ง BaseDeviceProfile.ini เนื่องจากไดรเวอร์อุปกรณ์ใหม่อาจแก้ปัญหาก่อนหน้านี้ อุปกรณ์ที่ไม่รู้จัก โปรดอัปเดตไฟล์ BaseDeviceProfile.ini อยู่เสมอเพื่อรับ การเพิ่มประสิทธิภาพ

ADPF คืออะไร

เฟรมเวิร์กประสิทธิภาพแบบไดนามิกของ Android (ADPF) เพิ่มประสิทธิภาพเกมโดยอิงตามฟีเจอร์การจัดการความร้อน, CPU และ GPU แบบไดนามิก บน Android เรามุ่งเน้นที่เกม แต่คุณสามารถใช้ฟีเจอร์สำหรับ แอปที่เน้นประสิทธิภาพ

ADPF คือชุด API ที่ช่วยให้เกมและแอปที่เน้นประสิทธิภาพ โต้ตอบกับระบบพลังงานและความร้อนของอุปกรณ์ Android ได้โดยตรง ด้วย คุณสามารถตรวจสอบลักษณะการทำงานแบบไดนามิกในระบบ Android และ เพิ่มประสิทธิภาพเกมในระดับที่ยั่งยืนโดยไม่ทำให้อุปกรณ์ร้อนเกินไป

ฟีเจอร์หลักของ ADPF มีดังนี้

  • Thermal API: ตรวจสอบสถานะความร้อนของอุปกรณ์เพื่อให้แอปพลิเคชันปรับภาระงานในเชิงรุกได้ก่อนที่งานจะทำงานไม่ได้
  • API คำแนะนำประสิทธิภาพของ CPU: ให้คำแนะนำด้านประสิทธิภาพที่ช่วยให้ Android เลือกการตั้งค่าประสิทธิภาพที่เหมาะสม (เช่น จุดดำเนินการของ CPU หรือแกนหลัก) สำหรับภาระงาน
  • Game Mode API และ Game State API: เปิดใช้การเพิ่มประสิทธิภาพการเล่นเกมโดยให้ความสำคัญกับประสิทธิภาพหรืออายุการใช้งานแบตเตอรี่ โดยอิงจากการตั้งค่าของผู้ใช้และการกำหนดค่าเฉพาะเกม
  • โหมดประสิทธิภาพคงที่: เปิดใช้โหมดประสิทธิภาพคงที่ในอุปกรณ์ระหว่างการเปรียบเทียบ เพื่อดูการวัดที่ไม่เปลี่ยนแปลงตามนาฬิกาของ CPU แบบไดนามิก
  • โหมดประหยัดพลังงาน: บอกเซสชันว่าสามารถกำหนดเวลาชุดข้อความในเซสชันคำแนะนำประสิทธิภาพได้อย่างปลอดภัยเพื่อให้ให้ความสำคัญกับประสิทธิภาพในการใช้พลังงานมากกว่าประสิทธิภาพ พร้อมใช้งานใน Android 15 (API leve 35)

วิธีใช้ ADPF ในโปรเจ็กต์ Android ที่มาพร้อมเครื่อง

การผสานรวมฟีเจอร์ความสามารถในการปรับเข้ากับเกมที่มาพร้อมเครื่อง Codelab จะแนะนำให้คุณผสานรวมฟีเจอร์ ADPF เข้ากับ โดยใช้จำนวนก้าวที่ทำได้ด้วยตนเอง ในตอนท้ายของ Codelab คุณจะได้ผสานรวมคุณลักษณะต่อไปนี้

  • Thermal API: ฟังสภาพความร้อนของอุปกรณ์และตอบสนองก่อนที่อุปกรณ์จะเข้าสู่สถานะควบคุมความร้อน
  • API โหมดเกม: ทำความเข้าใจค่ากำหนดการเพิ่มประสิทธิภาพโปรแกรมเล่น (เพิ่มประสิทธิภาพสูงสุดหรือประหยัดแบตเตอรี่) และปรับเปลี่ยนตามความเหมาะสม
  • API สถานะของเกม: บอกให้ระบบทราบสถานะของเกม (กำลังโหลด, การเล่น, UI ฯลฯ) และระบบจะปรับทรัพยากรให้สอดคล้องกันได้ (บูสต์ I/O หรือ CPU, GPU ฯลฯ)
  • Performance Hint API: บอกให้ระบบทราบรูปแบบชุดข้อความและภาระงานเพื่อให้ระบบจัดสรรทรัพยากรตามความเหมาะสม

วิธีใช้ ADPF ในเครื่องมือเกม Unity

ประสิทธิภาพที่ปรับได้ของ Unity คือ เครื่องมือสำหรับนักพัฒนาเกมที่ต้องการ เพิ่มประสิทธิภาพเกมของตนบนอุปกรณ์เคลื่อนที่ โดยเฉพาะสำหรับระบบนิเวศที่หลากหลายของ Android ประสิทธิภาพแบบปรับอัตโนมัติจะเปิดใช้ เกมของคุณเพื่อปรับให้เข้ากับประสิทธิภาพการทำงานและลักษณะทางความร้อนของอุปกรณ์ แบบเรียลไทม์ เพื่อให้ประสบการณ์การเล่นเกมที่ราบรื่นและมีประสิทธิภาพ

ผู้ให้บริการ Android ที่มีการวัดประสิทธิภาพแบบปรับอัตโนมัติ จะแนะนำคุณตลอดขั้นตอนการใช้งาน ADPF ใน Unity

วันที่ กล่องโต้ตอบการตั้งค่าโปรเจ็กต์
รูปที่ 6 ผสานรวม ADPF ใน Unity Engine

วิธีใช้ ADPF ใน Unreal Game Engine

วันที่ กล่องโต้ตอบการตั้งค่าโปรเจ็กต์
รูปที่ 7 ผสานรวม ADPF ใน Unreal Engine
  1. ดาวน์โหลดปลั๊กอิน
  2. คัดลอกปลั๊กอินลงในโฟลเดอร์ปลั๊กอินของโปรเจ็กต์
  3. เปิดใช้ปลั๊กอิน Unreal Engine ของ ADPF ในตัวแก้ไข Unreal
  4. เปิดใช้เครื่องมือแก้ไข Unreal อีกครั้ง
  5. สร้างและปรุงเกม

ปลั๊กอินกรอบประสิทธิภาพแบบไดนามิกของ Android(ADPF) สำหรับ Unreal Engine จะมี ประสิทธิภาพที่เสถียรและป้องกันการควบคุมความร้อน ดาวน์โหลดปลั๊กอิน จาก GitHub ปลั๊กอินนี้เปลี่ยนฟีเจอร์ตามการตั้งค่า ค่าคอนโซลที่ไม่จริง