chore(test): fix some screencast tests (#6522)

This commit is contained in:
Pavel Feldman 2021-05-12 08:35:19 -07:00 committed by GitHub
parent 6023c6746a
commit 45ee257a26
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 10 deletions

View file

@ -491,13 +491,14 @@ export class FFPage implements PageDelegate {
private _onScreencastFrame(event: Protocol.Page.screencastFramePayload) { private _onScreencastFrame(event: Protocol.Page.screencastFramePayload) {
if (!this._screencastId) if (!this._screencastId)
return; return;
this._session.send('Page.screencastFrameAck', { screencastId: this._screencastId }).catch(e => debugLogger.log('error', e));
const buffer = Buffer.from(event.data, 'base64'); const buffer = Buffer.from(event.data, 'base64');
this._page.emit(Page.Events.ScreencastFrame, { this._page.emit(Page.Events.ScreencastFrame, {
buffer, buffer,
width: event.deviceWidth, width: event.deviceWidth,
height: event.deviceHeight, height: event.deviceHeight,
}); });
this._session.send('Page.screencastFrameAck', { screencastId: this._screencastId }).catch(e => debugLogger.log('error', e));
} }
rafCountForStablePosition(): number { rafCountForStablePosition(): number {

View file

@ -845,13 +845,13 @@ export class WKPage implements PageDelegate {
} }
private _onScreencastFrame(event: Protocol.Screencast.screencastFramePayload) { 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'); const buffer = Buffer.from(event.data, 'base64');
this._page.emit(Page.Events.ScreencastFrame, { this._page.emit(Page.Events.ScreencastFrame, {
buffer, buffer,
width: event.deviceWidth, width: event.deviceWidth,
height: event.deviceHeight, height: event.deviceHeight,
}); });
this._pageProxySession.send('Screencast.screencastFrameAck', { generation: this._screencastGeneration }).catch(e => debugLogger.log('error', e));
} }
rafCountForStablePosition(): number { rafCountForStablePosition(): number {

View file

@ -106,17 +106,22 @@ for (const params of [
id: 'fit', id: 'fit',
width: 500, width: 500,
height: 500, height: 500,
}, { },
{
id: 'crop', id: 'crop',
width: 400, // Less than 450 to test firefox width: 400, // Less than 450 to test firefox
height: 800, height: 800,
}, { },
{
id: 'scale', id: 'scale',
width: 1024, width: 1024,
height: 768, 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(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 scale = Math.min(800 / params.width, 600 / params.height, 1);
const previewWidth = params.width * scale; const previewWidth = params.width * scale;
const previewHeight = params.height * 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 }}); const context = await contextFactory({ viewport: { width: params.width, height: params.height }});
await (context as any)._tracing.start({ name: 'test', screenshots: true, snapshots: true }); await (context as any)._tracing.start({ name: 'test', screenshots: true, snapshots: true });
const page = await context.newPage(); const page = await context.newPage();
await page.setContent('<body style="box-sizing: border-box; width: 100%; height: 100%; margin:0; background: red; border: 50px solid blue"></body>');
// Make sure we have a chance to paint. // 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('<body style="box-sizing: border-box; width: 100%; height: 100%; margin:0; background: red; border: 50px solid blue"></body>');
await page.evaluate(() => new Promise(requestAnimationFrame)); await page.evaluate(() => new Promise(requestAnimationFrame));
}
await (context as any)._tracing.stop(); await (context as any)._tracing.stop();
await (context as any)._tracing.export(testInfo.outputPath('trace.zip')); await (context as any)._tracing.export(testInfo.outputPath('trace.zip'));
const { events, resources } = await parseTrace(testInfo.outputPath('trace.zip')); const { events, resources } = await parseTrace(testInfo.outputPath('trace.zip'));
const frames = events.filter(e => e.type === 'screencast-frame'); const frames = events.filter(e => e.type === 'screencast-frame');
// Check all frame sizes
// Check all frame sizes.
for (const frame of frames) { for (const frame of frames) {
expect(frame.width).toBe(params.width); expect(frame.width).toBe(params.width);
expect(frame.height).toBe(params.height); expect(frame.height).toBe(params.height);
@ -143,7 +150,6 @@ for (const params of [
expect(image.height).toBe(previewHeight); expect(image.height).toBe(previewHeight);
} }
// Check last frame content.
const frame = frames[frames.length - 1]; // pick last frame. const frame = frames[frames.length - 1]; // pick last frame.
const buffer = resources.get('resources/' + frame.sha1); const buffer = resources.get('resources/' + frame.sha1);
const image = jpeg.decode(buffer); const image = jpeg.decode(buffer);