DEV Community

Cover image for I Built a PC Bottleneck Calculator That Shows Its Math (and Auto-Detects Your GPU)
keyboardTester.Click
keyboardTester.Click

Posted on Originally published at keyboardtester.click

I Built a PC Bottleneck Calculator That Shows Its Math (and Auto-Detects Your GPU)

Every bottleneck calculator I have ever used handed me a confident number and no way to check it. Type in a Ryzen 5 5600 and an RTX 4070 SUPER, get "CPU bottleneck: 23.4%", done. No resolution, no game type, no formula, no data, no error bar. Change nothing and reload, and some of them give you a different decimal.

I run KeyboardTester.click, a collection of free browser hardware tests, and this week I shipped the calculator I wanted to exist: one that prints its formula, cites its data, shows a ±15% range, and changes its verdict when you change the workload, because the honest answer depends on what you run.

👉 Try it here: PC Bottleneck Calculator. No signup, nothing uploaded, runs entirely in your browser. The full guide, worked examples and FAQ live on that page; this DEV.to version keeps the model, the detection tricks and the build notes.

What it does in one screen

  • 125 CPUs and 131 GPUs (database version 2026-09-06): desktop and laptop CPUs from 2011 onward, GeForce / Radeon / Arc, laptop GPUs and integrated graphics, each with socket and VRAM.
  • Pre-fills your GPU from the WebGL renderer string the browser already exposes.
  • Six workload profiles: esports, competitive shooters, AAA without ray tracing, AAA with ray tracing / path tracing, simulation & strategy, and creator work (which compares multi-thread throughput instead of FPS).
  • Four resolutions (1080p, 1440p, ultrawide, 4K), an FPS target, RAM size and DDR type, game drive, and a "I stream with x264 on the same PC" toggle.
  • Output: the limiting side, the gap in percent, an estimated average FPS range, per-component notes, the same pair at every resolution, an upgrade path that lists same-socket chips first, and a method box with the formula, the calibration sources and the database version.
  • Copy result / copy share link: the state is encoded as ?cpu=&gpu=&res=&use=&ram=&target=, so a forum answer can link to the exact scenario.

The whole model, in the open

Each part carries relative indices, not benchmark numbers:

CPU: a 1080p gaming index (Ryzen 7 9800X3D = 100) and a multi-thread index (Ryzen 9 9950X = 100).
GPU: a 1440p rasterization index (RTX 4090 = 100), a ray-tracing multiplier (0 = no hardware RT), and VRAM.

A workload profile turns those indices into a CPU-bound frame rate and a GPU-bound frame rate. The resolution scales only the GPU side, because shading more pixels costs the graphics card, not the processor. Then:

bottleneck % = (faster side − slower side) ÷ faster side

Guardrails apply as multipliers: a VRAM shortfall for the chosen resolution costs 25%, 8 GB of system RAM costs 20%, RAM below the profile's comfortable amount costs 10%, and software (x264) streaming takes roughly a quarter of CPU time. Ray-traced profiles multiply the GPU side by the card's RT factor; a card with no RT hardware gets a "no hardware ray tracing" verdict instead of a fake number.

The indices are calibrated against independent review aggregates (TechPowerUp relative-performance charts, the Tom's Hardware CPU and GPU hierarchies, Hardware Unboxed and Gamers Nexus averages) and manufacturer specs. They assume stock clocks and a clean Windows install, and the page says ±15% under every result. That is the honest precision of this kind of estimate, and hiding it does not make it better.

Why the thresholds are asymmetric

Result CPU limiting GPU limiting What to do
Balanced under 10% under 15% Nothing. Spend on the monitor, storage or settings.
Mild 10–25% 15–35% Noticeable in some titles, rarely worth money. Adjust settings first.
Significant above 25% above 35% One part is idle a quarter of the time or more. A single targeted upgrade shows a real gain.

A GPU at 99% is the normal, healthy state of a gaming PC. You can trade resolution, upscaling or settings for frames at any time. A CPU bottleneck is the expensive one: lowering graphics settings does nothing for it, and it shows up as uneven frame times rather than a low average. So the calculator is deliberately more relaxed about GPU-bound results.

Four results, straight from the calculator

All four are the tool's own estimates (±15%), quoted with the profile and resolution that produced them:

  • Ryzen 5 5600 + RTX 4070 SUPER, AAA at 1080p: about 112 FPS, CPU-limited by 12% (mild). The same pair at 1440p flips to GPU-limited by 16% at around 95 FPS. Raising the resolution costs almost nothing and uses the idle card.
  • Core i5-12400 + Radeon RX 7800 XT, AAA at 1440p: about 81 FPS, GPU-limited by 34%. The processor has headroom for a future GPU.
  • Ryzen 7 9800X3D + RTX 5080, ray tracing at native 4K: about 42 FPS, GPU-limited by 76%. The best gaming CPU cannot help here; DLSS upscaling can.
  • Ryzen 7 5800X3D + RTX 4060, esports at 1080p: about 250 FPS, GPU-limited by 46%. A 240 Hz monitor is fed, a 360 Hz one is not.

Change one input and the verdict moves. That sensitivity is the point: a fixed "this CPU bottlenecks this GPU by 23%" with no resolution and no game type attached is not describing your PC.

The auto-detect problem (and the hybrid-laptop trap)

A web page can read surprisingly little about the machine it runs on:

  • WEBGL_debug_renderer_info usually gives a GPU name good enough to match ("NVIDIA GeForce RTX 4070 SUPER" or an ANGLE string that contains it).
  • navigator.hardwareConcurrency gives logical threads, which the tool offers as a CPU filter ("show CPUs with 12 threads"). It cannot tell a 5600 from a 7600.
  • navigator.deviceMemory is coarse and capped, so RAM is only "at least N GB".

Because of that, the page has an optional "Detect my exact CPU, RAM and GPU" section with two paths that both stay on your device:

  1. One command per OS. The Windows line uses Get-CimInstance for Win32_Processor, Win32_VideoController and Win32_PhysicalMemory; macOS uses system_profiler; Linux uses lscpu and lspci. The command reads three values and reopens the page with ?cpuname=&gpuname=&ram=. Nothing else is read or sent.
  2. Paste a system report. Windows "About" copy, dxdiag "Save All Information", msinfo32, macOS System Report, or raw lscpu / lspci / meminfo text, parsed locally with a matcher that folds F/KF suffixes, resolves Ti/SUPER/Laptop variants and prefers a discrete card over an iGPU.

That second path exists because of a real test machine. On a hybrid gaming laptop the browser runs on the integrated GPU by default, so WebGL reported a Radeon 740M while the actual RTX 4050 Laptop sat idle. Only the OS command found the discrete card. If a bottleneck tool "auto-detected" your laptop and got the iGPU, this is why.

Which side limits a PC you already own

You do not need a calculator for a machine that is in front of you. An overlay (MSI Afterburner, Xbox Game Bar, or the Task Manager Performance tab) tells you in a minute:

What you see CPU bottleneck GPU bottleneck
GPU usage well below 90%, often 50–80% 97–100% almost always
CPU usage one or two threads pinned near 100% moderate, no single core saturated
Lower the resolution FPS barely changes FPS rises clearly
Lower shadows / textures / RT little or no gain clear gain
Frame-time graph spiky, stutter in crowded scenes smooth but low

The calculator is for the cases you cannot measure yet: a part you are about to buy, a build you are planning, or a used PC you are judging from a spec sheet.

Where it can be wrong

The model cannot see your drivers, background software, thermal throttling, memory channels and XMP/EXPO state, a specific engine's quirks, or an overclock. Laptop parts can land ±20% from the shown range depending on the power limit of the specific model. Those are exactly the things a live measurement on your own machine does see, which is why every result links to the browser FPS test, the GPU stress test and the CPU stress test. Use the estimate to shortlist. Use a measurement to buy.

Build notes, for the devs here

  • The database is a script. A Python builder holds the CPU and GPU tables, the workload profiles and the resolution factors, and emits one versioned JSON file (about 42 KB, ~10 KB gzipped) that the page fetches once. Editing an index means editing a table, re-running and redeploying. I plan to refresh it monthly as parts launch.
  • Everything is client-side vanilla JS. No account, no server round-trip, no analytics on what hardware you picked. Share links carry the whole state in the query string.
  • No per-pair permalink pages, on purpose. The incumbents in this niche run tens of thousands of "CPU X bottleneck GPU Y" pages. That is their SEO engine, and it is exactly the kind of scaled, templated content search engines have been demoting. One page, one honest model.
  • No prices. They change weekly; the upgrade list names two or three candidates and tells you to compare street prices yourself.
  • Ten languages from one shared page definition, with native copy rather than machine-translated strings.

Quick FAQ

What bottleneck percentage is acceptable? Under 10% is balanced. 10–25% is noticeable but rarely worth money. Above 25% the slower part is clearly capping frame delivery. GPU-limited results use the looser 15% and 35% bands.

Is a CPU or a GPU bottleneck worse? CPU. A GPU-bound system can always trade settings for frames; a CPU-bound one cannot, and it stutters instead of just running slower.

Can this replace a benchmark? No. It is a planning estimate from relative indices. Verify on the real machine before spending money.

Why is my result different from other calculators? Most hide their formula and data, and some pad results with categories they never compute. This one prints the indices, the profile, the resolution factor and the confidence range, and it changes the verdict when you change the workload.


👉 Run the PC Bottleneck Calculator and tell me in the comments where the indices look wrong for your hardware; the database is versioned and I do correct it.

Related free browser tests on the same site: FPS test · GPU stress test · CPU stress test · RAM latency calculator · Refresh rate test

Top comments (0)