From 8687e5505e8d199f75858b4c445570e0da433e75 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Tue, 15 Oct 2024 15:16:34 +0200 Subject: [PATCH] simplify --- packages/trace-viewer/src/sw/main.ts | 7 ---- .../trace-viewer/src/sw/snapshotRenderer.ts | 8 +--- .../trace-viewer/src/sw/snapshotServer.ts | 37 ++++++------------- 3 files changed, 13 insertions(+), 39 deletions(-) diff --git a/packages/trace-viewer/src/sw/main.ts b/packages/trace-viewer/src/sw/main.ts index dc1c13c74b..3c28933509 100644 --- a/packages/trace-viewer/src/sw/main.ts +++ b/packages/trace-viewer/src/sw/main.ts @@ -129,13 +129,6 @@ async function doFetch(event: FetchEvent): Promise { return response; } - if (relativePath.startsWith('/screenshot/')) { - const { snapshotServer } = loadedTraces.get(traceUrl!) || {}; - if (!snapshotServer) - return new Response(null, { status: 404 }); - return snapshotServer.serveClosestScreenshot(relativePath, url.searchParams); - } - if (relativePath.startsWith('/sha1/')) { // Sha1 for sources is based on the file path, can't load it of a random model. const sha1 = relativePath.slice('/sha1/'.length); diff --git a/packages/trace-viewer/src/sw/snapshotRenderer.ts b/packages/trace-viewer/src/sw/snapshotRenderer.ts index 2eda247ee5..0e508a50bf 100644 --- a/packages/trace-viewer/src/sw/snapshotRenderer.ts +++ b/packages/trace-viewer/src/sw/snapshotRenderer.ts @@ -78,7 +78,7 @@ export class SnapshotRenderer { return this._snapshots[this._index].viewport; } - render(swScope: string, traceURL: string): RenderedFrameSnapshot { + render(screenshotUrl: string | undefined): RenderedFrameSnapshot { const result: string[] = []; const visit = (n: NodeSnapshot, snapshotIndex: number, parentTag: string | undefined, parentAttrs: [string, string][] | undefined) => { // Text node. @@ -154,16 +154,12 @@ export class SnapshotRenderer { const html = lruCache(this, () => { visit(snapshot.html, this._index, undefined, undefined); - const screenshotURL = new URL(`./screenshot/${snapshot.pageId}`, swScope); - screenshotURL.searchParams.set('trace', traceURL); - screenshotURL.searchParams.set('name', this.snapshotName!); - const html = result.join(''); // Hide the document in order to prevent flickering. We will unhide once script has processed shadow. const prefix = snapshot.doctype ? `` : ''; return prefix + [ '', - `` + `` ].join('') + html; }); diff --git a/packages/trace-viewer/src/sw/snapshotServer.ts b/packages/trace-viewer/src/sw/snapshotServer.ts index 3ee89e15bc..6de4510673 100644 --- a/packages/trace-viewer/src/sw/snapshotServer.ts +++ b/packages/trace-viewer/src/sw/snapshotServer.ts @@ -47,36 +47,21 @@ export class SnapshotServer { const snapshot = this._snapshot(pathname.substring('/snapshot'.length), searchParams); if (!snapshot) return new Response(null, { status: 404 }); - const renderedSnapshot = snapshot.render(swScope, traceUrl); + + let screenshotUrl: URL | undefined; + const { wallTime, timestamp, pageId } = snapshot.snapshot(); + const page = this._pages.get(pageId); + if (page) { + const closestFrame = (wallTime && page.screencastFrames[0]?.frameSwapWallTime) ? findClosest(page.screencastFrames, frame => frame.frameSwapWallTime!, wallTime) : findClosest(page.screencastFrames, frame => frame.timestamp, timestamp); + if (closestFrame) + screenshotUrl = new URL(`./sha1/${closestFrame.sha1}`, swScope); + } + + const renderedSnapshot = snapshot.render(screenshotUrl?.toString()); this._snapshotIds.set(snapshotUrl, snapshot); return new Response(renderedSnapshot.html, { status: 200, headers: { 'Content-Type': 'text/html; charset=utf-8' } }); } - async serveClosestScreenshot(pathname: string, searchParams: URLSearchParams): Promise { - const snapshotRenderer = this._snapshot(pathname.substring('/screenshot'.length), searchParams); - if (!snapshotRenderer) - return new Response(undefined, { status: 404 }); - - const { wallTime, timestamp, pageId } = snapshotRenderer.snapshot(); - const page = this._pages.get(pageId); - if (!page) - return new Response(undefined, { status: 404 }); - - let sha1 = undefined; - if (wallTime && page.screencastFrames[0]?.frameSwapWallTime) - sha1 = findClosest(page.screencastFrames, frame => frame.frameSwapWallTime!, wallTime)?.sha1; - sha1 ??= findClosest(page.screencastFrames, frame => frame.timestamp, timestamp)?.sha1; - - if (!sha1) - return new Response(undefined, { status: 404 }); - - const blob = await this._resourceLoader(sha1); - if (!blob) - return new Response(undefined, { status: 404 }); - - return new Response(blob); - } - serveSnapshotInfo(pathname: string, searchParams: URLSearchParams): Response { const snapshot = this._snapshot(pathname.substring('/snapshotInfo'.length), searchParams); return this._respondWithJson(snapshot ? {