|
var fs = require('fs'); |
|
var Overlay = require('tilelive-overlay'); |
|
var bytes = require('bytes'); |
|
var queue = require('queue-async'); |
|
|
|
var collect_memstats = true; |
|
|
|
function render(stats,filename,callback) { |
|
new Overlay('overlaydata://' + fs.readFileSync(filename, 'utf8'), |
|
function(err, source) { |
|
var q = queue(4); |
|
for (var i = 0; i < 16; i++) q.defer(function(done) { |
|
source.getTile(0,0,0, function(err,image) { |
|
if (err) throw err; |
|
done(); |
|
}); |
|
}); |
|
q.awaitAll(function() { |
|
stats.count++; |
|
if (collect_memstats) { |
|
var mem = process.memoryUsage() |
|
if (mem.rss > stats.max_rss) stats.max_rss = mem.rss |
|
if (mem.heapUsed > stats.max_heap) stats.max_heap = mem.heapUsed |
|
} |
|
callback(null); |
|
}); |
|
} |
|
); |
|
} |
|
|
|
function test(concurrency,iterations) { |
|
var stats = { |
|
count:0, |
|
max_rss:0, |
|
max_heap:0 |
|
} |
|
var q = queue(concurrency); |
|
for (var i=0;i<iterations;i++) { |
|
q.defer(render,stats,'./example.geojson'); |
|
} |
|
console.time("total time"); |
|
q.awaitAll(function(error, results) { |
|
if (error) throw error; |
|
if (iterations != stats.count) { |
|
throw new Error("did not fully finish " + iterations + " " + stats.count); |
|
} |
|
console.log("iterations: " + iterations) |
|
console.log("concurrency: " + concurrency) |
|
if (collect_memstats) { |
|
console.log("max mem: " + bytes(stats.max_rss) + '/' + stats.max_rss); |
|
console.log("max heap: " + bytes(stats.max_heap)); |
|
} |
|
console.timeEnd("total time"); |
|
console.log('---------------------') |
|
}); |
|
}; |
|
|
|
if (!process.argv[2]) { |
|
console.log('please pass concurrency as first arg'); |
|
process.exit(-1) |
|
} |
|
if (!process.argv[3]) { |
|
console.log('please pass iterations as second arg'); |
|
process.exit(-1) |
|
} |
|
test(+process.argv[2],+process.argv[3]) |