105 lines
2.9 KiB
JavaScript
105 lines
2.9 KiB
JavaScript
'use strict';
|
|
|
|
var mockfs = require('./mockfs');
|
|
var mbgl = require('../index');
|
|
var test = require('tape');
|
|
|
|
var firstRequest = "mapbox://sprites/mapbox/streets-v9@2x.json";
|
|
|
|
var params = {
|
|
mapPoolSize: 10,
|
|
numRenderings: 1000,
|
|
failurePercentage: 10,
|
|
timeoutPercentage: 10,
|
|
renderingTimeout: 5000,
|
|
ratio: 2
|
|
};
|
|
|
|
test('Benchmark', function(t) {
|
|
console.time('Time');
|
|
|
|
var renderCount = 0;
|
|
var failureCount = 0;
|
|
var cancelCount = 0;
|
|
|
|
var options = {
|
|
request: function(req, callback) {
|
|
setTimeout(function() {
|
|
var num = Math.floor(Math.random() * 100);
|
|
|
|
if (req.url == firstRequest && num < params.failurePercentage) {
|
|
callback(new Error('Failure'));
|
|
} else if (req.url == firstRequest && num > 99 - params.timeoutPercentage) {
|
|
setTimeout(function() { callback(new Error('Timeout')); }, params.renderingTimeout * 5);
|
|
} else {
|
|
var data = mockfs.dataForRequest(req);
|
|
callback(null, { data: mockfs.dataForRequest(req) });
|
|
}
|
|
}, 0);
|
|
},
|
|
ratio: params.ratio,
|
|
};
|
|
|
|
var mapPool = []
|
|
|
|
for (var i = 0; i < params.mapPoolSize; ++i) {
|
|
var map = new mbgl.Map(options);
|
|
mapPool.push(map);
|
|
}
|
|
|
|
var interval = setInterval(function () {
|
|
if (mapPool.length == 0 || renderCount == params.numRenderings) {
|
|
return;
|
|
}
|
|
|
|
var map = mapPool.shift();
|
|
|
|
map.load('{ "version": 8, "sources": {}, "layers": [] }');
|
|
map.load(mockfs.style_vector);
|
|
|
|
renderCount += 1;
|
|
|
|
if (renderCount % (params.numRenderings / 100) == 0) {
|
|
// Print some progress, so slow build bots don't timeout.
|
|
t.comment('Rendering (' + renderCount.toString() +
|
|
'/' + params.numRenderings.toString() + ')');
|
|
}
|
|
|
|
if (renderCount == params.numRenderings) {
|
|
clearInterval(interval);
|
|
t.end();
|
|
console.timeEnd('Time');
|
|
console.log('Failures: ' + failureCount);
|
|
console.log('Canceled: ' + cancelCount);
|
|
|
|
return;
|
|
}
|
|
|
|
var mapTimeout = setTimeout(function() {
|
|
map.cancel();
|
|
}, params.renderingTimeout);
|
|
|
|
map.render({ zoom: 16 }, function(err, pixels) {
|
|
clearTimeout(mapTimeout);
|
|
|
|
if (err) {
|
|
if (err.message == 'Failure') {
|
|
failureCount += 1;
|
|
}
|
|
|
|
if (err.message == 'Canceled') {
|
|
cancelCount += 1;
|
|
}
|
|
|
|
// We cancel the request before it gets a
|
|
// timeout error from the file source.
|
|
if (err.message == 'Timeout') {
|
|
t.fail('should never happen');
|
|
}
|
|
}
|
|
|
|
mapPool.push(map);
|
|
});
|
|
}, 1);
|
|
});
|