Compare commits

...

5 Commits

Author SHA1 Message Date
Faisal Salman
e9c651dbd6 Merge branch 'master' into gpu-detect-experimental 2019-06-08 22:13:47 +07:00
Faisal Salman
b0cf91aa4f Untested: use at your own risk 2018-12-10 02:51:31 +07:00
Faisal Salman
860189d048 Update readme: mention setRenderer() 2018-12-10 02:46:50 +07:00
Faisal Salman
437d05a653 Update readme to include getGPU() method 2018-12-10 02:35:58 +07:00
Faisal Salman
b29e74d61c Experimental: GPU detection #322 2018-12-09 14:48:11 +07:00
4 changed files with 139 additions and 4 deletions

View File

@@ -18,7 +18,7 @@
* returns new instance
* `UAParser([uastring][,extensions])`
* returns result object `{ ua: '', browser: {}, cpu: {}, device: {}, engine: {}, os: {} }`
* returns result object `{ ua: '', browser: {}, cpu: {}, device: {}, engine: {}, gpu: {}, os: {} }`
# Methods
@@ -94,12 +94,26 @@ Ubuntu, Unix, VectorLinux, WebOS, Windows [Phone/Mobile], Zenwalk, ...
68k, amd64, arm[64], avr, ia[32/64], irix[64], mips[64], pa-risc, ppc, sparc[64]
```
* `getGPU()`
* returns `{ vendor: '', model: '' }`
```sh
# Possible 'gpu.vendor'
ATI, Intel, NVIDIA, Qualcomm, SiS
# 'gpu.model' determined dynamically
```
* `getResult()`
* returns `{ ua: '', browser: {}, cpu: {}, device: {}, engine: {}, os: {} }`
* `getUA()`
* returns UA string of current instance
* `setRenderer(rendererstr)`
* set Renderer string to parse
* returns current instance
* `setUA(uastring)`
* set UA string to parse
* returns current instance
@@ -141,6 +155,10 @@ Ubuntu, Unix, VectorLinux, WebOS, Windows [Phone/Mobile], Zenwalk, ...
},
cpu: {
architecture: ""
},
gpu: {
vendor: "",
model: ""
}
}
*/

View File

@@ -683,6 +683,20 @@
], [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 : [[
// Windows based
@@ -773,6 +787,14 @@
var ua = uastring || ((window && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);
var rgxmap = extensions ? util.extend(regexes, extensions) : regexes;
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 && gl.getExtension && gl.getExtension('WEBGL_debug_renderer_info') ? gl.getParameter(gl.getExtension('WEBGL_debug_renderer_info').UNMASKED_RENDERER_WEBGL) : undefined;
}
this.getBrowser = function () {
var browser = { name: undefined, version: undefined };
mapper.rgx.call(browser, ua, rgxmap.browser);
@@ -794,6 +816,13 @@
mapper.rgx.call(engine, ua, rgxmap.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 () {
var os = { name: undefined, version: undefined };
mapper.rgx.call(os, ua, rgxmap.os);
@@ -806,12 +835,17 @@
engine : this.getEngine(),
os : this.getOS(),
device : this.getDevice(),
cpu : this.getCPU()
cpu : this.getCPU(),
gpu : this.getGPU()
};
};
this.getUA = function () {
return ua;
};
this.setRenderer = function (rendererstr) {
renderer = rendererstr;
return this;
};
this.setUA = function (uastring) {
ua = uastring;
return this;
@@ -828,6 +862,10 @@
UAParser.CPU = {
ARCHITECTURE : ARCHITECTURE
};
UAParser.GPU = {
MODEL : MODEL,
VENDOR : VENDOR
};
UAParser.DEVICE = {
MODEL : MODEL,
VENDOR : VENDOR,

56
test/gpu-test.json Normal file
View 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"
}
}
]

View File

@@ -5,6 +5,7 @@ var browsers = require('./browser-test.json');
var cpus = require('./cpu-test.json');
var devices = require('./device-test.json');
var engines = require('./engine-test.json');
var gpus = require('./gpu-test.json');
var os = require('./os-test.json');
var parser = new UAParser();
var methods = [
@@ -32,6 +33,12 @@ var methods = [
list : engines,
properties : ['name', 'version']
},
{
title : 'getGPU',
label : 'gpu',
list : gpus,
properties : ['model', 'vendor']
},
{
title : 'getOS',
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';
assert.deepEqual(UAParser(ua), new UAParser().setUA(ua).getResult());
});
/*
for (var i in methods) {
describe(methods[i]['title'], function () {
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 () {
it('getResult() should returns JSON', function(done) {
@@ -74,6 +96,7 @@ describe('Returns', function () {
cpu: { architecture: undefined },
device: { vendor: undefined, model: undefined, type: undefined },
engine: { name: undefined, version: undefined},
gpu: { vendor: undefined, model: undefined},
os: { name: undefined, version: undefined }
});
done();