in 2019/media/webglTest.js [24:143]
var WebglTest = function() {
var webkitPrefix = MediaSource.prototype.version.indexOf('webkit') >= 0;
var tests = [];
var info = 'No MSE Support!';
if (window.MediaSource) {
info = 'webkit prefix: ' + webkitPrefix.toString();
}
info += ' | Default Timeout: ' + TestBase.timeout + 'ms';
var fields = ['passes', 'failures', 'timeouts'];
var createWebglTest = function(name, category, mandatory) {
var t = createTest(name);
t.prototype.index = tests.length;
t.prototype.passes = 0;
t.prototype.failures = 0;
t.prototype.timeouts = 0;
t.prototype.category = category || 'WebGL';
if (typeof mandatory === 'boolean') {
t.prototype.mandatory = mandatory;
} else {
t.prototype.mandatory = harnessConfig.support_webgl;
}
tests.push(t);
return t;
};
function setupWebglTest(video, runner, videoStream) {
setupMse(video, runner, videoStream, null);
// Create canvas in testarea.
var testarea = document.getElementById('testarea');
var canvas = util.createElement('canvas', 'canvas1');
testarea.appendChild(canvas);
return new WebglHandler(video, canvas);
}
/**
* Ensure WebGL performance of given video format by comparing the playback
* frame rate with threshold values.
*/
var createWebglPerformanceTest = function(videoStream) {
var test = createWebglTest('WebGLPerformance' + '.' + videoStream.codec +
'.' + videoStream.get('resolution') + videoStream.get('fps'),
'WebGL Performance ' + videoStream.codec);
test.prototype.title = 'Test WebGL performance.';
test.prototype.start = function(runner, video) {
if (video['webkitDecodedFrameCount'] === undefined) {
runner.fail('UserAgent needs to support ' +
'\'video.webkitDecodedFrameCount\' to execute this test.');
}
var webglHandler = setupWebglTest(video, runner, videoStream);
video.addEventListener('timeupdate', function onTimeUpdate(e) {
test.prototype.status =
'(' + webglHandler.getVideoFrameRate().toFixed(2) + ', ' +
webglHandler.getWebglFrameRate().toFixed(2) + ')';
runner.updateStatus();
if (!video.paused && video.currentTime >= 15) {
video.removeEventListener('timeupdate', onTimeUpdate);
video.pause();
if (webglHandler.getVideoFrameRate() < 0 ||
webglHandler.getWebglFrameRate() < 0) {
test.prototype.status = 'Fail';
runner.fail('UserAgent was unable to render any frames.');
}
// Screen refresh rates are capped at 60 so we shouldn't expect greater
// than 60 fps perfomance.
if (videoStream.get('fps') < 56) {
var threshold = 0.994;
runner.checkGE(webglHandler.getVideoFrameRate(),
videoStream.get('fps') * threshold, 'Video frame rate');
runner.checkGE(webglHandler.getWebglFrameRate(),
videoStream.get('fps') * threshold, 'WebGL frame rate');
} else {
runner.checkGE(
webglHandler.getVideoFrameRate(), 56, 'Video frame rate');
runner.checkGE(
webglHandler.getWebglFrameRate(), 56, 'WebGL frame rate');
}
runner.succeed();
}
});
webglHandler.play();
};
};
createWebglPerformanceTest(Media.VP9.Webgl144p30fps);
createWebglPerformanceTest(Media.VP9.Webgl240p30fps);
createWebglPerformanceTest(Media.VP9.Webgl360p30fps);
createWebglPerformanceTest(Media.VP9.Webgl480p30fps);
createWebglPerformanceTest(Media.VP9.Webgl720p30fps);
createWebglPerformanceTest(Media.VP9.Webgl720p60fps);
createWebglPerformanceTest(Media.VP9.Webgl1080p30fps);
createWebglPerformanceTest(Media.VP9.Webgl1080p60fps);
createWebglPerformanceTest(Media.VP9.Webgl1440p30fps);
createWebglPerformanceTest(Media.VP9.Webgl1440p60fps);
createWebglPerformanceTest(Media.VP9.Webgl2160p30fps);
createWebglPerformanceTest(Media.VP9.Webgl2160p60fps);
createWebglPerformanceTest(Media.H264.Webgl144p15fps);
createWebglPerformanceTest(Media.H264.Webgl240p30fps);
createWebglPerformanceTest(Media.H264.Webgl360p30fps);
createWebglPerformanceTest(Media.H264.Webgl480p30fps);
createWebglPerformanceTest(Media.H264.Webgl720p30fps);
createWebglPerformanceTest(Media.H264.Webgl720p60fps);
createWebglPerformanceTest(Media.H264.Webgl1080p30fps);
createWebglPerformanceTest(Media.H264.Webgl1080p60fps);
createWebglPerformanceTest(Media.H264.Webgl1440p30fps);
createWebglPerformanceTest(Media.H264.Webgl2160p30fps);
return {
tests: tests,
info: info,
fields: fields,
viewType: 'expanded-test-status'
};
};