Skip to content

Commit

Permalink
Move filter unit benchmark into benchmarks system
Browse files Browse the repository at this point in the history
  • Loading branch information
anandthakker committed Sep 1, 2017
1 parent 2a9381a commit 7ea5d6c
Show file tree
Hide file tree
Showing 6 changed files with 93 additions and 60 deletions.
1 change: 1 addition & 0 deletions bench/benchmarks.js
Expand Up @@ -18,6 +18,7 @@ registerBenchmark('query-point', require('./benchmarks/query_point'));
registerBenchmark('query-box', require('./benchmarks/query_box'));
registerBenchmark('geojson-setdata-small', require('./benchmarks/geojson_setdata_small'));
registerBenchmark('geojson-setdata-large', require('./benchmarks/geojson_setdata_large'));
registerBenchmark('filter', require('./benchmarks/filter'));

// Ensure the global worker pool is never drained. Browsers have resource limits
// on the max number of workers that can be created per page.
Expand Down
92 changes: 92 additions & 0 deletions bench/benchmarks/filter.js
@@ -0,0 +1,92 @@
'use strict';

const VectorTile = require('@mapbox/vector-tile').VectorTile;
const Pbf = require('pbf');
const Evented = require('../../src/util/evented');
const createFilter = require('../../src/style-spec/feature_filter');
const formatNumber = require('../lib/format_number');
const ajax = require('../../src/util/ajax');
const filters = require('../data/filters.json');

const NRepeat = 100;

module.exports = function () {
const evented = new Evented();

ajax.getArrayBuffer({url: 'data/785.vector.pbf'}, (err, response) => {
if (err) {
return evented.fire('error', err);
}
const assets = {
tile: new VectorTile(new Pbf(response.data))
};
run(evented, assets);
});

return evented;
};

function run (evented, assets) {
const tile = assets.tile;
const results = [['task', 'iteration', 'time']];
const layers = [];
for (const name in tile.layers) {
const layer = tile.layers[name];
if (!layer.length) continue;

const features = [];
for (let j = 0; j < layer.length; j++) {
features.push(layer.feature(j));
}

const layerFilters = [];
for (let j = 0; j < filters.length; j++) {
if (filters[j].layer === name) layerFilters.push(filters[j].filter);
}

layers.push({
name: name,
features: features,
rawFilters: layerFilters
});
}

let start = performance.now();
let created = 0;
for (let m = 0; m < NRepeat; m++) {
for (let i = 0; i < layers.length; i++) {
const layer = layers[i];
layer.filters = [];
for (let j = 0; j < layer.rawFilters.length; j++) {
layer.filters.push(createFilter(layer.rawFilters[j]));
results.push(['create', ++created, performance.now() - start]);
}
}
}

evented.fire('log', {message: `Create filter: ${formatNumber(performance.now() - start)}ms (${created} iterations)`});

start = performance.now();
let applied = 0;
for (let m = 0; m < NRepeat; m++) {
for (let i = 0; i < layers.length; i++) {
const layer = layers[i];
for (let j = 0; j < layer.filters.length; j++) {
const filter = layer.filters[j];
for (let k = 0; k < layer.features.length; k++) {
const feature = layer.features[k];
if (typeof filter(feature) !== 'boolean') {
evented.fire('error', {message: 'Expected boolean result from filter'});
break;
}
++applied;
}
results.push(['apply', applied, performance.now() - start]);
}
}
}

evented.fire('log', {message: `Apply filter: ${formatNumber(performance.now() - start)}ms (${applied} iterations)`});

evented.fire('end', {message: 'Done', samples: results});
}
File renamed without changes.
File renamed without changes.
59 changes: 0 additions & 59 deletions bench/unit/feature_filter/bench.js

This file was deleted.

1 change: 0 additions & 1 deletion src/style-spec/feature_filter/index.js
@@ -1,4 +1,3 @@

module.exports = createFilter;

const types = ['Unknown', 'Point', 'LineString', 'Polygon'];
Expand Down

0 comments on commit 7ea5d6c

Please sign in to comment.