# Performance tuning (/docs/guides/performance)

Tune overlay pacing, GPU selection and reader intervals using measured timings.

## Establish a baseline [#establish-a-baseline]

1. Save your current settings as a separate [profile](/docs/guides/profiles).
2. Keep the same map, view, display backend and enabled features while comparing settings.
3. In **Debug**, enable **Show FPS Counter** under **Performance & Rendering** and **Timings** under **Debug Diagnostics**.
4. Focus CS2 and observe the overlay and terminal output before changing a setting.

Change one setting at a time. Compare frame rate and timing output after each change, then save the profile you want to keep. Diagnostics can add work, so turn them off after measuring.

## Target FPS and VSync [#target-fps-and-vsync]

**Target FPS** controls pacing of the overlay frame loop. Positive values request that rate, subject to rendering cost and display behavior.

During active game rendering, `0` uses the selected monitor's reported refresh rate when available. It is not an unconditional unlimited setting, despite the current tooltip. If the monitor rate is unavailable, `0` adds no software pacing limit. The unfocused branch also passes `0` directly to the scheduler.

**Enable VSync** requests synchronization with presentation. The software limiter still runs, so a lower positive FPS target can also limit the result. The compositor and backend can constrain presentation independently. Compare the result on your selected backend rather than assuming the monitor rate is guaranteed.

**Extrapolate View Matrix** predicts view movement between updates. Compare it on and off if the overlay appears to lag or overshoot while moving. It does not change the reader's sampling intervals.

## Select a GPU or monitor [#select-a-gpu-or-monitor]

In **Debug**, open **Hardware Selection**:

- **Active GPU** reports the current OpenGL renderer and vendor.
- **Preferred GPU** selects a GPU preference for the next launch. Save the profile, restart, and check **Active GPU** again.
- **Target Monitor** moves the overlay immediately and updates the monitor dimensions used for projection.

Choosing a preferred GPU does not prove the driver used it. Confirm the active renderer after restarting. If the overlay moves but no longer aligns, follow [Display scaling](/docs/guides/display-scaling).

## Tune reader intervals [#tune-reader-intervals]

**Memory Reader Thread Tuning** has separate intervals for **Local Player**, **Other Players** and **Non-Player Entities**. Values are milliseconds, and the UI clamps each interval to `1-100 ms`.

A smaller interval requests more frequent reads and increases polling work. It does not guarantee fresh game state at that rate. The **EST** rate comes from the requested interval, while **ACT** reports the measured rate. Compare both before changing another interval.

Keep reader tuning separate from overlay FPS tuning. A faster draw loop can render the same snapshot more than once, while a faster reader cannot make a slow render pass finish sooner.

## Interpret timings [#interpret-timings]

With **Timings** enabled, terminal output includes averages and maximums for GPU sections such as **Depth Prepass**, **Glow Silhouette**, **Glow PostProcess**, **Body Pass**, **Skeleton ESP** and **2D ESP**.

| Observation                                              | Next comparison                                                                          |
| -------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| Glow sections take a large part of the measured GPU time | Compare the same scene with glow disabled.                                               |
| Depth Prepass dominates                                  | Compare map geometry and prepass settings while noting the change in occlusion behavior. |
| Reader ACT is below EST                                  | Check CPU load and compare a longer interval for that reader group.                      |
| FPS follows the monitor despite a higher target          | Compare VSync and compositor presentation behavior.                                      |

The reported **IPC Read Time** measures copying the latest internal packet into the frame loop. It is not the duration of every process-memory read. **GPU Render Time (wall-clock)** and the GPU query section totals measure different parts of the pipeline. Do not treat either as total input latency or a full frame budget including pacing.

For a reproducible report, use [Collect diagnostics](/docs/guides/diagnostics).
