From 45ee257a2613f1bfa7b1893f97eaf90e49caaac5 Mon Sep 17 00:00:00 2001 From: Pavel Feldman Date: Wed, 12 May 2021 08:35:19 -0700 Subject: [PATCH] chore(test): fix some screencast tests (#6522) --- src/server/firefox/ffPage.ts | 3 ++- src/server/webkit/wkPage.ts | 2 +- tests/tracing.spec.ts | 22 ++++++++++++++-------- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/server/firefox/ffPage.ts b/src/server/firefox/ffPage.ts index bbc104d78d..751dd58b04 100644 --- a/src/server/firefox/ffPage.ts +++ b/src/server/firefox/ffPage.ts @@ -491,13 +491,14 @@ export class FFPage implements PageDelegate { private _onScreencastFrame(event: Protocol.Page.screencastFramePayload) { if (!this._screencastId) return; + this._session.send('Page.screencastFrameAck', { screencastId: this._screencastId }).catch(e => debugLogger.log('error', e)); + const buffer = Buffer.from(event.data, 'base64'); this._page.emit(Page.Events.ScreencastFrame, { buffer, width: event.deviceWidth, height: event.deviceHeight, }); - this._session.send('Page.screencastFrameAck', { screencastId: this._screencastId }).catch(e => debugLogger.log('error', e)); } rafCountForStablePosition(): number { diff --git a/src/server/webkit/wkPage.ts b/src/server/webkit/wkPage.ts index b06d32e172..78dd7c68a5 100644 --- a/src/server/webkit/wkPage.ts +++ b/src/server/webkit/wkPage.ts @@ -845,13 +845,13 @@ export class WKPage implements PageDelegate { } private _onScreencastFrame(event: Protocol.Screencast.screencastFramePayload) { + this._pageProxySession.send('Screencast.screencastFrameAck', { generation: this._screencastGeneration }).catch(e => debugLogger.log('error', e)); const buffer = Buffer.from(event.data, 'base64'); this._page.emit(Page.Events.ScreencastFrame, { buffer, width: event.deviceWidth, height: event.deviceHeight, }); - this._pageProxySession.send('Screencast.screencastFrameAck', { generation: this._screencastGeneration }).catch(e => debugLogger.log('error', e)); } rafCountForStablePosition(): number { diff --git a/tests/tracing.spec.ts b/tests/tracing.spec.ts index d722e032ca..47e489a288 100644 --- a/tests/tracing.spec.ts +++ b/tests/tracing.spec.ts @@ -106,17 +106,22 @@ for (const params of [ id: 'fit', width: 500, height: 500, - }, { + }, + { id: 'crop', width: 400, // Less than 450 to test firefox height: 800, - }, { + }, + { id: 'scale', width: 1024, height: 768, - }]) { - browserTest(`should produce screencast frames ${params.id}`, async ({ video, contextFactory, browserName }, testInfo) => { + } +]) { + browserTest(`should produce screencast frames ${params.id}`, async ({ video, contextFactory, browserName, platform }, testInfo) => { browserTest.fixme(browserName === 'chromium' && video, 'Same screencast resolution conflicts'); + browserTest.fixme(params.id === 'fit' && browserName === 'chromium' && platform === 'darwin', 'High DPI maxes image at 600x600'); + const scale = Math.min(800 / params.width, 600 / params.height, 1); const previewWidth = params.width * scale; const previewHeight = params.height * scale; @@ -124,16 +129,18 @@ for (const params of [ const context = await contextFactory({ viewport: { width: params.width, height: params.height }}); await (context as any)._tracing.start({ name: 'test', screenshots: true, snapshots: true }); const page = await context.newPage(); - await page.setContent(''); // Make sure we have a chance to paint. - for (let i = 0; i < 10; ++i) + for (let i = 0; i < 10; ++i) { + await page.setContent(''); await page.evaluate(() => new Promise(requestAnimationFrame)); + } await (context as any)._tracing.stop(); await (context as any)._tracing.export(testInfo.outputPath('trace.zip')); const { events, resources } = await parseTrace(testInfo.outputPath('trace.zip')); const frames = events.filter(e => e.type === 'screencast-frame'); - // Check all frame sizes + + // Check all frame sizes. for (const frame of frames) { expect(frame.width).toBe(params.width); expect(frame.height).toBe(params.height); @@ -143,7 +150,6 @@ for (const params of [ expect(image.height).toBe(previewHeight); } - // Check last frame content. const frame = frames[frames.length - 1]; // pick last frame. const buffer = resources.get('resources/' + frame.sha1); const image = jpeg.decode(buffer);