ZonoTools
Home/Device Tools/GPU Stress Test

GPU Stress Test

Renders a heavy WebGL2 Mandelbrot fragment shader every frame. Adjust iterations and resolution to load integrated or discrete GPUs. Reports live FPS, rolling average, and GPU vendor/renderer when the browser exposes them.

Warning: High iterations on integrated laptop GPUs heat the system quickly. If the tab stutters or crashes, lower iterations and resolution and retry.

FPS (instant)

FPS (1s avg)

Min FPS

0

Frames

0.0

Elapsed (s)

Waiting to initialize WebGL2…

How to use

  1. Open the page in the browser you use for games or WebGL apps (Chrome, Firefox, Edge, Safari 15+).
  2. Confirm Vendor and Renderer under the canvas — avoid SwiftShader or llvmpipe (software rendering).
  3. Set Iterations (shader cost per pixel) and Resolution (canvas pixel scale) — start at 1500 / 1.0× on laptops.
  4. Click Start stress and watch FPS (instant), FPS (1s avg), and Min FPS while the Mandelbrot animates.
  5. Click Stop when done or if the tab stutters; lower settings and retry if needed.
  6. Use Copy results for support tickets or before/after driver comparisons on the same machine.

FAQ

Is this a real GPU stress test?

Yes when hardware acceleration is on — the fragment shader runs on your GPU. If the renderer shows SwiftShader, llvmpipe, or 'software', the browser is using CPU fallback and the FPS numbers reflect software rendering, not your graphics card.

Why does Chrome hide my GPU name?

Chrome and Firefox may redact WEBGL_debug_renderer_info as anti-fingerprinting. You may see a generic vendor/renderer string. Check chrome://gpu (Chrome) or about:support (Firefox) for the real GPU, or use the OS device manager.

Why does FPS drop after a minute on my laptop?

GPUs thermal-throttle like CPUs. Sustained Mandelbrot at high iterations heats integrated graphics quickly. A falling 1s average FPS with stable settings usually means heat or power limits — not necessarily a broken GPU.

Can I compare FPS to 3DMark or game benchmarks?

No. This is a single full-screen fragment shader in WebGL2, not a game engine. FPS is only comparable across runs on the same browser, GPU, resolution scale, and iteration count.

What settings should I use for an integrated GPU?

Start at 1500 iterations and 1.0× resolution. If FPS stays above your display refresh and the machine stays comfortable, raise iterations in steps of 500. If the tab stutters, lower resolution to 0.7× first.

Does anything leave my browser?

No. WebGL runs locally in this tab. No frames or GPU data are uploaded to our servers.

Introduction

GPU Stress Test pushes your graphics pipeline through WebGL2: every frame draws a full-screen triangle and runs a Mandelbrot set fragment shader with a configurable iteration count. More iterations and higher canvas resolution mean more GPU work per frame.

The tool reports:

  • FPS (instant) — frame-to-frame rate
  • FPS (1s avg) — rolling one-second average (smoother trend)
  • Min FPS — lowest 1s average seen after the run warms up
  • GPU vendor / renderer when the browser exposes them
  • A warning when software rendering is detected (SwiftShader, llvmpipe)

Use it to verify hardware acceleration, compare driver updates, or watch FPS hold vs drop under sustained load. It is not 3DMark, FurMark, or a game benchmark — it is a browser-local WebGL stress signal.

How the test works

1. WebGL2 context

The canvas requests webgl2 with powerPreference: 'high-performance' and no antialiasing. A single fullscreen triangle (three vertices) covers the framebuffer — standard trick to avoid quad edge cases.

2. Mandelbrot fragment shader

Per pixel:

  1. Map gl_FragCoord to complex plane coordinates (animated offset via u_t).
  2. Iterate up to u_iter times (slider 100–5000, shader loop cap 5000).
  3. Color by escape iteration with a time-based palette.

Higher Iterations increases ALU work per pixel. Higher Resolution increases pixel count (fill rate).

3. Frame loop

requestAnimationFrame drives the loop. Each frame:

  • Updates uniforms (u_t, u_res, u_iter)
  • Calls drawArrays(TRIANGLES, 0, 3)
  • Computes instant FPS from frame delta
  • Maintains a 1-second sliding window for average FPS
  • Updates Min FPS when the window has >30 samples and a new lower 1s average appears

4. GPU identification

If available, WEBGL_debug_renderer_info provides unmasked vendor/renderer; otherwise the tool falls back to VENDOR / RENDERER (often generic or redacted).


Understanding each output

FPS (instant)

What it is: 1000 / frame_delta_ms for the last frame.

How to read it: Spiky; good for seeing hitches. Vsync may cap near monitor refresh (60, 120, 144 Hz) even when the GPU could do more work.


FPS (1s avg)

What it is: Mean of instant FPS samples in the last 1000 ms.

How to read it: Best single number for sustained performance. Compare this across runs at the same settings.

Pattern Likely cause
Stable avg GPU and thermals keeping up
Drop after 60s Thermal or power limit
Very low avg, software renderer CPU SwiftShader path
Sudden cliff Tab backgrounded, driver reset, or OS GPU switch

