Zum Inhalt springen

Tracy Profiler - Real-Time Frame Profiler Cheatsheet

Tracy Profiler - Real-Time Frame Profiler Cheatsheet

Tracy ist ein Real-Time, Nanosekunden-Auflösung Hybrid Frame und Sampling Profiler, weit verbreitet in Spielen und Low-Latency C++ und Rust. Du addierst Lightweight Zone Makros zu deinem Code und Tracy streamt Timing-Daten live zu einer Desktop UI, wo du jeden Frame sehen kannst, jede Zone, GPU Timings, Memory Allocations und Lock Contention, während das Programm läuft. Seine Kombination aus Manueller Instrumentation plus Automatischer Sampling gibt beide Präzise Semantische Zones und Unzugeordnete Hot Spots.

Installation

KomponenteWie
Server (UI)Build profiler/ aus dem Repo oder Download ein Release
Client (Library)Add TracyClient.cpp + Headers zu deinem Build
Rustcargo add tracy-client (oder tracing-tracy)
AktivierenCompile mit TRACY_ENABLE definiert
VerifikationLaunch die UI; es wartet auf eine Client Connection

Instrumentierung 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
    }
}
MacroZweck
ZoneScopedTime die Enclosing Scope
ZoneScopedN("name")Named Zone
ZoneText(str, len)Attach Text zu einer Zone
FrameMarkDelimit Frames
TracyPlot("fps", v)Plot einen Numerischen Wert über Zeit
TracyMessage(...)Log eine Nachricht in die Timeline
TracyLockable(...)Track ein Mutex’s Contention

Instrumentierung Rust

use tracy_client::{Client, span};

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

Oder wire es in tracing mit dem tracing-tracy Crate, so dass Existierende Spans in Tracy automatisch erscheinen.

Memory & GPU

FeatureWie
Allocation TrackingTracyAlloc(ptr, size) / TracyFree(ptr)
Custom AllocatorsWrap Alloc/Free mit den Makros
GPU Zones (Vulkan/D3D/OpenGL)TracyVkZone, TracyD3D12Zone, etc.
GPU ContextCreate Einmal, dann Zones Attach zu es

Die UI

ViewZeigt
TimelineZones Pro Thread, Frame für Frame
StatisticsAggregate Zeit Pro Zone
Find ZoneHistogram von einer Zone’s Durations
CompareDiff Zwei Captures (Vorher/Nachher eine Änderung)
MemoryAllocation Timeline und Leaks
LocksContention zwischen Threads
Flame GraphAggregated Call Structure

Workflow: Chasing ein Frame Spike

StepAction
1Run mit dem Client Connected; Reproduce den Hitch
2Finde den Langen Frame in der Timeline
3Zoom In — Welche Zone Dominiert?
4Öffne “Find Zone” für Jene Zone → Duration Histogram
5Check des Outlier’s Kontext (Locks, Allocations, GPU Wait)
6Fix, Capture Again, Nutze Compare zu Prove das Improvement

Das Compare-Two-Captures-Workflow ist eines der Most praktischen Features von Tracy — es verwandelt “Feels Faster” in ein Gemessenes Delta.

Sampling Mode

Beyond Manuellen Zones, Tracy kann Call Stacks automatisch Samplen (Linux/Windows), Catching Zeit in Code, den du nicht instrumentiert hast. Combine Beide: Zones geben Semantische Struktur, Sampling füllt die Gaps.

Tracy vs Verwandte Profiler

AspektTracyPerfPerfetto
ModelInstrumented Zones + SamplingSamplingSystem-Wide Tracing
ResolutionNanosekundenSample IntervalEvent-Level
Live ViewJa (Real-Time)NeinPost-Hoc
GPU SupportBuilt-inNeinPartial
Am besten fürSpiele, Frame-Based, Low-Latency C++/RustCPU Hot PathsWhole-System Timelines

Complements Perf und Perfetto; Tracy’s Edge ist Live, Frame-Orientiert, Instrumented Profiling.

Ressourcen