Merge pull request #222 from otsaloma/renderer-pool-sizes
Make raster tile renderer pool sizes configurable
This commit is contained in:
commit
51d6ca0880
2 changed files with 29 additions and 11 deletions
|
@ -95,6 +95,27 @@ Maximum image side length to be allowed to be rendered (including scale factor).
|
||||||
Be careful when changing this value since there are hardware limits that need to be considered.
|
Be careful when changing this value since there are hardware limits that need to be considered.
|
||||||
Default is ``2048``.
|
Default is ``2048``.
|
||||||
|
|
||||||
|
``minRendererPoolSizes``
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
Minimum amount of raster tile renderers per scale factor.
|
||||||
|
The value is an array: the first element is the minimum amount of renderers for scale factor one, the second for scale factor two and so on.
|
||||||
|
If the array has less elements than ``maxScaleFactor``, then the last element is used for all remaining scale factors as well.
|
||||||
|
Selecting renderer pool sizes is a trade-off between memory use and speed.
|
||||||
|
A reasonable value will depend on your hardware and your amount of styles and scale factors.
|
||||||
|
If you have plenty of memory, you'll want to set this equal to ``maxRendererPoolSizes`` to avoid increased latency due to renderer destruction and recreation.
|
||||||
|
If you need to conserve memory, you'll want something lower than ``maxRendererPoolSizes``, possibly allocating more renderers to scale factors that are more common.
|
||||||
|
Default is ``[8, 4, 2]``.
|
||||||
|
|
||||||
|
``maxRendererPoolSizes``
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
Maximum amount of raster tile renderers per scale factor.
|
||||||
|
The value and considerations are similar to ``minRendererPoolSizes`` above.
|
||||||
|
If you have plenty of memory, try setting these equal to or slightly above your processor count, e.g. if you have four processors, try a value of ``[6]``.
|
||||||
|
If you need to conserve memory, try lower values for scale factors that are less common.
|
||||||
|
Default is ``[16, 8, 4]``.
|
||||||
|
|
||||||
``watermark``
|
``watermark``
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
|
|
|
@ -344,18 +344,15 @@ module.exports = function(options, repo, params, id, dataResolver) {
|
||||||
});
|
});
|
||||||
|
|
||||||
var renderersReadyPromise = Promise.all(queue).then(function() {
|
var renderersReadyPromise = Promise.all(queue).then(function() {
|
||||||
// TODO: make pool sizes configurable
|
// standard and @2x tiles are much more usual -> default to larger pools
|
||||||
|
var minPoolSizes = options.minRendererPoolSizes || [8, 4, 2];
|
||||||
|
var maxPoolSizes = options.maxRendererPoolSizes || [16, 8, 4];
|
||||||
for (var s = 1; s <= maxScaleFactor; s++) {
|
for (var s = 1; s <= maxScaleFactor; s++) {
|
||||||
var minPoolSize = 2;
|
var i = Math.min(minPoolSizes.length - 1, s - 1);
|
||||||
|
var j = Math.min(maxPoolSizes.length - 1, s - 1);
|
||||||
// standard and @2x tiles are much more usual -> create larger pools
|
var minPoolSize = minPoolSizes[i];
|
||||||
if (s <= 2) {
|
var maxPoolSize = Math.max(minPoolSize, maxPoolSizes[j]);
|
||||||
minPoolSize *= 2;
|
map.renderers[s] = createPool(s, minPoolSize, maxPoolSize);
|
||||||
if (s <= 1) {
|
|
||||||
minPoolSize *= 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
map.renderers[s] = createPool(s, minPoolSize, 2 * minPoolSize);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue