این مبحث نحوه ادغام Android Performance Tuner، همچنین به عنوان کتابخانه Tuning Fork، برای ضبط و آپلود دادههای زمان فریم از موتورهای بازی بومی (C و C++) را توضیح میدهد.
برای موتور بازی Unity، راهنمای Unity را ببینید.
پس زمینه
یکی از اجزای کلیدی تجربه بازی، رندر کردن عملکرد است. عملکرد رندر نتیجه دو ورودی زیر است:
- نرخ فریم: هر چند وقت یکبار یک فریم ترسیم می شود.
- تنظیمات کیفیت گرافیکی: سطح وفاداری که در آن یک فریم ارائه می شود، از جمله وفاداری شبیه سازی و همچنین گرافیک.
برای بازی ها، عملکرد رندر خوب به صورت زیر تعریف می شود:
- ارائه نرخ فریم ثابت و ثابت (یعنی درصد رندر فریم ها در فرکانس مورد نظر).
- رندر کردن فریم ها در بالاترین فرکانس ممکن با حفظ ثبات، معمولاً 30 یا 60 فریم در ثانیه بسته به نوع بازی.
- به حداکثر رساندن سطح جزئیات برای یک کاربر با توجه به اندازه و تراکم صفحه نمایش آنها در حالی که همچنان به نرخ فریم مطلوب و پایدار دست می یابد.
کتابخانه Android Frame Pacing بسیاری از تغییرات در زمانهای فریم را محدود میکند و نرخ فریم ثابتی را برای بازیها فراهم میکند. تغییرات باقی مانده در زمان فریم به دلیل سطح جزئیات نمایش داده شده در صحنه های خاص در گیم پلی و قابلیت های گرافیکی دستگاه است. با استفاده از Android Performance Tuner، میتوانید زمانهایی را که زمان فریم کمتر یا سریعتر از هدف شما است، در طول بازی مشخص کنید و این مسائل و فرصتها را به موارد زیر مرتبط کنید:
- تنظیمات کیفیت خاص
- صحنه های خاص در بازی شما
- مدل های خاص دستگاه یا مشخصات دستگاه
داده ها را ضبط و بارگذاری کنید
کتابخانه Tuning Fork متکی است که یکی از عملکردهای تیک آن هر فریم توسط کتابخانه Android Frame Pacing نامیده می شود. در داخل کتابخانه، این اطلاعات تیک در هیستوگرامهایی جمع میشود که سپس به صورت دورهای از طریق یک نقطه پایانی HTTP در Google Play آپلود میشوند. هر تیک به عنوان مرتبط با یک کلید ابزار و یک حاشیه نویسی ثبت می شود، تعاریفی که شما در یک فایل بافر پروتکل برای آنها مشخص می کنید.
کلیدهای ابزار
یک کلید ابزار نشان می دهد که تیک از کجا می آید و یک عدد صحیح است که باید به هر فراخوانی تابع تیک ارسال شود. کتابخانه Android Frame Pacing از مجموعه ای از کلیدهای ابزار از پیش تعریف شده استفاده می کند که در swappy_common.h
تعریف شده است. اگر از کتابخانه Frame Pacing استفاده نمی کنید، می توانید کلیدهای ابزار خود را نیز تعریف کنید.
حاشیه نویسی ها
حاشیه نویسی اطلاعات متنی در مورد آنچه که بازی شما در هنگام ثبت تیک انجام می دهد، می دهد. به عنوان مثال، یک حاشیه نویسی می تواند هر یک از موارد زیر را مشخص کند:
- سطح بازی فعلی
- یک "رئیس بزرگ" روی صفحه است
- سایر اطلاعات مربوط به وضعیت بازی
حاشیه نویسی ها توسط پیام بافر پروتکل com.google.tuningfork.Annotation
تعریف می شوند. برای تنظیم حاشیه نویسی فعلی، یک سریال سازی از پیامی که تعریف کرده اید را به TuningFork_setCurrentAnnotation()
ارسال می کنید. سپس تمام داده های تیک بعدی با این حاشیه نویسی مرتبط می شوند تا زمانی که حاشیه نویسی دیگری تنظیم شود. در زیر نمونه ای از تعریف اولیه برای حاشیه نویسی آمده است:
import "tuningfork.proto"
enum Level {
INVALID_LEVEL = 0;
Level_1 = 1;
Level_2 = 2;
Level_3 = 3;
}
message Annotation {
optional Level level = 1;
}
پارامترهای وفاداری
پارامترهای وفاداری بر عملکرد و وفاداری گرافیکی بازی شما تأثیر میگذارند، مانند سطح جزئیات مش، وضوح بافت، و روش ضدآلیاسینگ. مانند حاشیه نویسی، پارامترهای وفاداری با استفاده از پیام بافر پروتکل com.google.tuningfork.FidelityParams
تعریف می شوند. در زیر نمونه ای از تعریف اولیه برای پارامترهای وفاداری است:
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 یادداشتها و پارامترهای وفاداری را که شما تعریف میکنید درک کند، فایل بافر پروتکل حاوی این تعاریف باید همراه با تنظیمات اولیهسازی در داخل APK بازی قرار گیرد. همچنین باید مقادیر پیشفرض را برای ترکیبهای پارامترهای وفاداری رایج در APK خود ارائه دهید تا دادههای شما توسط آنها در رابط کاربری Google Play تقسیمبندی شوند. برای اطلاعات بیشتر، به تعریف سطوح کیفیت مراجعه کنید.
سربار حافظه و CPU
تمام حافظه مورد استفاده توسط کتابخانه Tuning Fork در زمان اولیه به منظور جلوگیری از غافلگیری در طول بازی اختصاص داده می شود. اندازه داده ها به تعداد کلیدهای ابزار، تعداد حاشیه نویسی های ممکن و تعداد سطل ها در هر هیستوگرام بستگی دارد. مضربی از تمام این بارها چهار بایت برای هر سطل است. همچنین دو نسخه از تمام هیستوگرام ها وجود دارد تا امکان ارسال به صورت دو بافری فراهم شود.
ارسال در یک موضوع جداگانه انجام می شود و تماس های تیک را مسدود نمی کند. اگر اتصال آپلود در دسترس نباشد، ارسال برای آپلود بعدی در صف قرار می گیرد.
برای فراخوانی یک تابع تیک، هزینه پردازش کمی وجود دارد: به سادگی یک شاخص را در آرایه سطل های هیستوگرام محاسبه می کند و یک عدد صحیح را افزایش می دهد.
کتابخانه Tuning Fork را یکپارچه کنید
این راهنمای ادغام به دو بخش تقسیم می شود. بخش اول نحوه اجرای یک تست سرتاسری را با استفاده از یک برنامه آزمایشی و کنسول Google Play توضیح میدهد. بخش دوم نحوه ادغام کتابخانه Tuning Fork را در زنجیره ابزار خود و نحوه استفاده از توابع ارائه شده توسط کتابخانه را توضیح می دهد. برای شروع روی لینک بعدی زیر کلیک کنید.