تخمین زمان پردازش فریم (زمان فریم) توسط CPU و GPU برای درک عملکرد برنامه شما و یافتن گلوگاهها ضروری است. وقتی یک برنامه را با AGI پروفایل میکنید، System Profiler دادههای ردیابی را ارائه میدهد که میتوانید از آنها برای تخمین زمان فریم استفاده کنید.
زمان پردازنده
در AGI، میتوانید زمان کل و فعال فریمهای CPU را در مسیر CPU یک پروفایل سیستم مشاهده کنید.
کل زمان پردازنده
برای اندازهگیری کل زمان صرفشده توسط CPU، محدوده زمانی را انتخاب کنید که شامل زمان بین رویدادهای ارسال فریم متوالی باشد. رویدادهای ارسال فریم عبارتند از eglSwapBuffers (برای OpenGL) و vkQueuePresentKHR (برای Vulkan).

eglSwapBuffer . 
vkQueuePresentKHR . این اندازهگیری تخمینی از کل زمان CPU است، اما لزوماً زمان فعال CPU را نشان نمیدهد. برای مثال، در برنامههای وابسته به GPU، CPU ممکن است قبل از ارسال یک فریم جدید، منتظر بماند تا GPU کار خود را تکمیل کند. این اغلب زمانی اتفاق میافتد که یک رویداد dequeueBuffer ، eglSwapBuffer (برای OpenGL) یا vkQueuePresent (برای Vulkan) بخش بزرگی از زمان CPU را اشغال کند. زمان انتظار در کل زمان CPU لحاظ میشود، اما زمان فعال CPU لحاظ نمیشود.

dequeueBuffer و eglSwapBuffer بیکار میماند.زمان فعال پردازنده
زمان فعال پردازنده (Active CPU Time) مشخص میکند که چه زمانی پردازنده (CPU) کد برنامه را بدون قرار گرفتن در حالت بیکاری (idle) اجرا میکند.
برای اندازهگیری زمان فعال CPU، برشهای در حال اجرا را درست بالای رویدادهای CPU مشاهده کنید. تمام بخشهای ردیابی بین دو رویداد ارسال فریم که در حالت اجرا هستند را بشمارید. مطمئن شوید که نخهای کاری را نیز در نظر گرفتهاید.


راه دیگر برای اندازهگیری زمان فعال بودن پردازنده، مشاهده برشهای برنامه در مسیرهای پردازنده است. این برشها نشان میدهند که پردازنده در حال اجرا است و با برشهای در حال اجرا مطابقت دارند.

برای کمک به شناسایی برشهای برنامه، میتوانید نشانگرهای ATrace را به برنامه خود اضافه کنید. این کار نشانگرها را در مسیر CPU از System Profiler نمایش میدهد.

تخمین زمان فریم GPU
برای تخمین زمان فریمهای GPU، میتوانید از برشهای GPU یا شمارندههای GPU در System Profiler استفاده کنید. تخمین هنگام استفاده از برشهای GPU دقیقتر است.
برشهای پردازنده گرافیکی
اگر System Profiler اطلاعات برش GPU را در دسترس داشته باشد، میتوانید با اندازهگیری کل زمانی که برنامه شما صرف کار روی وظایفی میکند که با یک فریم واحد مرتبط هستند، اطلاعات زمانی فریم GPU بسیار دقیقی دریافت کنید.
دستگاههای مالی
در دستگاههای Mali، برشهای GPU دارای مسیرهای fragment ، non-fragment و گاهی اوقات تکمیلی non-fragment هستند. برای فریمهای سادهتر، کار fragment و non-fragment به صورت متوالی انجام میشود، بنابراین تشخیص کار یک فریم از فریم دیگر میتواند با جستجوی شکافها بین کار فعال GPU انجام شود.
به عنوان یک جایگزین، اگر با کاری که به GPU ارسال میشود آشنا هستید، شناسایی الگوی رندرهای ارسالی اطلاعاتی در مورد زمان شروع و پایان یک فریم ارائه میدهد.


برای برنامههایی که گردش کار GPU آنها به شدت موازی است، میتوانید با جستجوی تمام فریمهایی که در پنل Selection برای هر برش، submitID یکسانی دارند، زمان فریمهای GPU را بدست آورید.
برای برنامههای مبتنی بر Vulkan، میتوان از چندین ارسال برای تشکیل یک فریم استفاده کرد. با استفاده از مسیر رویدادهای Vulkan ، شناسههای ارسال را پیگیری کنید، که شامل یک برش برای هر ارسال است. انتخاب یک برش ارسال، تمام برشهای فعالیت GPU مربوط به ارسال را برجسته میکند.


