diff --git a/bench/README.md b/bench/README.md index e89e251b1bf..9429bcf6045 100644 --- a/bench/README.md +++ b/bench/README.md @@ -4,6 +4,10 @@ Benchmarks help us catch performance regressions and improve performance. ## Running a Benchmark +Download the benchmark data + +`npm run get-benchmark-data` + Start the benchmark server ```bash diff --git a/bench/buffer_benchmark.js b/bench/benchmarks/buffer.js similarity index 93% rename from bench/buffer_benchmark.js rename to bench/benchmarks/buffer.js index 702033f2a17..84a388c72f7 100644 --- a/bench/buffer_benchmark.js +++ b/bench/benchmarks/buffer.js @@ -4,14 +4,14 @@ var VT = require('vector-tile'); var Protobuf = require('pbf'); var assert = require('assert'); -var WorkerTile = require('../js/source/worker_tile'); -var ajax = require('../js/util/ajax'); -var Style = require('../js/style/style'); -var util = require('../js/util/util'); -var Evented = require('../js/util/evented'); -var config = require('../js/util/config'); -var coordinates = require('./coordinates'); -var formatNumber = require('./format_number'); +var WorkerTile = require('../../js/source/worker_tile'); +var ajax = require('../../js/util/ajax'); +var Style = require('../../js/style/style'); +var util = require('../../js/util/util'); +var Evented = require('../../js/util/evented'); +var config = require('../../js/util/config'); +var coordinates = require('../lib/coordinates'); +var formatNumber = require('../lib/format_number'); var SAMPLE_COUNT = 10; diff --git a/bench/fps_benchmark.js b/bench/benchmarks/fps.js similarity index 55% rename from bench/fps_benchmark.js rename to bench/benchmarks/fps.js index e89b1e79e90..3dbc9d36286 100644 --- a/bench/fps_benchmark.js +++ b/bench/benchmarks/fps.js @@ -1,8 +1,9 @@ 'use strict'; -var Evented = require('../js/util/evented'); -var util = require('../js/util/util'); -var formatNumber = require('./format_number'); +var Evented = require('../../js/util/evented'); +var util = require('../../js/util/util'); +var formatNumber = require('../lib/format_number'); +var measureFramerate = require('../lib/measure_framerate'); var DURATION_MILLISECONDS = 5 * 1000; @@ -12,7 +13,7 @@ module.exports = function(options) { var map = options.createMap({ width: 1024, height: 768, - zoom: 15, + zoom: 5, center: [-77.032194, 38.912753], style: 'mapbox://styles/mapbox/bright-v8' }); @@ -37,28 +38,5 @@ module.exports = function(options) { }); }); - - setTimeout(function() { - evented.fire('log', { - message: 'loading assets', - color: 'dark' - }); - }, 0); - return evented; }; - -function measureFramerate(duration, callback) { - var startTime = performance.now(); - var count = 0; - - requestAnimationFrame(function onAnimationFrame() { - count++; - if (performance.now() < startTime + duration) { - requestAnimationFrame(onAnimationFrame); - } else { - var endTime = performance.now(); - callback(null, count / (endTime - startTime) * 1000); - } - }); -} diff --git a/bench/benchmarks/geojson_setdata_large.js b/bench/benchmarks/geojson_setdata_large.js new file mode 100644 index 00000000000..09070daa1f9 --- /dev/null +++ b/bench/benchmarks/geojson_setdata_large.js @@ -0,0 +1,35 @@ +'use strict'; + +var Evented = require('../../js/util/evented'); +var util = require('../../js/util/util'); +var formatNumber = require('../lib/format_number'); +var setDataPerf = require('../lib/set_data_perf'); +var setupGeoJSONMap = require('../lib/setup_geojson_map'); + +var featureCollection = require('../data/naturalearth-land.json'); + +module.exports = function(options) { + var evented = util.extend({}, Evented); + + var map = options.createMap({ + width: 1024, + height: 768, + zoom: 5, + center: [-77.032194, 38.912753], + style: 'mapbox://styles/mapbox/bright-v8' + }); + + map.on('load', function() { + map = setupGeoJSONMap(map); + + var source = map.getSource('geojson'); + + evented.fire('log', {message: 'loading large feature collection'}); + setDataPerf(source, 50, featureCollection, function(err, ms) { + if (err) return evented.fire('error', {error: err}); + evented.fire('end', {message: 'average load time: ' + formatNumber(ms) + ' ms', score: ms}); + }); + }); + + return evented; +}; diff --git a/bench/benchmarks/geojson_setdata_small.js b/bench/benchmarks/geojson_setdata_small.js new file mode 100644 index 00000000000..87dc6eaaef2 --- /dev/null +++ b/bench/benchmarks/geojson_setdata_small.js @@ -0,0 +1,45 @@ +'use strict'; + +var Evented = require('../../js/util/evented'); +var util = require('../../js/util/util'); +var formatNumber = require('../lib/format_number'); +var setDataPerf = require('../lib/set_data_perf'); +var setupGeoJSONMap = require('../lib/setup_geojson_map'); + +var featureCollection = { + 'type': 'FeatureCollection', + 'features': [{ + 'type': 'Feature', + 'properties': {}, + 'geometry': { + 'type': 'Point', + 'coordinates': [ -77.032194, 38.912753 ] + } + }] +}; + +module.exports = function(options) { + var evented = util.extend({}, Evented); + + var map = options.createMap({ + width: 1024, + height: 768, + zoom: 5, + center: [-77.032194, 38.912753], + style: 'mapbox://styles/mapbox/bright-v8' + }); + + map.on('load', function() { + map = setupGeoJSONMap(map); + + var source = map.getSource('geojson'); + + evented.fire('log', {message: 'loading small feature collection'}); + setDataPerf(source, 50, featureCollection, function(err, ms) { + if (err) return evented.fire('error', {error: err}); + evented.fire('end', {message: 'average load time: ' + formatNumber(ms) + ' ms', score: ms}); + }); + }); + + return evented; +}; diff --git a/bench/query_box_benchmark.js b/bench/benchmarks/query_box.js similarity index 95% rename from bench/query_box_benchmark.js rename to bench/benchmarks/query_box.js index 9272bd9c912..2a616ed5b2b 100644 --- a/bench/query_box_benchmark.js +++ b/bench/benchmarks/query_box.js @@ -1,7 +1,7 @@ 'use strict'; -var Evented = require('../js/util/evented'); -var util = require('../js/util/util'); +var Evented = require('../../js/util/evented'); +var util = require('../../js/util/util'); var width = 1024; var height = 768; diff --git a/bench/query_point_benchmark.js b/bench/benchmarks/query_point.js similarity index 96% rename from bench/query_point_benchmark.js rename to bench/benchmarks/query_point.js index 69ee6659b4e..ab63b168a50 100644 --- a/bench/query_point_benchmark.js +++ b/bench/benchmarks/query_point.js @@ -1,7 +1,7 @@ 'use strict'; -var Evented = require('../js/util/evented'); -var util = require('../js/util/util'); +var Evented = require('../../js/util/evented'); +var util = require('../../js/util/util'); var width = 1024; var height = 768; diff --git a/bench/data/.gitignore b/bench/data/.gitignore new file mode 100644 index 00000000000..d6b7ef32c84 --- /dev/null +++ b/bench/data/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/bench/index.html b/bench/index.html index bc5737e3059..9b346bd4175 100644 --- a/bench/index.html +++ b/bench/index.html @@ -1,7 +1,7 @@ - Mapbox GL JS Buffer Benchmark + Mapbox GL JS Benchmarks @@ -10,6 +10,14 @@