{"record":{"id":"6e1fbfe6820c866b","repo":"pear-devs/pear-desktop","slug":"your-browser-does-not-support-gpu-acceleration-cp","errorCode":null,"errorMessage":"Your browser does not support GPU Acceleration. CPU Tamer by AnimationFrame is skipped.","messagePattern":"Your browser does not support GPU Acceleration\\. CPU Tamer by AnimationFrame is skipped\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"info","filePath":"src/plugins/performance-improvement/scripts/cpu-tamer/cpu-tamer-by-animationframe.js","lineNumber":67,"sourceCode":"          /** @type {(reason?: any) => void} */\n          this.reject = reject_;\n        }\n      }\n    };\n  })();\n\n  const isGPUAccelerationAvailable = (() => {\n    // https://gist.github.com/cvan/042b2448fcecefafbb6a91469484cdf8\n    try {\n      const canvas = document.createElement('canvas');\n      return !!(canvas.getContext('webgl') || canvas.getContext('experimental-webgl'));\n    } catch (e) {\n      return false;\n    }\n  })();\n\n  if (!isGPUAccelerationAvailable) {\n    throw new Error('Your browser does not support GPU Acceleration. CPU Tamer by AnimationFrame is skipped.');\n  }\n\n  const timeupdateDT = (() => {\n\n    window.__j6YiAc__ = 1;\n\n    document.addEventListener('timeupdate', () => {\n      window.__j6YiAc__ = Date.now();\n    }, true);\n\n    let kz = -1;\n    try {\n      kz = top.__j6YiAc__;\n    } catch (e) {\n\n    }\n\n    return kz >= 1 ? () => top.__j6YiAc__ : () => window.__j6YiAc__;","sourceCodeStart":49,"sourceCodeEnd":85,"githubUrl":"https://github.com/pear-devs/pear-desktop/blob/1e2aac5706c870c93ed74ba8727ae8390d3b0fa5/src/plugins/performance-improvement/scripts/cpu-tamer/cpu-tamer-by-animationframe.js#L49-L85","documentation":"CPU Tamer by AnimationFrame depends on browser GPU acceleration (it uses requestAnimationFrame driven by rAF-based timing). On startup it probes GPU availability; if unsupported, it throws this error to signal that the tamer is intentionally skipped — an expected, informational abort rather than a crash.","triggerScenarios":"Running in a browser with hardware acceleration disabled (chrome://settings or about:config); headless/VM environments without GPU; remote desktop sessions; browsers or OS configurations where WebGL/compositing is unavailable or blocklisted.","commonSituations":"Users with 'Use hardware acceleration when available' turned off; Linux without proper GPU drivers; virtual machines and CI; old GPUs on the blocklist; battery-saver modes disabling GPU compositing.","solutions":["Treat this error as non-fatal: catch it and log that CPU tamer is disabled","Enable hardware acceleration in browser settings and reload if you want the tamer active","In VMs/headless environments, expect it and skip loading this script entirely"],"exampleFix":"// before\ninjectUserscript(cpuTamerByAnimationFrame);\n\n// after\ninjectUserscript(cpuTamerByAnimationFrame).catch((e) => {\n  if (!/GPU Acceleration/.test(e.message)) throw e;\n  log.info('CPU tamer skipped: no GPU acceleration');\n});","handlingStrategy":"try-catch","validationCode":"const hasGpu = (() => { try { const c = document.createElement('canvas'); return !!c.getContext('webgl2') || !!c.getContext('webgl'); } catch { return false; } })();\nif (hasGpu) inject(cpuTamerSrc);","typeGuard":null,"tryCatchPattern":"inject(cpuTamerSrc).catch((e) => { if (!/GPU Acceleration/.test(e.message)) throw e; log.info('CPU tamer skipped: no GPU'); });","preventionTips":["Treat this as an expected skip, not a failure","Check WebGL availability before injecting in headless/VM environments","Enable hardware acceleration in browser settings if the tamer is wanted"],"tags":["userscript","gpu","cpu-tamer","feature-detection","environment-unsupported"],"backgroundTag":"unsupported-browser-feature","analyzedSha":"1e2aac5706c870c93ed74ba8727ae8390d3b0fa5","analyzedAt":"2026-08-27T20:01:08.614Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}