หัวข้อนี้อธิบายวิธีผสานรวม Android Performance Tuner หรือที่เรียกว่าไลบรารี Tuning Fork เพื่อบันทึกและอัปโหลดข้อมูลเวลาเฟรมจากเอนจินเกมแบบเนทีฟ (C และ C++)
สำหรับเอนจินเกม Unity โปรดดูคู่มือสำหรับ Unity
ฉากหลัง
องค์ประกอบสำคัญของประสบการณ์การเล่นเกมคือประสิทธิภาพการแสดงผล ประสิทธิภาพการแสดงผล เป็นผลลัพธ์ของข้อมูลเข้า 2 รายการต่อไปนี้
- อัตราเฟรม: ความถี่ในการวาดเฟรม
- การตั้งค่าคุณภาพกราฟิก: ระดับความแม่นยำที่แสดงเฟรม รวมถึงความแม่นยำในการจำลองและกราฟิก
สำหรับเกม ประสิทธิภาพการแสดงผลที่ดีจะกำหนดดังนี้
- แสดงอัตราเฟรมที่สม่ำเสมอและคงที่ (นั่นคือ เปอร์เซ็นต์ของ เฟรมที่แสดงผลด้วยความถี่ที่ต้องการ)
- การแสดงผลเฟรมที่ความถี่สูงสุดเท่าที่จะทำได้ในขณะที่ยังคง ความเสถียร โดยปกติคือ 30 หรือ 60 FPS ขึ้นอยู่กับประเภทของเกม
- เพิ่มระดับรายละเอียดสำหรับผู้ใช้ให้ได้มากที่สุดตามขนาดหน้าจอและความหนาแน่น ในขณะที่ยังคงรักษาอัตราเฟรมที่ต้องการและเสถียรไว้ได้
ไลบรารีการเว้นระยะเฟรมของ Android จะจำกัดความผันแปรส่วนใหญ่ของเวลาเฟรม เพื่อให้อัตราเฟรมของเกมมีความเสถียร ความแปรปรวนที่เหลือของเวลาเฟรมเกิดจากระดับรายละเอียดที่แสดงในฉากบางฉากระหว่างการเล่นเกมและความสามารถด้านกราฟิกของอุปกรณ์ การใช้ Android Performance Tuner จะช่วยให้คุณระบุเวลาในระหว่างการเล่นเกมที่เวลาที่ใช้ในการแสดงผลเฟรมช้าหรือเร็วกว่าเป้าหมาย และเชื่อมโยงปัญหาและโอกาสเหล่านี้กับสิ่งต่อไปนี้
- การตั้งค่าคุณภาพที่เฉพาะเจาะจง
- ฉากที่เฉพาะเจาะจงในเกม
- รุ่นอุปกรณ์หรือข้อมูลจำเพาะของอุปกรณ์ที่เฉพาะเจาะจง
บันทึกและอัปโหลดข้อมูล
ไลบรารี Tuning Fork อาศัยฟังก์ชัน Tick รายการใดรายการหนึ่ง ที่ไลบรารีการเว้นวรรคเฟรมของ Android เรียกใช้ในแต่ละเฟรม ภายในไลบรารี ข้อมูลเครื่องหมายนี้จะได้รับการรวบรวมเป็นฮิสโทแกรม จากนั้นจะมีการอัปโหลดไปยัง Google Play เป็นระยะๆ ผ่านปลายทาง HTTP ระบบจะบันทึกแต่ละเครื่องหมายว่า เชื่อมโยงกับคีย์เครื่องดนตรีและคำอธิบายประกอบ ซึ่งคุณจะระบุคำจำกัดความในไฟล์ Protocol Buffer
คีย์ระบุตำแหน่งของ Tick
คีย์เครื่องมือจะระบุตำแหน่งในเฟรมที่เครื่องหมายมาจากและเป็น
จำนวนเต็มที่ต้องส่งไปยังการเรียกฟังก์ชันเครื่องหมายแต่ละรายการ ไลบรารี Android Frame Pacing
ใช้ชุดคีย์เครื่องมือที่กำหนดไว้ล่วงหน้า ซึ่งกำหนดไว้ใน swappy_common.h
นอกจากนี้ คุณยังกำหนดคีย์เครื่องมือของคุณเองได้หากไม่ได้ใช้ไลบรารี Frame Pacing
คำอธิบายประกอบ
คำอธิบายประกอบให้ข้อมูลเชิงบริบทเกี่ยวกับสิ่งที่เกมกำลังทำเมื่อมีการบันทึก เครื่องหมาย ตัวอย่างเช่น คำอธิบายประกอบอาจระบุสิ่งต่อไปนี้
- ระดับเกมปัจจุบัน
- "บอสใหญ่" อยู่บนหน้าจอ
- ข้อมูลสถานะเกมอื่นๆ ที่เกี่ยวข้อง
คำอธิบายประกอบจะกำหนดโดยข้อความบัฟเฟอร์com.google.tuningfork.Annotation
โปรโตคอล
หากต้องการตั้งค่าคำอธิบายประกอบปัจจุบัน ให้ส่งการซีเรียลไลซ์ของ
ข้อความที่คุณกำหนดไปยัง
TuningFork_setCurrentAnnotation()
จากนั้นระบบจะเชื่อมโยงข้อมูลเครื่องหมายทั้งหมดที่ตามมากับคำอธิบายประกอบนี้จนกว่าจะมีการตั้งค่าคำอธิบายประกอบอื่น
ต่อไปนี้เป็นตัวอย่างคำจำกัดความของ Proto สำหรับคำอธิบายประกอบ
import "tuningfork.proto"
enum Level {
INVALID_LEVEL = 0;
Level_1 = 1;
Level_2 = 2;
Level_3 = 3;
}
message Annotation {
optional Level level = 1;
}
พารามิเตอร์ความแม่นยำ
พารามิเตอร์ความแม่นยำมีผลต่อประสิทธิภาพและคุณภาพกราฟิกของเกม เช่น ระดับรายละเอียดของ Mesh, ความละเอียดของพื้นผิว และวิธีลบรอยหยัก พารามิเตอร์ความแม่นยำจะกำหนดโดยใช้ข้อความบัฟเฟอร์โปรโตคอล com.google.tuningfork.FidelityParams
เช่นเดียวกับคำอธิบายประกอบ ต่อไปนี้คือ
ตัวอย่างคำจำกัดความของ Proto สำหรับพารามิเตอร์ความแม่นยำ
import "tuningfork.proto"
message FidelityParams {
int32 texture_quality_level = 1;
int32 shadow_resolution = 2;
float terrain_details_percent = 3;
int32 post_processing_effects_level = 4;
}
เมื่อเริ่มต้น Tuning Fork คุณจะส่งการซีเรียลไลซ์ของ พารามิเตอร์ที่เกมใช้ คุณสามารถเปลี่ยนพารามิเตอร์เหล่านี้ได้ เช่น หากผู้ใช้เปลี่ยนการตั้งค่าการแสดงผลเกม และข้อมูลที่อัปโหลดในภายหลัง เชื่อมโยงกับพารามิเตอร์ใหม่
เพื่อให้ Google Play เข้าใจพารามิเตอร์คำอธิบายประกอบและความเที่ยงตรง ที่คุณกำหนด ไฟล์ Protocol Buffer ที่มีการกำหนดเหล่านี้จะต้อง รวมอยู่ใน APK ของเกมพร้อมกับการตั้งค่าการเริ่มต้น นอกจากนี้ คุณยังต้องระบุค่าเริ่มต้นสำหรับชุดค่าผสมพารามิเตอร์ความแม่นยำทั่วไปใน APK เพื่อให้ระบบจัดกลุ่มข้อมูลตามพารามิเตอร์เหล่านั้นใน UI ของ Google Play ดูข้อมูลเพิ่มเติมได้ที่ กำหนดระดับคุณภาพ
ค่าใช้จ่ายเพิ่มเติมของหน่วยความจำและ CPU
ระบบจะจัดสรรหน่วยความจำทั้งหมดที่ไลบรารี Tuning Fork ใช้เมื่อ เริ่มต้น เพื่อหลีกเลี่ยงปัญหาที่ไม่คาดคิดระหว่างการเล่นเกม ขนาดของข้อมูล ขึ้นอยู่กับจำนวนคีย์เครื่องมือ จำนวนคำอธิบายประกอบที่เป็นไปได้ และ จำนวนที่เก็บข้อมูลในฮิสโทแกรมแต่ละรายการ โดยจะเป็นผลคูณของค่าทั้งหมดนี้คูณด้วย 4 ไบต์สำหรับที่เก็บข้อมูลแต่ละรายการ นอกจากนี้ ยังมีสำเนาฮิสโทแกรมทั้งหมด 2 ชุดเพื่อให้ส่งได้ในลักษณะบัฟเฟอร์คู่
การส่งจะเกิดขึ้นในเธรดแยกต่างหากและจะไม่บล็อกการเรียกฟังก์ชัน Tick หากไม่มี การเชื่อมต่อเพื่ออัปโหลด ระบบจะจัดคิวการส่งเพื่ออัปโหลดในภายหลัง
การเรียกใช้ฟังก์ชันเครื่องหมายมีค่าใช้จ่ายในการประมวลผลเพียงเล็กน้อย โดยจะ คำนวณดัชนีในอาร์เรย์ของที่เก็บข้อมูลฮิสโทแกรมและเพิ่มจำนวน จำนวนเต็ม
ผสานรวมไลบรารี Tuning Fork
คู่มือการผสานรวมนี้แบ่งออกเป็น 2 ส่วน ส่วนแรกอธิบายวิธี เรียกใช้การทดสอบแบบครบวงจรโดยใช้แอปเดโมและ Google Play Console ส่วนที่ 2 อธิบายวิธีผสานรวมไลบรารี Tuning Fork เข้ากับ เครื่องมือของคุณ และวิธีใช้ฟังก์ชันที่ไลบรารีมีให้ คลิกลิงก์ถัดไปด้านล่างเพื่อเริ่มต้นใช้งาน