From 70622782658cf67da5d3fe2ce9b66075119a3017 Mon Sep 17 00:00:00 2001 From: Pavel Feldman Date: Mon, 28 Jun 2021 22:01:08 -0700 Subject: [PATCH] fix(trace): copy cached resources on write (optimization) (#7372) --- src/server/snapshot/snapshotStorage.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/server/snapshot/snapshotStorage.ts b/src/server/snapshot/snapshotStorage.ts index 37dc75487a..7858c7fed9 100644 --- a/src/server/snapshot/snapshotStorage.ts +++ b/src/server/snapshot/snapshotStorage.ts @@ -33,6 +33,7 @@ export abstract class BaseSnapshotStorage extends EventEmitter implements Snapsh renderer: SnapshotRenderer[] }>(); protected _contextResources: ContextResources = new Map(); + private _contextResourcesCopyOnWrite: ContextResources | null = null; clear() { this._resources = []; @@ -42,6 +43,7 @@ export abstract class BaseSnapshotStorage extends EventEmitter implements Snapsh } addResource(resource: ResourceSnapshot): void { + this._contextResourcesCopyOnWrite = null; this._resourceMap.set(resource.resourceId, resource); this._resources.push(resource); let resources = this._contextResources.get(resource.url); @@ -64,7 +66,9 @@ export abstract class BaseSnapshotStorage extends EventEmitter implements Snapsh this._frameSnapshots.set(snapshot.pageId, frameSnapshots); } frameSnapshots.raw.push(snapshot); - const renderer = new SnapshotRenderer(new Map(this._contextResources), frameSnapshots.raw, frameSnapshots.raw.length - 1); + if (!this._contextResourcesCopyOnWrite) + this._contextResourcesCopyOnWrite = new Map(this._contextResources); + const renderer = new SnapshotRenderer(this._contextResourcesCopyOnWrite, frameSnapshots.raw, frameSnapshots.raw.length - 1); frameSnapshots.renderer.push(renderer); this.emit('snapshot', renderer); }