Min FPS

What it is: Lowest 1s average recorded after enough samples (>30 in window).

How to read it: “Worst sustained second” during the session — useful for stutter and throttle detection. Not the same as 1% low in games.


Frames / Elapsed

What it is: Total frames drawn and seconds since Start stress.

How to read it: Sanity check that the loop ran continuously. Elapsed stops increasing when you Stop.


Iterations & Resolution

Iterations: Shader loop bound — primary load knob for ALU.

Resolution: Multiplier on canvas width (container width × scale) and fixed base height (420px × scale). Shown as W×H in copy text.


Vendor / Renderer

What it is: WebGL strings identifying the GL implementation.

Example renderer Meaning
ANGLE (NVIDIA GeForce RTX …) Hardware via ANGLE (common on Windows Chrome)
Apple M2 Apple GPU
SwiftShader / llvmpipe Software — not a hardware GPU test
Google Inc. / generic May be fingerprinting protection — check OS GPU panel

What this test measures

Measured How
WebGL2 fragment shader throughput (relative) FPS at given iterations × resolution
Sustained vs burst GPU behavior 1s avg over time, min FPS
Hardware vs software GL Renderer string heuristics
Browser WebGL path Same machine, same settings, compare runs

What this test does NOT measure

Not measured Why
VRAM size or usage WebGL does not expose full VRAM telemetry
GPU temperature / hotspot °C No sensor API in browsers
3DMark / game FPS Different engines, APIs, workloads
Ray tracing, mesh shaders, Vulkan WebGL2 only
CPU-bound game logic GPU fragment bound here
Display HDR / color accuracy Cosmetic palette only
Cross-machine absolute rank Browsers and drivers differ
Fan speed or board power (W) No OS hooks from the page

Safety

  • High settings on integrated graphics heat the whole package (CPU + GPU share a cooler).
  • Stop if the tab freezes, artifacts spread, or the system shuts down.
  • Prefer AC power and a ventilated surface for long runs.
  • Reduce Resolution first if stuttering; then Iterations.

Common use cases

1. Confirm hardware acceleration is on

Goal: Make sure the browser uses your real GPU, not a software fallback.

How to run: Open the page; read Renderer before starting. Click Start stress for 20s.

Healthy: Renderer mentions Intel, AMD, NVIDIA, Apple, Qualcomm, etc. FPS is reasonable for your class of GPU.

Red flag: SwiftShader, llvmpipe, or software in the renderer string — enable hardware acceleration in browser settings and update drivers.


2. New PC or GPU — quick sanity check

Goal: Discrete or integrated GPU responds under load without immediate tab crash.

How to run: Default 1500 iterations, 1.0× resolution, 30–60s run.

Healthy: Stable Mandelbrot animation; FPS not stuck at 0; no instant tab kill.

Red flag: Black canvas, shader compile error, or single-digit FPS on a desktop GPU at low settings — driver or WebGL2 issue.


3. Driver update before / after

Goal: Same machine, same browser, same slider values — did average FPS change?

How to run: Copy results after 60s at fixed iterations/resolution; update driver; reboot; repeat.

Compare: FPS (1s avg) at elapsed 45–60s and Min FPS — not instant spikes only.


4. Laptop thermal / power throttling

Goal: See if the GPU cannot sustain frame rate when hot.

How to run: AC power, 1500–2500 iterations, 1.0–1.5× resolution, run 2–3 minutes.

Pattern: High 1s avg in the first 30–60s, then 20–40% lower sustained avg — common on thin laptops with integrated graphics.


5. Integrated vs discrete (dual-GPU laptops)

Goal: Understand which GPU the browser selected (often the integrated chip for power saving).

How to run: Check renderer string; on Windows, compare before/after assigning the browser to “High performance” in Graphics settings.

Note: The tool cannot force GPU switch — it only reports what WebGL sees.


6. Remote support — “Is WebGL working?”

Goal: User pastes Copy results with vendor, renderer, FPS, and canvas size.

How to run: 30s at moderate settings; support checks for software renderer and absurdly low FPS.


7. Browser comparison (same PC)

Goal: See if one browser throttles WebGL more (extensions, flags).

How to run: Chrome vs Firefox vs Edge, identical iteration/resolution, 60s each.

Interpretation: 10–20% FPS variance is normal; huge gap → profile, flags, or hardware acceleration setting.


Quick reference

Goal Iterations Resolution Run length
Software check 1500 1.0× 10s (read renderer)
Light laptop 1000–1500 0.7–1.0× 60s
Desktop discrete 2500–4000 1.0–2.0× 90s
Thermal test 2000 1.2× 120s+

Related tools

  • CPU Stress Test — load logical CPU cores separately from GPU fragment work.
  • AI GPU Test — WebGPU compute readiness vs this WebGL2 FPS stress test.
  • Memory Test — tab JavaScript heap headroom before heavy web apps.
  • Device Info — screen, browser, and environment context.