Resolusi dinamis
Dalam belajar super sampling

FrameTimingManager

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:

  • Anda perlu debug pada tingkat bingkai-by-frame.
  • Anda ingin menggunakan fitur Resolusi DinamisPengaturan kamera yang memungkinkan Anda untuk menargetkan render individu skala dinamis, untuk mengurangi beban kerja pada GPU. More info
    Lihat di Glossary
    .
  • Anda ingin menggunakan paket Kinerja Adaptif.

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.

Cara mengaktifkan FrameTimingManager

Tip: Login Manajer selalu aktif untuk membangun pemain pembangunan.

Untuk mengaktifkan FrameTimingManage untuk menghapus build dan di Editor Unity:

  1. Edit > Project Settings > Player.
  2. Pada Other Settings, arahkan ke judul Rendering.
  3. Aktifkan properti Frame Timing Stats.

Jika Anda menggunakan platform OpenGL, Anda juga perlu mengaktifkan properti OpenGL: Profiler GPU Recorders untuk mengukur penggunaan GPU. Untuk melakukan ini:

  1. Edit > Project > Settings > Player.
  2. Pada Other Settings, arahkan ke judul Rendering.
  3. Aktifkan properti OpenGL: Profiler GPU.

Catatan: Dalam versi Unity 2021.2 dan sebelumnya, OpenGL Profiler GPU Recorder menonaktifkan properti Frame Timing Stats, sehingga Anda tidak dapat menggunakannya bersama.

Cara menggunakan FrameTimingManager

Untuk mengakses data yang catatan FrameTimingManager, gunakan salah satu metode berikut:

Lihat data waktu bingkai dengan modul Profiler Kustom

Untuk melihat data waktu bingkai dalam modul Profiler Kustom:

  1. Buat modul profiler kustom sesuai instruksi pada Membuat modul profiler kustom.
  2. Pada Profiler Module Editor window, pilih modul kustom Anda.
  3. Di panel Available Counters, pilih Unity.
  4. Pilih Render untuk membuka submenu yang mengandung profiler countersDitempatkan dalam kode dengan ProfilerCounter API untuk melacak metrik, seperti jumlah musuh yang ditidur dalam permainan Anda.
    Lihat di Glossary
    yang berkaitan dengan penggunaan memori, yang mencakup properti FrameTimingStats memungkinkan. Anda kemudian dapat mengklik counter yang relevan di submenu untuk menambahkannya ke modul kustom Anda.

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.

Ambil data timestamp dari FrameTimingManager C# API

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.

Rekam data dengan counter profiler khusus

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

    }
}

Bagaimana FrameTimingManager bekerja

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:

  • Jika GPU mendukung GPU kalitamps, GPU menyediakan kalitamp FrameTimeComplete.
  • Jika GPU tidak mendukung GPU kalitamps dan mengembalikan GPU Time, FrameTimingManager menghitung nilai untuk gpuFrameTime. Nilai adalah jumlah yang dilaporkan GPU Time dan nilai-nilai FirstSubmitTimestamp.
  • Jika GPU tidak mendukung GPU kalitamps dan tidak mengembalikan GPU Time, FrameTimingManager menetapkan nilai PresentTimestamp sebagai nilai FrameTimeComplete.

Kecukuran yang mungkin dengan rendering yang berbasis ubin

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.

Diagram showing how the discrepancy in reported GPU time can happen in the Metal API
Diagram menunjukkan bagaimana perbedaan dalam melaporkan waktu GPU dapat terjadi di API Logam

Dukungan platform

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.

Sumber daya tambahan

Resolusi dinamis
Dalam belajar super sampling