กำหนดคำอธิบายประกอบ พารามิเตอร์ความแม่นยำ และการตั้งค่า

เอกสารนี้จะอธิบายวิธีตั้งค่าคำอธิบายประกอบ พารามิเตอร์ความแม่นยำ และ การตั้งค่าในโปรเจ็กต์

คำอธิบายประกอบและพารามิเตอร์ความแม่นยำ

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

คำอธิบายประกอบที่เป็นไปได้และพารามิเตอร์ความแม่นยำสำหรับเกมของคุณจะกำหนดใน ไฟล์ชื่อ dev_tuningfork.proto ซึ่งอยู่ใน assets/tuningfork ของโปรเจ็กต์ของคุณ ต่อไปนี้คือตัวอย่างจากแอปเดโม

syntax = "proto3";

package com.google.tuningfork;

enum InstrumentKey {
  CPU = 0;
  GPU = 1;
  SWAPPY_WAIT = 2;
  SWAPPY_SWAP = 3;
  CHOREOGRAPHER = 4;
}

enum Level {
  // 0 is not a valid value
  LEVEL_INVALID = 0;
  LEVEL_1 = 1;
  LEVEL_2 = 2;
  LEVEL_3 = 3;
};

message Annotation {
  Level level = 1;
}

message FidelityParams {
  int32 num_spheres = 1;
  float tesselation_percent = 2;
}

ข้อควรทราบ

  • แพ็กเกจต้องเป็น com.google.tuningfork
  • ชื่อข้อความต้องตรงกับ Annotation และ FidelityParams
  • คุณสามารถใช้เฉพาะ enums ที่กำหนดไว้ในไฟล์นี้เป็นส่วนหนึ่งของคำอธิบายประกอบ
  • คุณใช้ enums, int32s หรือ floats ได้ในช่อง FidelityParams เท่านั้น
  • เครื่องมือตรวจสอบ จะบังคับใช้สนธิสัญญาเหล่านี้

การตั้งค่า

ข้อความ Settings กำหนดโดย tuningfork.proto ดูตัวอย่างแบบเต็มใน ไฟล์ต่อไปนี้:

gamesdk/samples/tuningfork/insightsdemo/app/src/main/assets/tuningfork/tuningfork_settings.txt

คุณต้องกำหนดการตั้งค่าสำหรับเกมของคุณในไฟล์ที่ชื่อว่า tuningfork_settings.txt อยู่ในไดเรกทอรี assets/tuningfork ของ คุณต้องระบุเฉพาะฟิลด์ต่อไปนี้

  • aggregation_strategy: ข้อความที่มีข้อมูลต่อไปนี้

    • method: TIME_BASED เพื่ออัปโหลดทุกๆ n มิลลิวินาทีหรือ TICK_BASED เพื่ออัปโหลดทุก n จุด
    • intervalms_or_count: n สำหรับช่อง method
    • max_instrumentation_keys: จำนวนคีย์การวัดที่จะใช้ ตั้งค่า เป็น 4 หากใช้ไลบรารี Android Frame Pacing
    • annotation_enum_size: ช่องที่ไม่บังคับเนื่องจากมีการคำนวณขนาด ตั้งแต่เริ่มต้น จากข้อบ่งชี้
  • api_key: คีย์ API โปรเจ็กต์ระบบคลาวด์ของแอป ใช้เพื่อตรวจสอบคำขอไปยัง ปลายทาง หากต้องการสร้างคีย์นี้ โปรดดู เปิดใช้ API ถ้า คุณเห็นข้อผิดพลาดในการเชื่อมต่อใน logcat โปรดตรวจสอบว่าคีย์ API ถูกต้อง

  • default_fidelity_parameters_filename: ชุดพารามิเตอร์ความแม่นยำที่ใช้ที่ การเริ่มต้น (ไม่บังคับหากคุณตั้งค่า training_fidelity_params ในโค้ดของคุณ)

  • level_annotation_index: (ไม่บังคับ) ดัชนีในช่องคำอธิบายประกอบของ หมายเลขระดับ

ตัวอย่างการนำเสนอข้อความมีดังนี้

aggregation_strategy: {method: TIME_BASED, intervalms_or_count: 10000,
  max_instrumentation_keys: 5, annotation_enum_size: [3,4]}
api_key: "API-KEY-FROM-GOOGLE-CLOUD-CONSOLE"
default_fidelity_parameters_filename: "dev_tuningfork_fidelityparams_3.bin"
level_annotation_index: 1

การตั้งค่าคำอธิบายประกอบ

คุณต้องตั้งค่าคำอธิบายประกอบด้วยตนเองระหว่างที่เล่นเกม คุณสามารถดู ตัวอย่างของสิ่งนี้ในแอปเดโมเมื่อเล่นไปเรื่อยๆ ในทุกระดับของเกม โดยอัตโนมัติ สำหรับข้อมูลเพิ่มเติม โปรดดูฟังก์ชัน SetAnnotations() ใน insightsdemo.cpp

ในกรณีนี้ คำอธิบายประกอบจะระบุเฉพาะหมายเลขระดับเท่านั้น

message Annotation {
  Level level = 1;
}

กำหนดระดับคุณภาพ

