---
name: tracy_zone
kind: function
lang: cpp
domain: core
version: "1.0.0"
purity: pure
signature: "FN_ZONE(name) / FN_ZONE_COLOR(name, color) / FN_FRAME_MARK / FN_PLOT(name, val)"
description: "Macros y constantes de conveniencia para Tracy profiling zones, compilables sin Tracy"
tags: [tracy, profiling, debug, performance, raii, pendiente-usar]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: ""
imports: []
tested: false
tests: []
test_file_path: ""
file_path: "cpp/functions/core/tracy_zone.cpp"
framework: imgui
params:
  - name: name
    desc: "Nombre de la zona tal como aparece en la timeline de Tracy"
  - name: color
    desc: "Color ARGB uint32 de la zona en Tracy (opcional, solo FN_ZONE_COLOR)"
output: "Zona Tracy activa durante el scope actual; no-op cuando TRACY_ENABLE no está definido"
---

# tracy_zone

Macros de scope para instrumentar secciones de código con Tracy Profiler. Cuando `TRACY_ENABLE` no está definido (ej. builds de producción) todas las macros se expanden a `(void)0`, sin coste alguno.

## Macros disponibles

| Macro | Descripción |
|---|---|
| `FN_ZONE("name")` | Zona con nombre, color automático |
| `FN_ZONE_COLOR("name", color)` | Zona con nombre y color ARGB explícito |
| `FN_FRAME_MARK` | Marca el límite de frame (eje X de Tracy) |
| `FN_PLOT("name", val)` | Envía un valor escalar al panel de plots |

## Colores predefinidos (`fn_tracy::`)

```cpp
fn_tracy::COLOR_RENDER  // 0x2196F3 azul   — rendering
fn_tracy::COLOR_UPDATE  // 0x4CAF50 verde  — game update / logic
fn_tracy::COLOR_IO      // 0xFF9800 naranja — I/O disco/red
fn_tracy::COLOR_NETWORK // 0xF44336 rojo   — red/HTTP
fn_tracy::COLOR_COMPUTE // 0x9C27B0 morado — compute / shader prep
```

## Ejemplo

```cpp
#include "core/tracy_zone.h"

void render_scene() {
    FN_ZONE_COLOR("render_scene", fn_tracy::COLOR_RENDER);
    // ... render calls ...
}

void update(float dt) {
    FN_ZONE("update");
    // ... game logic ...
    FN_PLOT("dt_ms", dt * 1000.0f);
}

void main_loop() {
    while (running) {
        update(dt);
        render_scene();
        FN_FRAME_MARK;
    }
}
```

## Notas

- Compilar con `-DTRACY_ENABLE` y enlazar `TracyClient.cpp` para activar profiling.
- Sin `TRACY_ENABLE` el .cpp es prácticamente vacío — coste cero en producción.
- Los colores son ARGB; si el alpha es 0 Tracy aplica su color automático por zona.
- `FN_ZONE` expande a `ZoneScopedN(name)` de Tracy, que crea el contexto con `__LINE__` como discriminador — es seguro llamar varias veces en el mismo scope.
