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