Remove memory leak caused by label cache listeners

This commit is contained in:
ahocevar
2019-05-16 20:33:20 +02:00
parent 442fbb13d2
commit 335648d613
11 changed files with 71 additions and 136 deletions
@@ -53,6 +53,13 @@ class CanvasVectorImageLayerRenderer extends CanvasImageLayerRenderer {
super.disposeInternal();
}
/**
* @inheritDoc
*/
handleFontsChanged() {
this.vectorRenderer_.handleFontsChanged();
}
/**
* @inheritDoc
*/
+2 -15
View File
@@ -3,10 +3,7 @@
*/
import {getUid} from '../../util.js';
import ViewHint from '../../ViewHint.js';
import {listen, unlisten} from '../../events.js';
import EventType from '../../events/EventType.js';
import {buffer, createEmpty, containsExtent, getWidth} from '../../extent.js';
import {labelCache} from '../../render/canvas.js';
import CanvasBuilderGroup from '../../render/canvas/BuilderGroup.js';
import ExecutorGroup, {replayDeclutter} from '../../render/canvas/ExecutorGroup.js';
import CanvasLayerRenderer from './Layer.js';
@@ -68,16 +65,6 @@ class CanvasVectorLayerRenderer extends CanvasLayerRenderer {
* @type {boolean}
*/
this.replayGroupChanged = true;
listen(labelCache, EventType.CLEAR, this.handleFontsChanged_, this);
}
/**
* @inheritDoc
*/
disposeInternal() {
unlisten(labelCache, EventType.CLEAR, this.handleFontsChanged_, this);
super.disposeInternal();
}
/**
@@ -211,9 +198,9 @@ class CanvasVectorLayerRenderer extends CanvasLayerRenderer {
}
/**
* @param {import("../../events/Event.js").default} event Event.
* @inheritDoc
*/
handleFontsChanged_(event) {
handleFontsChanged() {
const layer = this.getLayer();
if (layer.getVisible() && this.replayGroup_) {
layer.changed();
+3 -8
View File
@@ -5,12 +5,11 @@ import {getUid} from '../../util.js';
import {createCanvasContext2D} from '../../dom.js';
import TileState from '../../TileState.js';
import ViewHint from '../../ViewHint.js';
import {listen, unlisten, unlistenByKey} from '../../events.js';
import {listen, unlistenByKey} from '../../events.js';
import EventType from '../../events/EventType.js';
import {buffer, containsCoordinate, equals, getIntersection, intersects} from '../../extent.js';
import VectorTileRenderType from '../../layer/VectorTileRenderType.js';
import ReplayType from '../../render/canvas/BuilderType.js';
import {labelCache} from '../../render/canvas.js';
import CanvasBuilderGroup from '../../render/canvas/BuilderGroup.js';
import CanvasTileLayerRenderer from './TileLayer.js';
import {getSquaredTolerance as getSquaredRenderTolerance, renderFeature} from '../vector.js';
@@ -132,16 +131,12 @@ class CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer {
// Use nearest lower resolution.
this.zDirection = 1;
listen(labelCache, EventType.CLEAR, this.handleFontsChanged_, this);
}
/**
* @inheritDoc
*/
disposeInternal() {
unlisten(labelCache, EventType.CLEAR, this.handleFontsChanged_, this);
this.overlayContext_.canvas.width = this.overlayContext_.canvas.height = 0;
super.disposeInternal();
}
@@ -363,9 +358,9 @@ class CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer {
}
/**
* @param {import("../../events/Event.js").default} event Event.
* @inheritDoc
*/
handleFontsChanged_(event) {
handleFontsChanged() {
const layer = this.getLayer();
if (layer.getVisible() && this.renderedLayerRevision_ !== undefined) {
layer.changed();