ใช้ระดับคุณภาพในการใส่คำอธิบายประกอบเซสชันเพื่อให้ระบุได้ว่าอุปกรณ์ ทำงานในระดับคุณภาพที่สูงเกินไป (ทำให้ประสิทธิภาพลดลง) หรือ ต่ำเกินไป (ทำให้ความแม่นยำลดลงโดยไม่จำเป็น)

คุณต้องกำหนดระดับคุณภาพอย่างน้อยหนึ่งระดับสำหรับ เกม ระดับคุณภาพจะสอดคล้องกับอินสแตนซ์ของ FidelityParams ระดับเหล่านี้ต้องระบุโดยเรียงตามลำดับที่เพิ่มขึ้นกับแอตทริบิวต์ รูปแบบชื่อไฟล์ต่อไปนี้:

dev_tuningfork_fidelityparams_i.txt

โดย i คือดัชนีที่เริ่มต้นที่ 1 โดยมีค่าสูงสุด จาก 15 รายการ ไฟล์เหล่านี้ต้องอยู่ในไดเรกทอรี assets/tuningfork ของ โปรเจ็กต์ตัวอย่างแสดงตัวอย่างของโครงสร้างนี้ใน gamesdk/samples/tuningfork/insightsdemo/app/src/main/assets/tuningfork/ ไดเรกทอรี

เกี่ยวกับบัฟเฟอร์โปรโตคอล

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

Proto2 เทียบกับ Proto3

เวอร์ชันของรูปแบบบัฟเฟอร์โปรโตคอลมีการตั้งค่าในบรรทัดแรกของไฟล์:

syntax="proto2";

Proto2 และ Proto3 คือบัฟเฟอร์โปรโตคอล 2 เวอร์ชันที่ใช้กันโดยทั่วไป ทั้งคู่ ใช้รูปแบบสายไฟเดียวกัน แต่ไฟล์คำจำกัดความใช้ร่วมกันไม่ได้ สัญลักษณ์ ความแตกต่างระหว่าง 2 เวอร์ชันมีดังนี้

  • ไม่อนุญาตให้ใช้คีย์เวิร์ด optional และ required ใน Proto3 อีกต่อไป
  • ทุกอย่างมีประสิทธิภาพ optional ใน Proโต3
  • โปรโตคอล 3 ไม่สนับสนุนส่วนขยาย

ใช้ Proto3 ในไฟล์ Proto เนื่องจากสามารถคอมไพล์เป็น C# ได้ ผลงาน Proto2 รวมถึงชุดฟีเจอร์ที่จำกัดซึ่งใช้ในไลบรารี Tuning Fork

ข้อความกับการแสดงแบบไบนารี

รูปแบบลวด Probuf แบบไบนารีนั้นกำหนดไว้เป็นอย่างดีและมีความเสถียรในตัวแปรต่างๆ เวอร์ชัน Protobuf (ไม่ใช่โค้ดที่สร้างขึ้น) นอกจากนี้ยังมีรูปแบบข้อความที่ ไลบรารี Protobuf เวอร์ชันเต็มสามารถสร้างและอ่านได้ รูปแบบนี้คือ ไม่ชัดเจน แต่มีความเสถียรสำหรับชุดฟีเจอร์ที่จำกัดใน คลัง Tuning Fork คุณแปลงระหว่างรูปแบบไบนารีและข้อความได้ โดยใช้คอมไพเลอร์ protoc คำสั่งต่อไปนี้จะแปลง protobuf ของข้อความเป็น เลขฐานสอง:

protoc --encode com.google.tuningfork.Settings tuningfork.proto < tuningfork_settings.txt > tuningfork_settings.bin

คุณต้องรวมไฟล์ไบนารีแทนไฟล์ข้อความใน APK เนื่องจาก ไลบรารี Protobuf ที่สมบูรณ์มีขนาดหลาย MB กำลังทำส้อมเสียง ก็ขึ้นอยู่กับว่าเกมจะเพิ่มขนาดเกมในจำนวนที่ใกล้เคียงกัน

เวอร์ชันเต็มเทียบกับ Lite เทียบกับ Nano

นอกจากไลบรารี Protobuf เต็มรูปแบบแล้ว ยังมีเวอร์ชัน Lite ที่ลดโค้ด รอยเท้าโดยนำฟีเจอร์บางอย่างออก เช่น การสะท้อน FileDescriptors และ การสตรีมไปยังและจากรูปแบบข้อความ เวอร์ชันนี้ยังคงต้องใช้ขนาดหลาย MB การใช้โค้ดเพิ่มเติมและไลบรารี Tuning Fork เป็นการภายในใช้ nanopb library ซอร์สโค้ด สำหรับไลบรารีนี้รวมอยู่ในโครงการโอเพนซอร์ส Android ใน external/nanopb-c และ เป็นส่วนหนึ่งของสาขา gamesdk ใช้ไลบรารีนี้ในเกมหากคุณมีขนาดโค้ด เป็นปัญหา

มีไฟล์ CMake ใน gamesdk/src/protobuf ที่ช่วยคุณผสานรวมได้ Protobuf ทั้ง 3 เวอร์ชัน กลุ่มตัวอย่างใช้ทั้ง nanopb และแบบเต็ม Protobuf