summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThiago Marcos P. Santos <thiago@mapbox.com>2016-06-27 13:42:14 +0300
committerMike Morris <mikemorris@users.noreply.github.com>2016-07-13 00:02:14 -0400
commit5a91245ec43f682a0559668efdf6ea8d578de04d (patch)
tree7be799b084f719d6d5ffb977aee13b2afae54272
parenta73c81cc55671c8f3f5916c310353a22d6a6f231 (diff)
downloadqtlocation-mapboxgl-5a91245ec43f682a0559668efdf6ea8d578de04d.tar.gz
[node] Added memory test
-rw-r--r--platform/node/test/js/memory.test.js106
1 files changed, 106 insertions, 0 deletions
diff --git a/platform/node/test/js/memory.test.js b/platform/node/test/js/memory.test.js
new file mode 100644
index 0000000000..536342a649
--- /dev/null
+++ b/platform/node/test/js/memory.test.js
@@ -0,0 +1,106 @@
+'use strict';
+
+var fs = require('fs');
+var mbgl = require('../../../../lib/mapbox-gl-native');
+var path = require('path');
+var test = require('tape');
+
+var testParams = {
+ mapPoolSize: 10,
+ numRenderings: 30,
+ heapGrowthThreshould: 256 * 1024, // 256 KB
+
+ ratio: 2,
+};
+
+function readFixture(file) {
+ return fs.readFileSync(path.join('test/fixtures/resources', file));
+}
+
+var style_raster = readFixture('style_raster.json').toString('utf8');
+var style_vector = readFixture('style_vector.json').toString('utf8');
+var sprite_json = readFixture('sprite.json');
+var sprite_png = readFixture('sprite.png');
+var glyph = readFixture('glyphs.pbf');
+var source_raster = readFixture('source_raster.json');
+var source_vector = readFixture('source_vector.json');
+var tile_raster = readFixture('raster.tile');
+var tile_vector = readFixture('vector.tile');
+
+test('Memory', function(t) {
+ var options = {
+ request: function(req, callback) {
+ if (req.url == null) {
+ t.fail('invalid file request');
+ } else if (req.url.indexOf('sprite') > -1 && req.url.endsWith('json')) {
+ callback(null, { data: sprite_json });
+ } else if (req.url.indexOf('sprite') > -1 && req.url.endsWith('png')) {
+ callback(null, { data: sprite_png });
+ } else if (req.url.indexOf('fonts') > -1 && req.url.endsWith('pbf')) {
+ callback(null, { data: glyph });
+ } else if (req.url.endsWith('mapbox.satellite')) {
+ callback(null, { data: source_raster });
+ } else if (req.url.indexOf('satellite') > -1 && req.url.endsWith('png')) {
+ callback(null, { data: tile_raster });
+ } else if (req.url.endsWith('mapbox.mapbox-streets-v7')) {
+ callback(null, { data: source_vector });
+ } else if (req.url.indexOf('streets') > -1 && req.url.endsWith('pbf')) {
+ callback(null, { data: tile_vector });
+ } else {
+ t.fail('unhandled file request: ' + req.url);
+ }
+ },
+ ratio: testParams.ratio,
+ };
+
+ var mapPool = []
+
+ for (var i = 0; i < testParams.mapPoolSize; ++i) {
+ var map = new mbgl.Map(options);
+ mapPool.push(map);
+ }
+
+ var renderCount = 0;
+ var heapGrowth = 0;
+ var lastHeapSize = 0;
+
+ var interval = setInterval(function () {
+ if (mapPool.length == 0) {
+ return;
+ }
+
+ var map = mapPool.shift();
+
+ if (Math.floor(Math.random() * 2)) {
+ map.load(style_raster);
+ } else {
+ map.load(style_vector);
+ }
+
+ map.render({ zoom: 16 }, function(err, pixels) {
+ mapPool.push(map);
+
+ if (renderCount % (testParams.numRenderings / 10) == 0) {
+ var currentHeapSize = process.memoryUsage()['heapUsed'];
+
+ // Print some progress, so slow build bots don't timeout.
+ t.comment("Rendering (" + renderCount.toString() +
+ "/" + testParams.numRenderings.toString() + ")");
+
+ if (lastHeapSize == 0) {
+ lastHeapSize = currentHeapSize;
+ }
+
+ heapGrowth = heapGrowth + currentHeapSize - lastHeapSize;
+ lastHeapSize = currentHeapSize;
+ }
+
+ if (++renderCount == testParams.numRenderings) {
+ t.ok(heapGrowth < testParams.heapGrowthThreshould, heapGrowth);
+ t.end();
+
+ clearInterval(interval);
+ }
+ });
+ }, 1);
+});