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 menyediakan data rekaman aktivitas yang dapat Anda gunakan untuk memperkirakan waktu frame.
Waktu CPU
Di AGI, Anda dapat melihat total waktu frame CPU dan waktu frame CPU aktif di jalur CPU dari profil sistem.
Waktu CPU total
Untuk mengukur total waktu CPU yang digunakan,
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 perkiraan total waktu CPU,tetapi tidak selalu
mewakili waktu CPU aktif. Misalnya, di aplikasi yang terikat GPU, CPU mungkin menunggu GPU menyelesaikan pekerjaannya sebelum mengirimkan frame baru. Hal ini
sering terjadi saat peristiwa dequeueBuffer, eglSwapBuffer (untuk OpenGL), atau
vkQueuePresent (untuk Vulkan) menggunakan sebagian besar waktu CPU.
Waktu tunggu disertakan dalam total waktu CPU, tetapi tidak dalam waktu CPU aktif.
dequeueBuffer dan eglSwapBuffer.
Waktu CPU aktif
Waktu CPU aktif menentukan kapan CPU menjalankan kode aplikasi tanpa dalam status tidak ada aktivitas.
Untuk mengukur waktu CPU aktif, lihat bagian Running tepat di atas peristiwa CPU. Hitung semua bagian rekaman aktivitas antara dua peristiwa pengiriman frame yang dalam status Berjalan. 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 Anda. Penanda ini akan ditampilkan di jalur CPU System Profiler.
Memperkirakan waktu frame GPU
Untuk memperkirakan waktu frame GPU, Anda dapat menggunakan slice GPU atau penghitung GPU di System Profiler. Estimasi lebih akurat saat menggunakan slice GPU.
Slice GPU
Jika Profiler Sistem memiliki informasi slice GPU yang tersedia, Anda bisa mendapatkan informasi waktu frame GPU yang sangat akurat dengan mengukur total waktu yang dihabiskan aplikasi Anda 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 kurang kompleks, pekerjaan fragmen dan non-fragmen dilakukan secara berurutan, sehingga membedakan pekerjaan satu frame dengan frame lainnya dapat dilakukan dengan mencari jeda di antara pekerjaan GPU aktif.
Sebagai alternatif, jika Anda sudah memahami tugas 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 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. Pantau ID pengiriman menggunakan jalur Vulkan Events, 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 merepresentasikan proses 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 tugas yang dikirimkan untuk mengeksekusi frame. Untuk menandai render pass, klik slice Vulkan Events yang terkait dengan frame.
Ada beberapa skenario saat batas frame GPU lebih sulit dibedakan karena aplikasi sangat terikat GPU. Dalam skenario ini, jika Anda memahami tugas yang dikirimkan ke GPU, Anda dapat mengidentifikasi pola yang digunakan untuk menjalankan proses rendering 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 terlalu intensif GPU. Saat aplikasi kurang intensif GPU, aplikasi memiliki periode aktivitas GPU tinggi dan rendah yang teratur, bukan aktivitas tinggi yang konsisten. Untuk memperkirakan waktu frame GPU menggunakan jalur penggunaan GPU, ukur durasi periode aktivitas tinggi di jalur tersebut.
Jika aplikasi lebih banyak 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 memperkirakan dengan kasar lokasi batas frame, dan menggunakannya untuk mengukur waktu frame GPU.
Perangkat Adreno
Di perangkat Adreno, jika aplikasi tidak terlalu berat GPU-nya, Anda dapat memperkirakan waktu frame GPU dengan cara yang sama seperti yang dapat Anda lakukan dengan perangkat Mali di bagian sebelumnya.
Jika aplikasi lebih banyak menggunakan GPU, dan aplikasi memiliki persentase penggunaan GPU yang tinggi secara konsisten, Anda dapat menggunakan jalur Vertex Instructions/Second dan Fragment Instructions / Second untuk memperkirakan waktu frame GPU. Dengan mencari pola di tingkat aktivitas jalur ini, Anda bisa mendapatkan perkiraan kasar tentang lokasi batas frame, dan menggunakannya untuk mengukur waktu frame GPU.
Jalur lainnya ini mungkin memberikan informasi serupa:
- Vertices Shaded / Second
- Fragmen yang Diarsir / Detik
- % Waktu Vertex Shading
- % Waktu Mengarsir Fragmen