diff --git a/packages/preview-service/src/jobProcessor.ts b/packages/preview-service/src/jobProcessor.ts index e4c170b43..04880f025 100644 --- a/packages/preview-service/src/jobProcessor.ts +++ b/packages/preview-service/src/jobProcessor.ts @@ -82,11 +82,18 @@ const pageFunction = async ({ logger.error({ err }, 'Page crashed') throw err }) + const start = new Date().getTime() await page.goto(`http://127.0.0.1:${port}/index.html`) page.setDefaultTimeout(timeout) const previewResult = await page.evaluate(async (job: JobPayload) => { + const loadDone = new Date().getTime() + const loadDurationSeconds = loadDone - start + // measure here before load await window.load(job) - return await window.takeScreenshot() + const renderDurationSeconds = new Date().getTime() - loadDone + // measure here + const renderResult = await window.takeScreenshot() + return { ...renderResult, loadDurationSeconds, renderDurationSeconds } }, job) return { jobId: job.jobId, status: 'success', result: previewResult } diff --git a/packages/shared/src/previews/interface.ts b/packages/shared/src/previews/interface.ts index 9a93f0dfc..26618b21e 100644 --- a/packages/shared/src/previews/interface.ts +++ b/packages/shared/src/previews/interface.ts @@ -1,13 +1,13 @@ -import { PreviewResult } from './job.js' +import { PreviewPageResult } from './job.js' export interface PreviewGenerator { takeScreenshot: TakeScreenshot load: Load } -export type TakeScreenshot = () => Promise +export type TakeScreenshot = () => Promise export type LoadArgs = { url: string; token: string } export type Load = (args: LoadArgs) => Promise -export type { PreviewResult } from './job.js' +export type { PreviewPageResult } from './job.js' diff --git a/packages/shared/src/previews/job.ts b/packages/shared/src/previews/job.ts index ef17ab4ad..172faf737 100644 --- a/packages/shared/src/previews/job.ts +++ b/packages/shared/src/previews/job.ts @@ -13,17 +13,27 @@ export const jobPayload = job.merge( ) export type JobPayload = z.infer -const previewResult = z.object({ +const previewPageResult = z.object({ durationSeconds: z.number().describe('Duration to generate the preview, in seconds'), screenshots: z.record(z.string(), z.string()) }) -export type PreviewResult = z.infer +const previewJobResult = previewPageResult.extend({ + loadDurationSeconds: z + .number() + .describe('Duration to load the object from the server in seconds'), + renderDurationSeconds: z + .number() + .describe('Duration to render the preview images in seconds') +}) + +export type PreviewPageResult = z.infer +export type PreviewJobResult = z.infer const previewSuccessPayload = job.merge( z.object({ status: z.literal('success'), - result: previewResult + result: previewJobResult }) )