Login Manajer adalah API yang menangkap data waktu rinci tentang kinerja selama bingkai individu dalam aplikasi. Anda dapat menggunakan data ini untuk menilai bingkai tersebut untuk memahami mengapa aplikasi Anda tidak memenuhi target kinerja.
Anda dapat menggunakan FrameTimingManager untuk:
Waktu bingkai tidak menggantikan data dari ProfilerJendela yang membantu Anda untuk mengoptimalkan permainan Anda. Ini menunjukkan berapa banyak waktu yang dihabiskan di berbagai bidang permainan Anda. Sebagai contoh, dapat melaporkan persentase waktu yang dihabiskan rendering, aimating, atau dalam logika permainan Anda. More info
Lihat di Glossary; setelah Anda profil aplikasi Anda pada tingkat tinggi, gunakan FrameTimingManager untuk menyelidiki rincian spesifik. FrameTimingManager mengurangi kinerja ketika data catatan, sehingga tidak dapat menghasilkan pengukuran yang akurat tentang bagaimana aplikasi Anda melakukan.
Tip: Login Manajer selalu aktif untuk membangun pemain pembangunan.
Untuk mengaktifkan FrameTimingManage untuk menghapus build dan di Editor Unity:
Jika Anda menggunakan platform OpenGL, Anda juga perlu mengaktifkan properti OpenGL: Profiler GPU Recorders untuk mengukur penggunaan GPU. Untuk melakukan ini:
Catatan: Dalam versi Unity 2021.2 dan sebelumnya, OpenGL Profiler GPU Recorder menonaktifkan properti Frame Timing Stats, sehingga Anda tidak dapat menggunakannya bersama.
Untuk mengakses data yang catatan FrameTimingManager, gunakan salah satu metode berikut:
Untuk melihat data waktu bingkai dalam modul Profiler Kustom:
Tabel berikut menjelaskan tujuan setiap counter yang tersedia ketika Anda mengaktifkan Frame Timing Stats:
Measurement | Description |
---|---|
CPU Total Frame Time (ms) | Total waktu bingkai CPU, dalam mili detik. Unity menghitung ini sebagai waktu antara akhir dua bingkai, termasuk setiap overhead atau waktu yang dihabiskan menunggu di antara bingkai. |
CPU Main Thread Frame Time (ms) | Waktu antara awal bingkai dan waktu ketika Thread Utama selesai pekerjaan yang dilakukan selama bingkai itu, dalam mili detik. |
CPU Main Thread Present Wait Time (ms) | Waktu CPU yang dihabiskan menunggu Present() selama bingkai. |
CPU Render Thread Frame Time (ms) | Waktu antara awal pekerjaan pada Thread Render dan ketika Unity memanggil fungsi Present(), dalam mili detik. |
GPU Frame Time (ms) | Perbedaan waktu antara awal dan akhir GPU rendering bingkai tunggal, dalam mili detik. |
Gunakan API FrameTimingManager untuk mengakses informasi timestamp. Dalam setiap variabel, FrameTimingManager mencatat waktu acara tertentu terjadi selama bingkai.
Tabel berikut menunjukkan nilai-nilai yang tersedia melalui API, agar Unity mengeksekusi mereka selama bingkai:
Property | Description |
---|---|
frameStartTimestamp | Waktu jam CPU ketika bingkai dimulai. |
firstSubmitTimestamp | Waktu jam CPU ketika Unity mengirimkan pekerjaan pertama ke GPU selama bingkai ini. |
cpuTimePresentCalled | Waktu jam CPU ketika Unity memanggil fungsi Present() untuk bingkai saat ini. |
cpuTimeFrameComplete | Waktu jam CPU ketika selesai GPU rendering bingkai dan mengganggu CPU. |
Anda dapat membaca nilai FrameTimingManager menggunakan ProfilerRecorder API bukan FrameTimingManager C# API. Manfaat ini adalah bahwa ketika Anda menggunakan ProfilerRecorder API, FrameTimingManager hanya mencatat nilai ketika Anda melampirkan perekam ke counter tertentu. Perilaku ini memungkinkan Anda untuk mengontrol penghitung pengumpulan data dan sebagainya, mengurangi dampak bahwa FrameTimingManager memiliki kinerja.
Contoh berikut menunjukkan bagaimana untuk melacak hanya CPU Main Thread Frame Time variabel dengan ProfilerRecordAPI:
using Unity.Profiling;
using UnityEngine;
public class ExampleScript : MonoBehaviour
{
string statsText;
ProfilerRecorder mainThreadTimeRecorder;
void OnEnable()
{
mainThreadTimeRecorder = ProfilerRecorder.StartNew(ProfilerCategory.Internal, "CPU Main Thread Frame Time");
}
void OnDisable()
{
mainThreadTimeRecorder.Dispose();
}
void Update()
{
var frameTime = mainThreadTimeRecorder.LastValue;
// Your code logic here
}
}
Login Manajer memberikan hasil dengan penundaan set empat bingkai. Ini karena hasil waktu tidak segera tersedia di akhir setiap bingkai, sehingga FrameTimingManager menunggu untuk mendapatkan data CPU dan GPU untuk bingkai.
Keterlambatan tidak menjamin hasil waktu yang akurat, karena GPU mungkin tidak memiliki sumber daya yang tersedia untuk mengembalikan hasil, atau mungkin gagal mengembalikannya dengan benar.
Login Perubahan kemarahan bagaimana menghasilkan kalitamp FrameTimeComplete dalam beberapa keadaan:
Untuk GPU yang menggunakan arsitektur rendering yang berbasis ubin, seperti GPU Logam di perangkat Apple, Waktu GPU yang dilaporkan mungkin lebih besar dari waktu bingkai yang dilaporkan.
Ini dapat terjadi ketika GPU berada di bawah beban berat, atau ketika pipa GPU penuh. Dalam kasus ini, GPU mungkin mendefinisikan eksekusi beberapa fase rendering. Karena FrameTimingManager mengukur waktu antara awal dan akhir rendering bingkai, kesenjangan antara fase meningkatkan waktu GPU yang dilaporkan.
Dalam contoh di bawah ini, tidak ada sumber daya GPU yang tersedia, karena GPU melewati pekerjaan dari antrian Vertex ke antrian Fragment. API grafis GPU oleh karena itu mendefinisikan pelaksanaan fase berikutnya. Ketika ini terjadi, pengukuran waktu GPU mencakup waktu kerja fase dan kesenjangan di antara. Hasilnya adalah bahwa FrameTimingManager melaporkan pengukuran waktu GPU yang lebih tinggi dari yang diharapkan.
Property | Description | Supported | Comment |
---|---|---|---|
Windows | WinZip 11 | Yes | |
DirectX 12 | Yes | ||
OpenGL | Yes | ||
Vulkan | Yes | ||
macOS | Metal | Yes | Might melaporkan pengukuran waktu GPU yang lebih besar daripada waktu bingkai total karena perilaku rendering GPU yang berbasis ubin. |
Linux | OpenGL | Partial | Tidak mendukung pengukuran waktu GPU. |
Vulkan | Yes | ||
Android | OpenGL ES | Yes | |
Vulkan | Yes | ||
iOS | Metal | Yes | Might melaporkan pengukuran waktu GPU yang lebih besar daripada waktu bingkai total karena perilaku rendering GPU yang berbasis ubin. |
tvOS | Metal | Yes | Might melaporkan pengukuran waktu GPU yang lebih besar daripada waktu bingkai total karena perilaku rendering GPU yang berbasis ubin. |
WebGLA JavaScript API that renders 2D and 3D graphics in a web browser. The Unity WebGL build option allows Unity to publish content as JavaScript programs which use HTML5 technologies and the WebGL rendering API to run Unity content in a web browser. More info See in Glossary |
WebGL | Partial | Tidak mendukung pengukuran waktu GPU. |