دستگاههای آدرنو
در دستگاههای آدرنو، برشهای GPU در مسیر GPU Queue 0 ظاهر میشوند و همیشه به صورت متوالی نمایش داده میشوند، بنابراین میتوانید به تمام برشهایی که نشاندهندهی مراحل رندر برای یک فریم هستند نگاه کنید و از آنها برای اندازهگیری زمان فریم GPU استفاده کنید.


مشابه سناریوی Mali که قبلاً توضیح داده شد: اگر برنامه از Vulkan استفاده میکند، مسیر Vulkan Events اطلاعاتی در مورد کاری که برای اجرای فریم ارسال میشود، ارائه میدهد. برای برجسته کردن پاسهای رندر، روی برشهای Vulkan Events که با فریم مرتبط هستند کلیک کنید.

در برخی سناریوها، تشخیص مرزهای فریم GPU به دلیل وابستگی شدید برنامه به GPU، چالش برانگیزتر است. در این سناریوها، اگر با کاری که به GPU ارسال میشود آشنا باشید، میتوانید الگویی را که رندرها با آن اجرا میشوند شناسایی کرده و مرزهای فریم را از آن اطلاعات تعیین کنید.

شمارندههای پردازنده گرافیکی (GPU)
اگر اطلاعات برش GPU در یک ردیابی در دسترس نباشد، میتوانید زمان فریم GPU را با استفاده از مسیرهای شمارنده GPU تخمین بزنید.
دستگاههای مالی
در دستگاههای Mali، میتوانید از نمودار میزان استفاده از پردازنده گرافیکی (GPU) برای تخمین زمان فریم پردازنده گرافیکی (GPU) برای برنامهای که از پردازنده گرافیکی (GPU) استفاده نمیکند، استفاده کنید. وقتی برنامهها کمتر از پردازنده گرافیکی (GPU) استفاده میکنند، به جای فعالیت مداوم بالا، دورههای منظمی از فعالیت زیاد و کم پردازنده گرافیکی (GPU) دارند. برای تخمین زمان فریم پردازنده گرافیکی با استفاده از نمودار میزان استفاده از پردازنده گرافیکی (GPU) ، مدت زمان دورههای فعالیت زیاد را در نمودار اندازهگیری کنید.

اگر برنامه بیشتر به پردازنده گرافیکی (GPU) وابسته باشد، میزان استفاده از پردازنده گرافیکی (GPU) میتواند به طور مداوم بسیار بالا باشد. در این حالت، میتوانید از نمودارهای استفاده از صف قطعهای (fragment queue) و استفاده از صف غیر قطعهای (non-fragment queue ) برای نظارت بر فعالیت پردازنده گرافیکی (GPU) و تخمین زمان فریم پردازنده گرافیکی (GPU frame time) استفاده کنید. با جستجوی الگوها در نمودارهای قطعهای و غیر قطعهای ، میتوانید تخمین تقریبی از محل مرزهای یک فریم به دست آورید و از آن برای اندازهگیری زمان فریم پردازنده گرافیکی (GPU frame time) استفاده کنید.

دستگاههای آدرنو
در دستگاههای آدرنو، اگر برنامه به شدت به پردازنده گرافیکی (GPU) وابسته نباشد، میتوانید زمان فریم پردازنده گرافیکی را به همان روشی که در بخش قبل برای دستگاههای مجهز به پردازنده مالی (Mali) انجام دادید، تخمین بزنید.

اگر برنامه بیشتر به پردازنده گرافیکی (GPU) وابسته است و درصد استفاده از پردازنده گرافیکی (GPU) آن به طور مداوم بالا است، میتوانید از مسیرهای Vertex Instructions / Second و Fragment Instructions / Second برای تخمین زمان فریم پردازنده گرافیکی (GPU) استفاده کنید. با جستجوی الگوهایی در سطوح فعالیت این مسیرها، میتوانید تخمین تقریبی از محل مرزهای یک فریم به دست آورید و از آن برای اندازهگیری زمان فریم پردازنده گرافیکی (GPU) استفاده کنید.

این آهنگهای دیگر ممکن است اطلاعات مشابهی ارائه دهند:
- رئوس سایهدار / ثانیه
- قطعات سایهدار / ثانیه
- درصد زمان سایه زدن رئوس
- قطعات سایه زنی زمان٪