webgl: ship only the GPU buckets that pass tampering_ml + decouple render-noise seed
Cut the per-seed WebGL persona to the two renderer buckets that score clean on FP Pro tampering_ml across seeds (AMD Radeon R9 200 Series and Intel Arc A750), weighted 70/30, cross-vendor so the fleet isn't one fixed GPU. Every NVIDIA bucket and the integrated/ancient Intel buckets are penalised, so they're out. The canvas/WebGL render-image hash turned out to be the dominant tampering_ml driver, not the attributes, so the render-noise seed (zoom.stealth.fpp.hw_seed) is now decoupled from the identity seed and drawn from a calibrated clean pool. Per-seed determinism and per-user diversity are preserved. Also in this change: - audio maxChannelCount is stereo-dominant per class (it reflects the output device, not the GPU; the old tables over-emitted 5.1/7.1 surround) - route discrete Intel Arc desktop cards to a discrete-GPU class (not integrated) - condition the whole sampled profile on the exposed GPU class via the sampler's evidence path, so cores/screen/storage stay coherent with the declared GPU - apply per-named-font width factors on Windows/macOS so canvas measureText widths don't collapse to a single value 12/12 seeds clean on tampering_ml (worst 0.29), bot and anti-detect negative, and the fingerprint stays identical across repeated runs of the same seed.
This commit is contained in:
+17
-2
@@ -45,13 +45,28 @@ def test_classify_gpu_intel_hd_old_buckets(renderer):
|
||||
"ANGLE (Intel, Intel(R) HD Graphics 530 Direct3D11)",
|
||||
"ANGLE (Intel, Intel(R) UHD Graphics 630 Direct3D11)",
|
||||
"ANGLE (Intel, Intel(R) Iris Xe Graphics Direct3D11)",
|
||||
"ANGLE (Intel, Intel(R) Arc A750 Direct3D11)",
|
||||
# Integrated Arc iGPUs (Core Ultra "Arc 130T/140T/Graphics") stay integrated_modern.
|
||||
"ANGLE (Intel, Intel(R) Arc(TM) 140T GPU Direct3D11)",
|
||||
])
|
||||
def test_classify_gpu_intel_modern(renderer):
|
||||
"""CG4-CG7 [DT]: modern Intel HD/UHD/Iris/Arc → integrated_modern."""
|
||||
"""CG4-CG7 [DT]: modern Intel HD/UHD/Iris + integrated Arc → integrated_modern."""
|
||||
assert classify_gpu(_gpu(renderer)) == "integrated_modern"
|
||||
|
||||
|
||||
@pytest.mark.unit
|
||||
@pytest.mark.parametrize("renderer,expected", [
|
||||
# Discrete Intel Arc DESKTOP cards are NOT integrated: A5xx/A7xx/Bxxx ~ mid-range
|
||||
# discrete (RTX 3060 tier); A3xx are entry discrete → low_end.
|
||||
("ANGLE (Intel, Intel(R) Arc(TM) A750 Graphics Direct3D11 vs_5_0 ps_5_0)", "mid_range"),
|
||||
("ANGLE (Intel, Intel(R) Arc(TM) A770 Graphics Direct3D11)", "mid_range"),
|
||||
("ANGLE (Intel, Intel(R) Arc(TM) B580 Graphics Direct3D11)", "mid_range"),
|
||||
("ANGLE (Intel, Intel(R) Arc(TM) A380 Graphics Direct3D11)", "low_end"),
|
||||
])
|
||||
def test_classify_gpu_intel_arc_discrete(renderer, expected):
|
||||
"""Discrete Intel Arc desktop SKUs map to a discrete-GPU class, not integrated."""
|
||||
assert classify_gpu(_gpu(renderer)) == expected
|
||||
|
||||
|
||||
@pytest.mark.unit
|
||||
@pytest.mark.parametrize("renderer", [
|
||||
"ANGLE (AMD, AMD Radeon Graphics Direct3D11)",
|
||||
|
||||
Reference in New Issue
Block a user