Skip to content

Commit

Permalink
Merge pull request #1081 from VisActor/fix/memory-leak
Browse files Browse the repository at this point in the history
Fix/memory leak
  • Loading branch information
xile611 authored Mar 19, 2024
2 parents fee289b + 1f0502b commit 5b9c7ad
Show file tree
Hide file tree
Showing 6 changed files with 29 additions and 6 deletions.
4 changes: 4 additions & 0 deletions packages/vrender-core/src/core/layer-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -118,4 +118,8 @@ export class DefaultLayerService implements ILayerService {
}
return 0;
}

releaseStage(stage: IStage) {
this.layerMap.delete(stage);
}
}
5 changes: 5 additions & 0 deletions packages/vrender-core/src/core/stage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -870,7 +870,12 @@ export class Stage extends Group implements IStage {

release() {
super.release();

this.hooks.beforeRender.unTap('constructor', this.beforeRender);
this.hooks.afterRender.unTap('constructor', this.afterRender);

this.eventSystem && this.eventSystem.release();
this.layerService.releaseStage(this);
this.pluginService.release();
this.forEach(layer => {
layer.release();
Expand Down
10 changes: 5 additions & 5 deletions packages/vrender-core/src/core/window.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,13 +82,11 @@ export class DefaultWindow implements IWindow {
}

protected postInit() {
this.global.hooks.onSetEnv.tap('window', () => {
this.active();
});
this.global.hooks.onSetEnv.tap('window', this.active);
this.active();
}

protected active() {
protected active = () => {
const global = this.global;
if (!global.env || this.actived) {
return;
Expand All @@ -99,7 +97,7 @@ export class DefaultWindow implements IWindow {
// handlerContribution.configure(this, this.global);
// });
this.actived = true;
}
};

get style(): CSSStyleDeclaration | Record<string, any> {
return this._handler.getStyle() ?? {};
Expand Down Expand Up @@ -152,6 +150,8 @@ export class DefaultWindow implements IWindow {
throw new Error('暂不支持');
}
release(): void {
this.global.hooks.onSetEnv.unTap('window', this.active);

return this._handler.releaseWindow();
}
getContext(): IContext2d {
Expand Down
9 changes: 9 additions & 0 deletions packages/vrender-core/src/event/event-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -832,4 +832,13 @@ export class EventManager {
}
return target;
}

release() {
this.dispatch.removeAllListeners();
this.eventPool.clear();
this.rootTarget = null;
this.mappingTable = null;
this.mappingState = null;
this.cursorTarget = null;
}
}
6 changes: 5 additions & 1 deletion packages/vrender-core/src/event/event-system.ts
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,11 @@ export class EventSystem {
}

release(): void {
this.setTargetElement(null);
this.removeEvents();
this.manager && this.manager.release();
this.domElement = null;
(this as any).manager = null;
(this as any).globalObj = null;
}

setCursor(mode: string, target: IEventTarget | null | 'ignore'): void {
Expand Down
1 change: 1 addition & 0 deletions packages/vrender-core/src/interface/core.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,5 @@ export interface ILayerService {
restLayerCount: (stage: IStage) => number;
getStageLayer: (stage: IStage) => ILayer[];
layerCount: (stage: IStage) => number;
releaseStage: (stage: IStage) => void;
}

0 comments on commit 5b9c7ad

Please sign in to comment.