Memperkirakan waktu pemrosesan frame CPU dan GPU (waktu frame) sangat penting untuk memahami performa aplikasi dan menemukan bottleneck. Saat Anda membuat profil aplikasi dengan AGI, System Profiler akan memberikan data rekaman aktivitas yang dapat Anda gunakan untuk memperkirakan waktu render frame.
Waktu CPU
Di AGI, Anda dapat melihat total dan waktu frame CPU aktif di jalur CPU dari profil sistem.
Total waktu CPU
Untuk mengukur total waktu CPU yang dihabiskan,
pilih rentang waktu
yang mencakup waktu antara peristiwa pengiriman frame berturut-turut. Peristiwa
pengiriman frame adalah eglSwapBuffers
(untuk OpenGL) dan vkQueuePresentKHR
(untuk Vulkan).

eglSwapBuffer
.
vkQueuePresentKHR
.Pengukuran ini adalah estimasi total waktu CPU,tetapi tidak selalu
mewakili waktu CPU aktif. Misalnya, dalam aplikasi yang terikat GPU, CPU
dapat menunggu GPU menyelesaikan tugasnya sebelum mengirimkan frame baru. Hal ini
sering terjadi saat peristiwa dequeueBuffer
, eglSwapBuffer
(untuk OpenGL), atau
vkQueuePresent
(untuk Vulkan) menghabiskan sebagian besar waktu CPU.
Waktu tunggu disertakan dalam total waktu CPU, tetapi tidak termasuk waktu CPU aktif.

dequeueBuffer
dan eglSwapBuffer
.
Waktu CPU aktif
Waktu CPU aktif menentukan kapan CPU menjalankan kode aplikasi tanpa berada dalam status tidak ada aktivitas.
Untuk mengukur waktu CPU aktif, lihat slice Running tepat di atas peristiwa CPU. Hitung semua bagian rekaman aktivitas antara dua peristiwa pengiriman frame yang berada dalam status Running. Pastikan Anda menyertakan thread yang berfungsi.


Cara lain untuk mengukur waktu CPU aktif adalah dengan melihat slice aplikasi di jalur CPU. Slice ini menunjukkan kapan CPU berjalan dan sesuai dengan slice Running.

Untuk membantu mengidentifikasi slice aplikasi, Anda dapat menambahkan penanda ATrace ke aplikasi. Tindakan ini akan menampilkan penanda di jalur CPU System Profiler.

Memperkirakan waktu render frame GPU
Untuk memperkirakan waktu frame GPU, Anda dapat menggunakan slice GPU atau penghitung GPU di System Profiler. Estimasi ini lebih akurat saat menggunakan slice GPU.
Slice GPU
Jika System Profiler memiliki informasi slice GPU yang tersedia, Anda bisa mendapatkan informasi waktu render frame GPU yang sangat akurat dengan mengukur jumlah total waktu yang dihabiskan aplikasi untuk mengerjakan tugas yang terkait dengan satu frame.
Perangkat Mali
Pada perangkat Mali, slice GPU memiliki jalur fragmen, non-fragmen, dan terkadang non-fragmen tambahan. Untuk frame yang tidak terlalu kompleks, pekerjaan fragmen dan non-fragmen bersifat berurutan, sehingga membedakan pekerjaan satu frame dari yang lain dapat dilakukan dengan mencari celah antara pekerjaan GPU aktif.
Sebagai alternatif, jika Anda sudah memahami pekerjaan yang dikirim ke GPU, mengidentifikasi pola render pass yang dikirim akan memberikan informasi tentang kapan frame dimulai dan berakhir.


Untuk aplikasi yang memiliki alur kerja GPU yang lebih paralel, Anda bisa mendapatkan waktu render frame GPU dengan mencari semua frame yang memiliki submissionID yang sama di panel Selection untuk setiap slice.
Untuk aplikasi berbasis Vulkan, beberapa pengiriman dapat digunakan untuk menyusun frame. Lacak ID pengiriman menggunakan jalur Peristiwa Vulkan, yang berisi slice untuk setiap pengiriman. Memilih slice pengiriman akan menandai semua slice aktivitas GPU yang sesuai dengan pengiriman.


Perangkat Adreno
Di perangkat Adreno, slice GPU muncul di jalur GPU Queue 0 dan selalu direpresentasikan secara berurutan, sehingga Anda dapat melihat semua slice yang mewakili pass render untuk frame dan menggunakannya untuk mengukur waktu frame GPU.


Serupa dengan skenario Mali yang dijelaskan sebelumnya: jika aplikasi menggunakan Vulkan, jalur Peristiwa Vulkan memberikan informasi tentang pekerjaan yang dikirim untuk menjalankan frame. Untuk menandai render pass, klik slice Peristiwa Vulkan yang terkait dengan frame.

Ada beberapa skenario saat batas frame GPU lebih sulit dibedakan karena aplikasi sangat terikat GPU. Dalam skenario ini, jika sudah memahami tugas yang dikirim ke GPU, Anda dapat mengidentifikasi pola yang digunakan untuk menjalankan render pass dan menentukan batas frame dari informasi tersebut.

Penghitung GPU
Jika informasi slice GPU tidak tersedia dalam rekaman aktivitas, Anda dapat memperkirakan waktu frame GPU menggunakan jalur penghitung GPU.
Perangkat Mali
Di perangkat Mali, Anda dapat menggunakan jalur penggunaan GPU untuk memperkirakan waktu frame GPU untuk aplikasi yang tidak intensif GPU. Jika aplikasi tidak terlalu intens menggunakan GPU, aplikasi tersebut memiliki periode aktivitas GPU tinggi dan rendah secara reguler, bukan aktivitas yang tinggi secara konsisten. Untuk memperkirakan waktu frame GPU menggunakan jalur penggunaan GPU, ukur durasi periode aktivitas tinggi di jalur.

Jika aplikasi lebih intensif menggunakan GPU, penggunaan GPU dapat secara konsisten sangat tinggi. Dalam hal ini, Anda dapat menggunakan jalur penggunaan antrean fragmen dan penggunaan antrean non-fragmen untuk memantau aktivitas GPU dan memperkirakan waktu frame GPU. Dengan mencari pola di jalur fragmen dan non-fragmen, Anda dapat memperoleh perkiraan kasar tentang lokasi batas frame, dan menggunakannya untuk mengukur waktu frame GPU.

Perangkat Adreno
Di perangkat Adreno, jika aplikasi tidak intensif GPU, Anda dapat memperkirakan waktu frame GPU dengan cara yang sama seperti yang dapat Anda lakukan dengan perangkat Mali di bagian sebelumnya.

Jika aplikasi lebih intensif menggunakan GPU, dan aplikasi memiliki persentase penggunaan GPU yang konsisten tinggi, Anda dapat menggunakan jalur Vertex Instructions / Second dan Fragment Instructions / Second untuk memperkirakan waktu frame GPU. Dengan mencari pola dalam tingkat aktivitas jalur ini, Anda dapat mendapatkan perkiraan kasar tentang batas frame, dan menggunakannya untuk mengukur waktu frame GPU.

Jalur lain ini mungkin memberikan informasi serupa:
- Vertex yang Diarsir / Detik
- Fragmen yang Diarsir / Detik
- % Waktu Shading Verteks
- % Waktu Shading Fragmen