Salta ai contenuti

Tracy Profiler - Cheatsheet del Profiler di Frame in Tempo Reale

Tracy Profiler - Cheatsheet del Profiler di Frame in Tempo Reale

Tracy è un profiler ibrido di frame e sampling in tempo reale con risoluzione nanosecondo, ampiamente utilizzato nei giochi e in C++ e Rust a bassa latenza. Aggiungi macro zone leggere al tuo codice e Tracy trasmette i dati di timing live a un”interfaccia desktop in cui puoi vedere ogni frame, ogni zona, timing GPU, allocazioni di memoria e contesa di blocchi mentre il programma gira. La sua combinazione di strumentazione manuale più campionamento automatico fornisce sia zone semantiche precise che hot spot non attribuiti.

Installation

ComponentHow
Server (UI)Build profiler/ dal repo o scarica un rilascio
Client (library)Aggiungi TracyClient.cpp + header al tuo build
Rustcargo add tracy-client (o tracing-tracy)
EnableCompila con TRACY_ENABLE definito
VerifyAvvia l”UI; aspetta una connessione del client

Instrumenting C++

#include "tracy/Tracy.hpp"

void update() {
    ZoneScoped;                    // zone named after the function
    physics();
}

void render() {
    ZoneScopedN("Render Pass");    // explicit name
    ZoneColor(0x00FF00);
    draw();
}

int main() {
    while (running) {
        update();
        render();
        FrameMark;                 // marks a frame boundary
    }
}
MacroPurpose
ZoneScopedTempo l”ambito di inclusione
ZoneScopedN("name")Zona nominata
ZoneText(str, len)Allega testo a una zona
FrameMarkDelimita i frame
TracyPlot("fps", v)Traccia un valore numerico nel tempo
TracyMessage(...)Registra un messaggio nella timeline
TracyLockable(...)Traccia la contesa di un mutex

Instrumenting Rust

use tracy_client::{Client, span};

fn main() {
    let _client = Client::start();
    loop {
        {
            let _s = span!("update");
            update();
        }
        tracy_client::frame_mark();
    }
}

Oppure collegalo a tracing con il crate tracing-tracy in modo che gli span esistenti appaiano automaticamente in Tracy.

Memory & GPU

FeatureHow
Allocation trackingTracyAlloc(ptr, size) / TracyFree(ptr)
Custom allocatorsAvvolgi alloc/free con le macro
GPU zones (Vulkan/D3D/OpenGL)TracyVkZone, TracyD3D12Zone, etc.
GPU contextCrea una volta, poi le zone si collegano ad essa

The UI

ViewShows
TimelineZone per thread, frame per frame
StatisticsTempo aggregato per zona
Find zoneIstogramma delle durate di una zona
CompareDifferenza due catture (prima/dopo di un cambiamento)
MemoryTimeline di allocazione e perdite
LocksContesa tra thread
Flame graphStruttura di chiamata aggregata

Workflow: Chasing a Frame Spike

StepAction
1Esegui con il client collegato; riproduci il balbettio
2Trova il frame lungo nella timeline
3Zoom in — quale zona domina?
4Apri “Find Zone” per quella zona → istogramma di durata
5Controlla il contesto dell”outlier (blocchi, allocazioni, GPU wait)
6Correggi, cattura di nuovo, usa Compare per provare il miglioramento

Quel flusso di lavoro compare-two-captures è una delle caratteristiche più pratiche di Tracy — trasforma “sembra più veloce” in un delta misurato.

Sampling Mode

Oltre alle zone manuali, Tracy può campionare automaticamente gli stack di chiamate (Linux/Windows), catturando il tempo nel codice che non hai strumentato. Combinali entrambi: le zone danno struttura semantica, il campionamento riempie i vuoti.

AspectTracyperfPerfetto
ModelZone strumentate + campionamentoCampionamentoTracing di sistema
ResolutionNanosecondoIntervallo di campioneLivello di evento
Live viewSì (in tempo reale)NoPost-hoc
GPU supportIntegratoNoParziale
Best forGiochi, frame-based, C++/Rust a bassa latenzaPercorsi caldi della CPUTimeline di sistema intere

Integra perf e Perfetto; il vantaggio di Tracy è il profiling live, orientato ai frame e strumentato.

Resources