UNPKG

detect-gpu

Version:

Classify GPU's based on their benchmark score in order to provide an adaptive experience.

59 lines (49 loc) 1.91 kB
// Application import { getGPUTier } from '../src/index'; // Test data import { RENDERER_DESKTOP, RENDERER_MOBILE, RENDERER_TABLET } from './renderers'; // Utilities const stripPrefix = entries => entries.map(entry => entry.split(' - ')[1].toLowerCase()); const mobile = stripPrefix(RENDERER_MOBILE); const tablet = stripPrefix(RENDERER_TABLET); const desktop = stripPrefix(RENDERER_DESKTOP); function testPerDeviceType(deviceType, forceMobile = false) { deviceType.map((rendererEntry) => { const GPUTier = getGPUTier({ forceRendererString: rendererEntry, forceMobile, }); test(`${deviceType} -> GPUTier returns a valid tier`, () => { const expected = /GPU_(MOBILE|DESKTOP)_TIER_(0|1|2|3)/; expect(GPUTier.tier).toEqual(expect.stringMatching(expected)); }); test(`${deviceType} -> GPUTier returns a benchmark entry`, () => { if (GPUTier.type === 'WEBGL_UNSUPPORTED') { console.warn( `WEBGL_UNSUPPORTED -> Entry: ${rendererEntry}, Tier: ${GPUTier.tier}, Type: ${ GPUTier.type }`, ); } if (GPUTier.type === 'BLACKLISTED') { console.warn( `BLACKLISTED -> Entry: ${rendererEntry}, Tier: ${GPUTier.tier}, Type: ${GPUTier.type}`, ); } else if (GPUTier.tier.match(/GPU_(MOBILE|DESKTOP)_TIER_0/)) { console.warn( `TIER 0 -> Entry: ${rendererEntry}, Tier: ${GPUTier.tier}, Type: ${GPUTier.type}`, ); } else if (GPUTier.type === 'FALLBACK') { console.log( `FALLBACK -> Entry: ${rendererEntry}, Tier: ${GPUTier.tier}, Type: ${GPUTier.type}`, ); } else { // console.log(`SUCCESS -> Tier: ${GPUTier.tier}, Type: ${GPUTier.type}`); } expect(GPUTier.type).toBeDefined(); }); }); } testPerDeviceType(mobile, true); testPerDeviceType(tablet, true); testPerDeviceType(desktop, false);