एनोटेशन, फ़िडेलिटी पैरामीटर, और सेटिंग तय करें

इस दस्तावेज़ में, आपके प्रोजेक्ट में एनोटेशन, फ़िडेलिटी पैरामीटर, और सेटिंग सेट करने का तरीका बताया गया है.

एनोटेशन और फ़िडेलिटी के पैरामीटर

एनोटेशन से, इस बारे में ज़रूरी जानकारी मिलती है कि टिक रिकॉर्ड होने के दौरान, आपके गेम में क्या चल रहा है. फ़िडेलिटी पैरामीटर से, आपके गेम की परफ़ॉर्मेंस और ग्राफ़िकल सेटिंग के बारे में पता चलता है. इन्हें प्रोटोकॉल बफ़र का इस्तेमाल करके तय किया जाता है. प्रोटोकॉल बफ़र, 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 का इस्तेमाल किया जा सकता है.
  • FidelityParams फ़ील्ड में सिर्फ़ enums, int32s या floats का इस्तेमाल किया जा सकता है.
  • पुष्टि करने वाला टूल इन नियमों का पालन करता है.

सेटिंग

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: method फ़ील्ड के लिए n.
    • max_instrumentation_keys: इस्तेमाल की जाने वाली इंस्ट्रुमेंटेशन कुंजियों की संख्या. Android Frame Pacing लाइब्रेरी का इस्तेमाल करने पर, इसे 4 पर सेट करें.
    • annotation_enum_size: यह एक ज़रूरी नहीं है, क्योंकि साइज़ की गिनती स्टार्टअप के समय डिस्क्रिप्टर से की जाती है.
  • api_key: यह आपके ऐप्लिकेशन के Cloud प्रोजेक्ट का एपीआई पासकोड है. इसका इस्तेमाल, एंडपॉइंट पर किए गए अनुरोधों की पुष्टि करने के लिए किया जाता है. इस कुंजी को जनरेट करने के लिए, एपीआई चालू करें लेख पढ़ें. अगर आपको logcat में कनेक्शन से जुड़ी गड़बड़ियां दिखती हैं, तो पक्का करें कि एपीआई पासकोड सही हो.

  • 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

एनोटेशन सेट करना

आपको गेम के दौरान एनोटेशन मैन्युअल तरीके से सेट करने होंगे. इसका उदाहरण डेमो ऐप्लिकेशन में देखा जा सकता है. इसमें गेम के सभी लेवल अपने-आप बदलते रहते हैं. ज़्यादा जानकारी के लिए, insightsdemo.cpp में SetAnnotations() फ़ंक्शन देखें.

इस मामले में, ऐनोटेशन में सिर्फ़ लेवल नंबर दिया गया है.

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/ डायरेक्ट्री में दिखाया गया है.

प्रोटोकॉल बफ़र के बारे में जानकारी

ट्यूनिंग फ़ोर्क लाइब्रेरी, सेटिंग, एनोटेशन, और फ़िडेलिटी पैरामीटर के लिए Google के प्रोटोकॉल बफ़र फ़ॉर्मैट का इस्तेमाल करती है. यह एक्सटेंसिबल और स्ट्रक्चर्ड डेटा के लिए, कई भाषाओं में उपलब्ध प्रोटोकॉल है. ज़्यादा जानकारी के लिए, प्रोटोकॉल बफ़र का दस्तावेज़ देखें.

Proto2 बनाम proto3

प्रोटोकॉल बफ़र फ़ॉर्मैट का वर्शन, फ़ाइल की पहली लाइन में सेट किया जाता है:

syntax="proto2";

Proto2 और proto3, प्रोटोकॉल बफ़र के दो ऐसे वर्शन हैं जिनका इस्तेमाल आम तौर पर किया जाता है. ये दोनों एक ही वायर फ़ॉर्मैट का इस्तेमाल करते हैं, लेकिन परिभाषा वाली फ़ाइलें एक-दूसरे के साथ काम नहीं करती हैं. दोनों वर्शन के बीच मुख्य अंतर यहां दिए गए हैं:

  • proto3 में, optional और required कीवर्ड का इस्तेमाल अब नहीं किया जा सकता.
  • proto3 में, हर चीज़ को optional माना जाता है.
  • proto3 में एक्सटेंशन काम नहीं करते.

अपनी प्रोटो फ़ाइलों में proto3 का इस्तेमाल करें, क्योंकि इन्हें C# में कंपाइल किया जा सकता है. Proto2, Tuning Fork लाइब्रेरी में इस्तेमाल की जाने वाली सुविधाओं के सीमित सेट के साथ भी काम करता है.

टेक्स्ट बनाम बाइनरी फ़ॉर्मैट

बाइनरी प्रोटोबफ़ वायर-फ़ॉर्मैट को अच्छी तरह से परिभाषित किया गया है. साथ ही, यह अलग-अलग प्रोटोबफ़ वर्शन में स्थिर रहता है. हालांकि, जनरेट किया गया कोड ऐसा नहीं होता. इसके अलावा, एक टेक्स्ट फ़ॉर्मैट भी होता है. इसे protobuf लाइब्रेरी का पूरा वर्शन जनरेट और पढ़ सकता है. यह फ़ॉर्मैट उतना सटीक नहीं है. हालांकि, यह Tuning Fork लाइब्रेरी में मौजूद चुनिंदा सुविधाओं के लिए स्थिर है. protoc कंपाइलर का इस्तेमाल करके, बाइनरी और टेक्स्ट फ़ॉर्मैट के बीच कन्वर्ज़न किया जा सकता है. नीचे दी गई कमांड, टेक्स्ट प्रोटॉबफ़ को बाइनरी में बदलती है:

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

आपको अपने APK में टेक्स्ट फ़ाइलों के बजाय बाइनरी फ़ाइलें शामिल करनी होंगी, क्योंकि पूरी प्रोटॉबफ़ लाइब्रेरी का साइज़ कई एमबी का होता है. इसलिए, Tuning Fork लाइब्रेरी को इस पर निर्भर बनाने से, आपके गेम का साइज़ भी उतना ही बढ़ जाएगा.

Premium, Lite, और Nano के बीच अंतर

पूरी प्रोटोबफ़ लाइब्रेरी के साथ-साथ, इसका लाइट वर्शन भी उपलब्ध है. इसमें कुछ सुविधाएं हटा दी गई हैं, जैसे कि रिफ़्लेक्शन, FileDescriptors, और टेक्स्ट फ़ॉर्मैट में डेटा स्ट्रीम करना. इससे कोड का फ़ुटप्रिंट कम हो जाता है. इस वर्शन के लिए अब भी कई एमबी के अतिरिक्त कोड फ़ुटप्रिंट की ज़रूरत होती है. इसलिए, Tuning Fork लाइब्रेरी अंदरूनी तौर पर nanopb लाइब्रेरी का इस्तेमाल करती है. इस लाइब्रेरी का सोर्स कोड, external/nanopb-c में Android Open Source Project में शामिल है. यह gamesdk ब्रांच का हिस्सा है. अगर कोड का साइज़ एक समस्या है, तो अपने गेम में इस लाइब्रेरी का इस्तेमाल करें.

gamesdk/src/protobuf में CMake फ़ाइलें मौजूद हैं. इनकी मदद से, Protobuf के तीनों वर्शन को इंटिग्रेट किया जा सकता है. नमूनों में, nanopb और full protobuf, दोनों का इस्तेमाल किया गया है.