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

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

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

คำอธิบายประกอบให้ข้อมูลเชิงบริบทเกี่ยวกับสิ่งที่เกมกำลังทำเมื่อมีการบันทึก เครื่องหมาย พารามิเตอร์ความแม่นยำจะแสดงถึงประสิทธิภาพและการตั้งค่ากราฟิกของเกม คุณกำหนดสิ่งเหล่านี้ได้โดยใช้ Protocol Buffer ซึ่งเป็นรูปแบบการแลกเปลี่ยนข้อมูลที่มีโครงสร้างและเป็นกลางทางภาษาของ 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
    • annotation_enum_size: ฟิลด์ที่ไม่บังคับเนื่องจากระบบจะคำนวณขนาด เมื่อเริ่มต้นจากตัวอธิบาย
  • api_key: คีย์ API ของโปรเจ็กต์ Cloud ของแอปที่ใช้เพื่อตรวจสอบคำขอไปยัง ปลายทาง หากต้องการสร้างคีย์นี้ โปรดดูเปิดใช้ 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;
}

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

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

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

dev_tuningfork_fidelityparams_i.txt

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

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

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

Proto2 เทียบกับ proto3

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

syntax="proto2";

Proto2 และ proto3 เป็น Protocol Buffer 2 เวอร์ชันที่ใช้กันโดยทั่วไป ทั้งสอง ใช้รูปแบบการส่งข้อมูลเดียวกัน แต่ไฟล์คำจำกัดความไม่สามารถใช้งานร่วมกันได้ ความแตกต่างที่สำคัญระหว่าง 2 เวอร์ชันมีดังนี้

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

ใช้ proto3 ในไฟล์ proto เนื่องจากคอมไพล์เป็น C# ได้ Proto2 ทำงานได้ดี เช่นกันกับชุดฟีเจอร์แบบจำกัดที่ใช้ในไลบรารี Tuning Fork

การแทนข้อความเทียบกับการแทนแบบไบนารี

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

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

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

แบบเต็ม เทียบกับ Lite เทียบกับ Nano

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

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