Memperkirakan waktu pemrosesan frame CPU dan GPU (waktu render frame) sangat penting untuk memahami performa aplikasi dan menemukan bottleneck. Saat membuat profil aplikasi dengan AGI, System Profiler menyediakan data rekaman aktivitas yang dapat Anda gunakan untuk memperkirakan waktu render frame.
Waktu CPU
Di AGI, Anda dapat melihat total waktu frame CPU aktif dan total dalam jalur CPU profil sistem.
Total waktu CPU
Untuk mengukur total waktu CPU yang dihabiskan,
pilih rentang waktu
yang mencakup waktu di antara peristiwa pengiriman frame yang berurutan. Peristiwa
pengiriman frame adalah eglSwapBuffers
(untuk OpenGL) dan vkQueuePresentKHR
(untuk Vulkan).
Pengukuran ini adalah perkiraan total waktu CPU,tetapi tidak selalu
merepresentasikan waktu CPU aktif. Misalnya, di aplikasi yang terikat dengan GPU, CPU
dapat menunggu GPU menyelesaikan pekerjaannya 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 disertakan dalam waktu CPU aktif.
Waktu CPU aktif
Waktu CPU aktif menentukan kapan CPU menjalankan kode aplikasi tanpa dalam status tidak ada aktivitas.
Untuk mengukur waktu CPU aktif, lihat slice Running tepat di atas peristiwa CPU. Menghitung semua bagian rekaman aktivitas di 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 irisan Running.
Untuk membantu mengidentifikasi slice aplikasi, Anda dapat menambahkan penanda ATrace ke aplikasi Anda. Tindakan ini akan menampilkan penanda di jalur CPU pada System Profiler.
Memperkirakan waktu render frame GPU
Untuk memperkirakan waktu render frame GPU, Anda dapat menggunakan irisan GPU atau penghitung GPU di Profiler Sistem. Perkiraan ini lebih akurat saat menggunakan slice GPU.
Slice GPU
Jika System Profiler memiliki informasi bagian 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, irisan GPU memiliki jalur fragmen, non-fragmen, dan terkadang non-fragmen tambahan. Untuk frame yang tidak terlalu rumit, tugas fragmen dan non-fragmen bersifat berurutan, sehingga membedakan tugas satu frame dengan frame lainnya dapat dilakukan dengan mencari celah antara tugas GPU yang aktif.
Sebagai alternatif, jika Anda sudah terbiasa dengan pekerjaan yang dikirimkan ke GPU, mengidentifikasi pola render pass yang dikirimkan akan memberikan informasi tentang kapan frame dimulai dan berakhir.
Untuk aplikasi yang memiliki alur kerja GPU yang lebih paralel, Anda bisa mendapatkan waktu frame GPU dengan mencari semua frame yang memiliki submissionID yang sama di panel Selection untuk setiap irisan.
Untuk aplikasi berbasis Vulkan, beberapa pengiriman dapat digunakan untuk membuat frame. Pantau ID pengiriman menggunakan jalur Peristiwa Vulkan, yang berisi irisan untuk setiap pengiriman. Memilih bagian pengiriman akan menandai semua irisan 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 irisan yang mewakili render yang diteruskan untuk sebuah 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 tugas yang dikirim untuk menjalankan frame. Untuk menandai penerusan render, klik irisan Peristiwa Vulkan yang terkait dengan frame.
Ada beberapa skenario ketika batas frame GPU lebih sulit dibedakan karena aplikasi terikat dengan GPU yang berat. Dalam skenario ini, jika sudah terbiasa dengan pekerjaan yang dikirimkan ke GPU, Anda dapat mengidentifikasi pola yang merender penerusan sedang dijalankan dan menentukan batas frame dari informasi tersebut.
Penghitung GPU
Jika informasi bagian 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 Pemakaian GPU untuk memperkirakan waktu frame GPU untuk aplikasi yang tidak menggunakan GPU secara intensif. Jika tidak terlalu intensif GPU, aplikasi memiliki periode aktivitas GPU yang tinggi dan rendah secara teratur, bukan aktivitas tinggi secara konsisten. Untuk memperkirakan waktu frame GPU menggunakan jalur penggunaan GPU, ukur durasi periode aktivitas tinggi dalam jalur.
Jika aplikasi lebih intensif GPU, Anda dapat menggunakan jalur fragmen dan non-fragmen untuk memperkirakan waktu frame GPU. Dengan mencari pola pada tingkat aktivitas jalur fragmen dan non-fragmen, Anda bisa mendapatkan perkiraan kasar lokasi batas frame, dan menggunakannya untuk mengukur waktu frame GPU.
Perangkat Adreno
Di perangkat Adreno, jika aplikasi tidak membutuhkan GPU yang intensif, Anda dapat memperkirakan waktu frame GPU dengan cara yang sama seperti yang dapat dilakukan pada perangkat Mal di bagian sebelumnya.
Jika aplikasi lebih intensif GPU, Anda dapat menggunakan jalur Vertex Hint / Second dan Fragment Instructions / Second untuk memperkirakan waktu frame GPU. Dengan mencari pola di level aktivitas jalur ini, Anda bisa mendapatkan perkiraan kasar letak batas frame, dan menggunakannya untuk mengukur waktu render frame GPU.
Jalur lain ini mungkin memberikan informasi yang serupa:
- Verteksi Berarsir / Detik
- Fragmen Berarsir / detik
- % Verteksi Time Shading
- % Fragmen Waktu