mirror of
https://github.com/faisalman/ua-parser-js.git
synced 2025-09-27 16:08:47 +03:00
Experimental: GPU detection #322
This commit is contained in:
parent
732cf5834e
commit
b29e74d61c
@ -847,6 +847,20 @@
|
|||||||
], [VERSION, NAME]
|
], [VERSION, NAME]
|
||||||
],
|
],
|
||||||
|
|
||||||
|
gpu : [[
|
||||||
|
|
||||||
|
/(intel).*\b(hd\sgraphics\s\d{4}|iris(?:\spro)|gma\s\w+)/i, // Intel
|
||||||
|
/(nvidia)\s(geforce\s(?:gtx?\s)\d\w+|quadro)/i, // NVIDIA
|
||||||
|
/(sis)\s(\w+)/i // SiS
|
||||||
|
], [VENDOR, MODEL], [
|
||||||
|
|
||||||
|
/\b(radeon\shd\s\w{4,5})/i // ATI
|
||||||
|
], [MODEL, [VENDOR, 'ATI']], [
|
||||||
|
|
||||||
|
/(adreno\s(?:\(TM\)\s)\w+)/i // Qualcomm
|
||||||
|
], [[MODEL, /\(TM\)\s/, ''], [VENDOR, 'Qualcomm']]
|
||||||
|
],
|
||||||
|
|
||||||
os : [[
|
os : [[
|
||||||
|
|
||||||
// Windows based
|
// Windows based
|
||||||
@ -959,6 +973,14 @@
|
|||||||
//var engine = new Engine();
|
//var engine = new Engine();
|
||||||
//var os = new OS();
|
//var os = new OS();
|
||||||
|
|
||||||
|
var renderer;
|
||||||
|
// browser only
|
||||||
|
if (window && window.document) {
|
||||||
|
var canvas = document.createElement('canvas');
|
||||||
|
var gl = canvas.getContext ? canvas.getContext('webgl2') || canvas.getContext('webgl') || canvas.getContext('experimental-webgl') : undefined;
|
||||||
|
renderer = gl && gl.getParameter && getExtension && gl.getExtension('WEBGL_debug_renderer_info') ? gl.getParameter(gl.getExtension('WEBGL_debug_renderer_info').UNMASKED_RENDERER_WEBGL) : undefined;
|
||||||
|
}
|
||||||
|
|
||||||
this.getBrowser = function () {
|
this.getBrowser = function () {
|
||||||
var browser = { name: undefined, version: undefined };
|
var browser = { name: undefined, version: undefined };
|
||||||
mapper.rgx.call(browser, ua, rgxmap.browser);
|
mapper.rgx.call(browser, ua, rgxmap.browser);
|
||||||
@ -980,6 +1002,13 @@
|
|||||||
mapper.rgx.call(engine, ua, rgxmap.engine);
|
mapper.rgx.call(engine, ua, rgxmap.engine);
|
||||||
return engine;
|
return engine;
|
||||||
};
|
};
|
||||||
|
this.getGPU = function () {
|
||||||
|
var gpu = { vendor: undefined, model: undefined };
|
||||||
|
if (renderer) {
|
||||||
|
mapper.rgx.call(gpu, renderer, rgxmap.gpu);
|
||||||
|
}
|
||||||
|
return gpu;
|
||||||
|
};
|
||||||
this.getOS = function () {
|
this.getOS = function () {
|
||||||
var os = { name: undefined, version: undefined };
|
var os = { name: undefined, version: undefined };
|
||||||
mapper.rgx.call(os, ua, rgxmap.os);
|
mapper.rgx.call(os, ua, rgxmap.os);
|
||||||
@ -992,12 +1021,17 @@
|
|||||||
engine : this.getEngine(),
|
engine : this.getEngine(),
|
||||||
os : this.getOS(),
|
os : this.getOS(),
|
||||||
device : this.getDevice(),
|
device : this.getDevice(),
|
||||||
cpu : this.getCPU()
|
cpu : this.getCPU(),
|
||||||
|
gpu : this.getGPU()
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
this.getUA = function () {
|
this.getUA = function () {
|
||||||
return ua;
|
return ua;
|
||||||
};
|
};
|
||||||
|
this.setRenderer = function (rendererstr) {
|
||||||
|
renderer = rendererstr;
|
||||||
|
return this;
|
||||||
|
};
|
||||||
this.setUA = function (uastring) {
|
this.setUA = function (uastring) {
|
||||||
ua = uastring;
|
ua = uastring;
|
||||||
//browser = new Browser();
|
//browser = new Browser();
|
||||||
|
56
test/gpu-test.json
Normal file
56
test/gpu-test.json
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"desc" : "Intel",
|
||||||
|
"renderer": "Intel HD Graphics 4000 OpenGL Engine",
|
||||||
|
"expect" :
|
||||||
|
{
|
||||||
|
"vendor" : "Intel",
|
||||||
|
"model" : "HD Graphics 4000"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc" : "Intel",
|
||||||
|
"renderer": "Intel Iris Pro OpenGL Engine",
|
||||||
|
"expect" :
|
||||||
|
{
|
||||||
|
"vendor" : "Intel",
|
||||||
|
"model" : "Iris Pro"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc" : "Intel",
|
||||||
|
"renderer": "Intel GMA X3100 OpenGL Engine",
|
||||||
|
"expect" :
|
||||||
|
{
|
||||||
|
"vendor" : "Intel",
|
||||||
|
"model" : "GMA X3100"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc" : "ATI",
|
||||||
|
"renderer": "ATI Radeon HD 6750M OpenGL Engine",
|
||||||
|
"expect" :
|
||||||
|
{
|
||||||
|
"vendor" : "ATI",
|
||||||
|
"model" : "Radeon HD 6750M"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc" : "NVIDIA",
|
||||||
|
"renderer": "NVIDIA GeForce GT 650M OpenGL Engine",
|
||||||
|
"expect" :
|
||||||
|
{
|
||||||
|
"vendor" : "NVIDIA",
|
||||||
|
"model" : "GeForce GT 650M"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"desc" : "Qualcomm",
|
||||||
|
"renderer": "Adreno (TM) 320",
|
||||||
|
"expect" :
|
||||||
|
{
|
||||||
|
"vendor" : "Qualcomm",
|
||||||
|
"model" : "Adreno 320"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
27
test/test.js
27
test/test.js
@ -5,6 +5,7 @@ var browsers = require('./browser-test.json');
|
|||||||
var cpus = require('./cpu-test.json');
|
var cpus = require('./cpu-test.json');
|
||||||
var devices = require('./device-test.json');
|
var devices = require('./device-test.json');
|
||||||
var engines = require('./engine-test.json');
|
var engines = require('./engine-test.json');
|
||||||
|
var gpus = require('./gpu-test.json');
|
||||||
var os = require('./os-test.json');
|
var os = require('./os-test.json');
|
||||||
var parser = new UAParser();
|
var parser = new UAParser();
|
||||||
var methods = [
|
var methods = [
|
||||||
@ -32,6 +33,12 @@ var methods = [
|
|||||||
list : engines,
|
list : engines,
|
||||||
properties : ['name', 'version']
|
properties : ['name', 'version']
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title : 'getGPU',
|
||||||
|
label : 'gpu',
|
||||||
|
list : gpus,
|
||||||
|
properties : ['model', 'vendor']
|
||||||
|
},
|
||||||
{
|
{
|
||||||
title : 'getOS',
|
title : 'getOS',
|
||||||
label : 'os',
|
label : 'os',
|
||||||
@ -43,7 +50,7 @@ describe('UAParser()', function () {
|
|||||||
var ua = 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6';
|
var ua = 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6';
|
||||||
assert.deepEqual(UAParser(ua), new UAParser().setUA(ua).getResult());
|
assert.deepEqual(UAParser(ua), new UAParser().setUA(ua).getResult());
|
||||||
});
|
});
|
||||||
|
/*
|
||||||
for (var i in methods) {
|
for (var i in methods) {
|
||||||
describe(methods[i]['title'], function () {
|
describe(methods[i]['title'], function () {
|
||||||
for (var j in methods[i]['list']) {
|
for (var j in methods[i]['list']) {
|
||||||
@ -63,7 +70,22 @@ for (var i in methods) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}*/
|
||||||
|
|
||||||
|
describe('getGPU', function () {
|
||||||
|
for (var i in gpus) {
|
||||||
|
describe(`[${gpus[i].desc}] "${gpus[i].renderer}"`, function () {
|
||||||
|
var gpu = parser.setRenderer(gpus[i].renderer).getGPU();
|
||||||
|
var expect = gpus[i].expect;
|
||||||
|
it(`should return vendor: ${expect.vendor}`, function(){
|
||||||
|
assert.equal(gpu.vendor, expect.vendor != 'undefined' ? expect.vendor : undefined);
|
||||||
|
})
|
||||||
|
it(`should return model: ${expect.model}`, function(){
|
||||||
|
assert.equal(gpu.model, expect.model != 'undefined' ? expect.model : undefined);
|
||||||
|
})
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
describe('Returns', function () {
|
describe('Returns', function () {
|
||||||
it('getResult() should returns JSON', function(done) {
|
it('getResult() should returns JSON', function(done) {
|
||||||
@ -74,6 +96,7 @@ describe('Returns', function () {
|
|||||||
cpu: { architecture: undefined },
|
cpu: { architecture: undefined },
|
||||||
device: { vendor: undefined, model: undefined, type: undefined },
|
device: { vendor: undefined, model: undefined, type: undefined },
|
||||||
engine: { name: undefined, version: undefined},
|
engine: { name: undefined, version: undefined},
|
||||||
|
gpu: { vendor: undefined, model: undefined},
|
||||||
os: { name: undefined, version: undefined }
|
os: { name: undefined, version: undefined }
|
||||||
});
|
});
|
||||||
done();
|
done();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user