ภาพรวมของ Android Performance Tuner (เนทีฟ)

หัวข้อนี้อธิบายวิธีผสานรวม 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 เข้ากับ เครื่องมือของคุณ และวิธีใช้ฟังก์ชันที่ไลบรารีมีให้ คลิกลิงก์ถัดไปด้านล่างเพื่อเริ่มต้นใช้งาน