From 38ac2b59aa4fcfe639c8dc684ba74393a2a6343e Mon Sep 17 00:00:00 2001 From: David Manthey Date: Tue, 5 Apr 2022 11:12:49 -0400 Subject: [PATCH] perf: Reduce tile layer updates. When updating one tile layer's z index, possibly through adding the layer, other tile layers would needlessly rerender. --- CHANGELOG.md | 6 ++++++ src/webgl/tileLayer.js | 7 +++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f9e9d95a10..768b6afacb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # GeoJS Change Log +## Version 1.8.2 + +### Improvements + +- Reduce tile layer updates ([#1196](../../pull/1196)) + ## Version 1.8.1 ### Improvements diff --git a/src/webgl/tileLayer.js b/src/webgl/tileLayer.js index c5c31f1e34..026c32f4bb 100644 --- a/src/webgl/tileLayer.js +++ b/src/webgl/tileLayer.js @@ -134,7 +134,7 @@ var webgl_tileLayer = function () { * @returns {number|this} */ this.zIndex = function (zIndex, allowDuplicate) { - if (zIndex !== undefined) { + if (zIndex !== undefined && m_this.autoshareRenderer()) { m_this._clearQuads(); } return s_zIndex.apply(m_this, arguments); @@ -148,7 +148,10 @@ var webgl_tileLayer = function () { * triggered this. If `undefined`, clear the quads but don't redraw. */ this._clearQuads = function (evt) { - if (evt && (!evt.layer || !(evt.layer instanceof tileLayer))) { + if (evt && (!evt.layer || !(evt.layer instanceof tileLayer) || ( + (evt.event === geo_event.layerAdd || evt.event === geo_event.layerRemove) && + m_this.map().layers().every(l => l === evt.layer || evt.layer.zIndex() > l.zIndex()) + ))) { return; } m_this.clear();