WebGL getParameter takes a GPU round trip for values Chrome asks the GPU for
On desktop Chromium, getParameter of UNMASKED_RENDERER_WEBGL, RED_BITS, DEPTH_BITS, SAMPLES and ALIASED_LINE_WIDTH_RANGE on a WebGL2 context runs at no more than 100 calls per millisecond (genuine Chrome: about 8 to 13). N/A without WebGL2, on Android and on other engines (severity: warn).
What a detector infers
In Chrome the page never talks to the graphics driver itself. WebGL commands go to a separate GPU process, and for some values getParameter has to ask that process and wait for the answer: the renderer string read through WEBGL_debug_renderer_info, the colour, depth and sample counts of the drawing buffer, and the line-width and point-size ranges.
Each such call is a synchronous round trip of around 100 microseconds, so a page that calls getParameter(UNMASKED_RENDERER_WEBGL) in a loop for a few milliseconds can count how many answers it got. Measured on 1 and 2 November 2026 on Windows, genuine Chrome 156 managed 8 to 13 calls per millisecond for each of these values.
A browser that rewrites them and answers the new value from memory, without making the driver query, managed 440 to 7,000 per millisecond for the same calls. The gap is two orders of magnitude, so a page can tell a value that came from the GPU process from one that did not by timing it, without knowing what the real value should be; a public fingerprint test already treats more than 100 calls per millisecond as a WebGL exception.
Only too fast is asserted: a slow or busy CPU makes every call slower, never faster. Limits such as MAX_TEXTURE_SIZE are cached in the page's process and are quick in Chrome as well, so they are not timed here.
How to resolve it
If a WebGL value is rewritten, rewrite it after the real query: make the same driver call Chrome makes, discard its answer and return the new value, so each call costs what it costs in Chrome. Returning a stored value skips the GPU process and is hundreds of times faster than any real Chrome.
Nearby checks in Render & GPU
- A Direct3D renderer only appears under a Windows claim
d3d-renderer-only-on-windowsDirect3D is a Windows API. ANGLE, the layer Chromium renders WebGL through, only names it in the unmasked renderer string when it is running… - A Direct3D 11 renderer reports the caps ANGLE's D3D11 backend fixes
webgl-d3d11-fixed-capsWhen ANGLE runs WebGL on Direct3D 11 at feature level 11 — the renderer string reads Direct3D11 vs_5_0 ps_5_0 — it does not ask the driver… - Every extension WebGL hands out is one it advertises
webgl-gettable-is-advertisedIn Chrome, getSupportedExtensions() and getExtension() read the same set: an extension the context can hand out is one it lists, and one it… - WebGL state reads back what the page just set
webgl-state-reads-backSome WebGL parameters are not capabilities but state the page itself controls. - readPixels writes only the pixels it was asked to read
webgl-readpixels-sentinelreadPixels writes into an array the page supplies, and the WebGL specification is precise about the edges: when the requested rectangle… - A worker OffscreenCanvas encodes the pixels it reads back
offscreen-canvas-exits-agreeA canvas has more than one way out. getImageData hands pixels straight to script; convertToBlob encodes the same pixels into a file, and… - WebGPU's preferred canvas format belongs to the claimed OS
webgpu-canvas-format-vs-osnavigator.gpu.getPreferredCanvasFormat() returns the texture format the platform's compositor wants to be handed, and Chrome on Windows and… - A WebGPU device accepts every limit and feature its adapter advertises
webgpu-device-honours-adapterA WebGPU adapter advertises limits and features, and the device it creates is validated against them by Dawn, Chrome's WebGPU…
Clearcote is a browser built for fingerprint coherence
It is a Chromium fork, maintained by the same people who wrote this reference. It ships as a compiled browser rather than as a stealth script injected into someone else's — which is a description of how it is built, and is not an argument about how it behaves on this check.
This audit takes no position on how Clearcote scores on Render & GPU checks, on this one, or anywhere else. It has no baseline corpus of other people's fingerprints to rank you against and no vendor scoreboard — nearly every check is self-referential, asking one browser the same question through two independent APIs and reporting whether both answers can be true at once. It runs identically on any browser, including ours. Run it on yours and read the result yourself.
See the other checks in Render & GPU — the family webgl-getparameter-gpu-roundtrip belongs to.
