From 3835315bceb871b735cb127f328f8342ae3b26f3 Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Tue, 31 Jan 2023 17:49:01 +1100 Subject: [PATCH 01/29] Puppeteer: Multi-page parallelism --- test/e2e/puppeteer.js | 74 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 66 insertions(+), 8 deletions(-) diff --git a/test/e2e/puppeteer.js b/test/e2e/puppeteer.js index 9c4187944c8d0..236e16aee58ba 100644 --- a/test/e2e/puppeteer.js +++ b/test/e2e/puppeteer.js @@ -7,6 +7,35 @@ import jimp from 'jimp'; import * as fs from 'fs/promises'; import fetch from 'node-fetch'; +class PromiseQueue { + + constructor( func, ...args ) { + + this.func = func.bind( this, ...args ); + this.promises = []; + + } + + add( ...args ) { + + const promise = this.func( ...args ); + this.promises.push( promise ); + promise.then( () => this.promises.splice( this.promises.indexOf( promise ), 1 ) ); + + } + + async waitForAll() { + + while ( this.promises.length > 0 ) { + + await Promise.all( this.promises ); + + } + + } + +} + /* CONFIG VARIABLES START */ const idleTime = 3; // 3 seconds - for how long there should be no network requests @@ -56,13 +85,15 @@ const LAST_REVISION_URLS = { const port = 1234; const pixelThreshold = 0.1; // threshold error in one pixel -const maxFailedPixels = 0.05; // at most 5% failed pixels +const maxFailedPixels = 0.05; // at most 5% different pixels const networkTimeout = 30; // 30 seconds, set to 0 to disable const renderTimeout = 1.5; // 1.5 seconds, set to 0 to disable const numAttempts = 3; // perform 3 progressive attempts before failing +const numPages = 16; // use 16 browser pages + const numCIJobs = 8; // GitHub Actions run the script in 8 threads const width = 400; @@ -157,21 +188,26 @@ async function main() { const injection = await fs.readFile( 'test/e2e/deterministic-injection.js', 'utf8' ); const build = ( await fs.readFile( 'build/three.module.js', 'utf8' ) ).replace( /Math\.random\(\) \* 0xffffffff/g, 'Math._random() * 0xffffffff' ); - /* Prepare page */ + /* Prepare pages */ const errorMessagesCache = []; - const page = ( await browser.pages() )[ 0 ]; - await preparePage( page, injection, build, errorMessagesCache ); + const pages = await browser.pages(); + while ( pages.length < numPages && pages.length < files.length ) pages.push( await browser.newPage() ); + + for ( const page of pages ) await preparePage( page, injection, build, errorMessagesCache ); /* Loop for each file */ const failedScreenshots = []; - for ( const file of files ) await makeAttempt( page, failedScreenshots, cleanPage, isMakeScreenshot, file ); + const queue = new PromiseQueue( makeAttempt, pages, failedScreenshots, cleanPage, isMakeScreenshot ); + for ( const file of files ) queue.add( file ); + await queue.waitForAll(); /* Finish */ + failedScreenshots.sort(); const list = failedScreenshots.join( ' ' ); if ( isMakeScreenshot && failedScreenshots.length ) { @@ -315,13 +351,33 @@ async function preparePage( page, injection, build, errorMessages ) { } -async function makeAttempt( page, failedScreenshots, cleanPage, isMakeScreenshot, file, attemptID = 0 ) { +async function makeAttempt( pages, failedScreenshots, cleanPage, isMakeScreenshot, file, attemptID = 0 ) { const timeoutCoefficient = attemptID + 1; + const page = await new Promise( ( resolve, reject ) => { + + const interval = setInterval( () => { + + for ( const page of pages ) { + + if ( page.file === undefined ) { + + page.file = file; // acquire lock + clearInterval( interval ); + resolve( page ); + break; + + } + + } + + }, 100 ); + + } ); + try { - page.file = file; page.pageSize = 0; page.error = undefined; @@ -475,12 +531,14 @@ async function makeAttempt( page, failedScreenshots, cleanPage, isMakeScreenshot } else { console.yellow( `${ e }, another attempt...` ); - await makeAttempt( page, failedScreenshots, cleanPage, isMakeScreenshot, file, attemptID + 1 ); + this.add( file, attemptID + 1 ); } } + page.file = undefined; // release lock + } function close( exitCode = 1 ) { From 10c13fd4449a17a62b45dfebadafd86de4885096 Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Tue, 31 Jan 2023 17:50:19 +1100 Subject: [PATCH 02/29] Remove CI parallelism --- .github/workflows/ci.yml | 2 -- test/e2e/puppeteer.js | 15 --------------- 2 files changed, 17 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 39fdba438d948..8af65b1cf177e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -58,10 +58,8 @@ jobs: strategy: fail-fast: false matrix: - CI: [ 0, 1, 2, 3, 4, 5, 6, 7 ] os: [ windows-latest, ubuntu-latest, macos-latest ] env: - CI: ${{ matrix.CI }} FORCE_COLOR: 1 steps: - name: Git checkout diff --git a/test/e2e/puppeteer.js b/test/e2e/puppeteer.js index 236e16aee58ba..184160610f6e4 100644 --- a/test/e2e/puppeteer.js +++ b/test/e2e/puppeteer.js @@ -94,8 +94,6 @@ const numAttempts = 3; // perform 3 progressive attempts before failing const numPages = 16; // use 16 browser pages -const numCIJobs = 8; // GitHub Actions run the script in 8 threads - const width = 400; const height = 250; const viewScale = 2; @@ -145,19 +143,6 @@ async function main() { } - /* CI parallelism */ - - if ( 'CI' in process.env ) { - - const CI = parseInt( process.env.CI ); - - files = files.slice( - Math.floor( CI * files.length / numCIJobs ), - Math.floor( ( CI + 1 ) * files.length / numCIJobs ) - ); - - } - /* Download browser */ const { executablePath } = await downloadLatestChromium(); From d78ba31fefa54b7b0e5ff65044ec97d859c392e0 Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Tue, 31 Jan 2023 18:31:37 +1100 Subject: [PATCH 03/29] Some fixes --- test/e2e/puppeteer.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/test/e2e/puppeteer.js b/test/e2e/puppeteer.js index 184160610f6e4..f8961ef4ba829 100644 --- a/test/e2e/puppeteer.js +++ b/test/e2e/puppeteer.js @@ -57,6 +57,7 @@ const exceptionList = [ 'webgl_worker_offscreencanvas', // in a worker, not robust // TODO: most of these can be fixed just by increasing idleTime and parseTime + 'webgl_buffergeometry_glbufferattribute', 'webgl_lensflares', 'webgl_lines_sphere', 'webgl_loader_imagebitmap', @@ -64,6 +65,7 @@ const exceptionList = [ 'webgl_loader_texture_pvrtc', 'webgl_morphtargets_face', 'webgl_nodes_materials_standard', + 'webgl_postprocessing_dof2', 'webgl_postprocessing_crossfade', 'webgl_raymarching_reflect', 'webgl_renderer_pathtracer', @@ -436,7 +438,7 @@ async function makeAttempt( pages, failedScreenshots, cleanPage, isMakeScreensho console.yellow( `Render timeout exceeded in file ${ file }` ); - } */ + } */ // TODO: fix this } @@ -515,7 +517,11 @@ async function makeAttempt( pages, failedScreenshots, cleanPage, isMakeScreensho } else { - console.yellow( `${ e }, another attempt...` ); + if ( ! e.message.includes( 'TimeoutError' ) ) { // TODO: fix this + + console.yellow( `${ e }, another attempt...` ); + + } this.add( file, attemptID + 1 ); } From b2c7e5b6f86f72d71ec067fc723b1aa7bf754929 Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Tue, 31 Jan 2023 20:08:19 +1100 Subject: [PATCH 04/29] Fix the 'Execution context was destroyed' error --- test/e2e/puppeteer.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/test/e2e/puppeteer.js b/test/e2e/puppeteer.js index f8961ef4ba829..4289199bf308c 100644 --- a/test/e2e/puppeteer.js +++ b/test/e2e/puppeteer.js @@ -271,7 +271,15 @@ async function preparePage( page, injection, build, errorMessages ) { } - let text = ( await Promise.all( msg.args().map( arg => arg.executionContext().evaluate( arg => arg instanceof Error ? arg.message : arg, arg ) ) ) ).join( ' ' ); // https://github.com/puppeteer/puppeteer/issues/3397#issuecomment-434970058 + const args = await Promise.all( msg.args().map( async arg => { + try { + return await arg.executionContext().evaluate( arg => arg instanceof Error ? arg.message : arg, arg ); + } catch (e) { // Execution context might have been already destroyed + return arg; + } + } ) ); + + let text = args.join( ' ' ); // https://github.com/puppeteer/puppeteer/issues/3397#issuecomment-434970058 text = text.trim(); if ( text === '' ) return; From e20d1a4a35020cf5a18be57369818fc1ee4dc1e2 Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Tue, 31 Jan 2023 20:32:10 +1100 Subject: [PATCH 05/29] Update logging --- test/e2e/puppeteer.js | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/test/e2e/puppeteer.js b/test/e2e/puppeteer.js index 4289199bf308c..b08fed7083749 100644 --- a/test/e2e/puppeteer.js +++ b/test/e2e/puppeteer.js @@ -57,19 +57,24 @@ const exceptionList = [ 'webgl_worker_offscreencanvas', // in a worker, not robust // TODO: most of these can be fixed just by increasing idleTime and parseTime + 'physics_oimo_instancing', 'webgl_buffergeometry_glbufferattribute', + 'webgl_camera_logarithmicdepthbuffer', 'webgl_lensflares', 'webgl_lines_sphere', 'webgl_loader_imagebitmap', 'webgl_loader_texture_lottie', 'webgl_loader_texture_pvrtc', 'webgl_morphtargets_face', + 'webgl_multiple_renderers', 'webgl_nodes_materials_standard', + 'webgl_performance_shader', 'webgl_postprocessing_dof2', 'webgl_postprocessing_crossfade', 'webgl_raymarching_reflect', 'webgl_renderer_pathtracer', 'webgl_shadowmap_progressive', + 'webgl_shadowmesh', 'webgl_test_memory2', 'webgl_tiled_forward' @@ -286,9 +291,9 @@ async function preparePage( page, injection, build, errorMessages ) { text = file + ': ' + text.replace( /\[\.WebGL-(.+?)\] /g, '' ); - if ( errorMessages.includes( text ) ) { + if ( text === `${ file }: JSHandle@error` ) { - return; + text = `${ file }: Unknown error`; } @@ -298,6 +303,12 @@ async function preparePage( page, injection, build, errorMessages ) { } + if ( errorMessages.includes( text ) ) { + + return; + + } + errorMessages.push( text ); if ( type === 'warning' ) { From 4f3d09f24cdcb8a2f8b9537b5794a521f4ced0d1 Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Tue, 31 Jan 2023 20:35:26 +1100 Subject: [PATCH 06/29] Restore CI parallelism in 2 threads --- .github/workflows/ci.yml | 2 ++ test/e2e/puppeteer.js | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8af65b1cf177e..b0747f0ef5664 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -58,8 +58,10 @@ jobs: strategy: fail-fast: false matrix: + CI: [ 0, 1 ] os: [ windows-latest, ubuntu-latest, macos-latest ] env: + CI: ${{ matrix.CI }} FORCE_COLOR: 1 steps: - name: Git checkout diff --git a/test/e2e/puppeteer.js b/test/e2e/puppeteer.js index b08fed7083749..005059b7fc055 100644 --- a/test/e2e/puppeteer.js +++ b/test/e2e/puppeteer.js @@ -101,6 +101,8 @@ const numAttempts = 3; // perform 3 progressive attempts before failing const numPages = 16; // use 16 browser pages +const numCIJobs = 2; // GitHub Actions run the script in 2 threads + const width = 400; const height = 250; const viewScale = 2; @@ -150,6 +152,19 @@ async function main() { } + /* CI parallelism */ + + if ( 'CI' in process.env ) { + + const CI = parseInt( process.env.CI ); + + files = files.slice( + Math.floor( CI * files.length / numCIJobs ), + Math.floor( ( CI + 1 ) * files.length / numCIJobs ) + ); + + } + /* Download browser */ const { executablePath } = await downloadLatestChromium(); From c6e94a313f41d894d9dc81ce194d18db4a5ed5ce Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Tue, 31 Jan 2023 21:04:40 +1100 Subject: [PATCH 07/29] More exceptions --- .github/workflows/ci.yml | 2 +- test/e2e/puppeteer.js | 32 ++++++++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b0747f0ef5664..fa1b5d589541e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -58,8 +58,8 @@ jobs: strategy: fail-fast: false matrix: - CI: [ 0, 1 ] os: [ windows-latest, ubuntu-latest, macos-latest ] + CI: [ 0, 1, 2 ] env: CI: ${{ matrix.CI }} FORCE_COLOR: 1 diff --git a/test/e2e/puppeteer.js b/test/e2e/puppeteer.js index 005059b7fc055..4e9d15913ac13 100644 --- a/test/e2e/puppeteer.js +++ b/test/e2e/puppeteer.js @@ -58,21 +58,49 @@ const exceptionList = [ // TODO: most of these can be fixed just by increasing idleTime and parseTime 'physics_oimo_instancing', + 'webgl2_multisampled_renderbuffers', + 'webgl_animation_skinning_additive_blending', + 'webgl_buffergeometry_compression', 'webgl_buffergeometry_glbufferattribute', + 'webgl_buffergeometry_indexed', + 'webgl_buffergeometry_instancing_billboards', + 'webgl_buffergeometry_lines_indexed', + 'webgl_buffergeometry_points_interleaved', + 'webgl_camera_array', 'webgl_camera_logarithmicdepthbuffer', + 'webgl_clipping', + 'webgl_clipping_advanced', + 'webgl_custom_attributes', + 'webgl_custom_attributes_points3', + 'webgl_geometry_extrude_shapes2', + 'webgl_gpgpu_birds_gltf', + 'webgl_gpgpu_protoplanet', + 'webgl_instancing_scatter', + 'webgl_interactive_buffergeometry', + 'webgl_interactive_voxelpainter'. 'webgl_lensflares', 'webgl_lines_sphere', + 'webgl_loader_gltf_compressed', + 'webgl_loader_ifc', 'webgl_loader_imagebitmap', + 'webgl_loader_ply', + 'webgl_loader_svg', + 'webgl_loader_texture_dds', 'webgl_loader_texture_lottie', 'webgl_loader_texture_pvrtc', 'webgl_morphtargets_face', 'webgl_multiple_renderers', 'webgl_nodes_materials_standard', 'webgl_performance_shader', - 'webgl_postprocessing_dof2', + 'webgl_pmrem_test', 'webgl_postprocessing_crossfade', + 'webgl_postprocessing_dof2', + 'webgl_postprocessing_sao', + 'webgl_postprocessing_smaa', + 'webgl_postprocessing_ssaa', 'webgl_raymarching_reflect', 'webgl_renderer_pathtracer', + 'webgl_shadowmap', 'webgl_shadowmap_progressive', 'webgl_shadowmesh', 'webgl_test_memory2', @@ -101,7 +129,7 @@ const numAttempts = 3; // perform 3 progressive attempts before failing const numPages = 16; // use 16 browser pages -const numCIJobs = 2; // GitHub Actions run the script in 2 threads +const numCIJobs = 3; // GitHub Actions run the script in 3 threads const width = 400; const height = 250; From 6981c3228d09c033461e9053b624d16a8a8b76bf Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Tue, 31 Jan 2023 21:08:22 +1100 Subject: [PATCH 08/29] Oops --- test/e2e/puppeteer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/puppeteer.js b/test/e2e/puppeteer.js index 4e9d15913ac13..bc291ca3179ae 100644 --- a/test/e2e/puppeteer.js +++ b/test/e2e/puppeteer.js @@ -77,7 +77,7 @@ const exceptionList = [ 'webgl_gpgpu_protoplanet', 'webgl_instancing_scatter', 'webgl_interactive_buffergeometry', - 'webgl_interactive_voxelpainter'. + 'webgl_interactive_voxelpainter', 'webgl_lensflares', 'webgl_lines_sphere', 'webgl_loader_gltf_compressed', From 18fe30cb03974cfdddcdf1801a3db3c92391373f Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Tue, 31 Jan 2023 21:27:40 +1100 Subject: [PATCH 09/29] Add Mac's own exception list --- test/e2e/puppeteer.js | 63 ++++++++++++++++++++++++++++++++----------- 1 file changed, 47 insertions(+), 16 deletions(-) diff --git a/test/e2e/puppeteer.js b/test/e2e/puppeteer.js index bc291ca3179ae..8bd1caad0dc52 100644 --- a/test/e2e/puppeteer.js +++ b/test/e2e/puppeteer.js @@ -57,54 +57,83 @@ const exceptionList = [ 'webgl_worker_offscreencanvas', // in a worker, not robust // TODO: most of these can be fixed just by increasing idleTime and parseTime + 'webgl_lensflares', + 'webgl_lines_sphere', + 'webgl_loader_imagebitmap', + 'webgl_loader_texture_lottie', + 'webgl_loader_texture_pvrtc', + 'webgl_morphtargets_face', + 'webgl_nodes_materials_standard', + 'webgl_postprocessing_crossfade', + 'webgl_postprocessing_dof2', + 'webgl_raymarching_reflect', + 'webgl_renderer_pathtracer', + 'webgl_shadowmap_progressive', + 'webgl_test_memory2', + 'webgl_tiled_forward' + +]; + +const macExceptionList = [ + 'physics_oimo_instancing', 'webgl2_multisampled_renderbuffers', + 'webgl2_ubo', + 'webgl_animation_keyframes', 'webgl_animation_skinning_additive_blending', + 'webgl_animation_skinning_ik', 'webgl_buffergeometry_compression', + 'webgl_buffergeometry_custom_attributes_particles', 'webgl_buffergeometry_glbufferattribute', 'webgl_buffergeometry_indexed', 'webgl_buffergeometry_instancing_billboards', 'webgl_buffergeometry_lines_indexed', 'webgl_buffergeometry_points_interleaved', + 'webgl_buffergeometry_uint', + 'webgl_camera', 'webgl_camera_array', 'webgl_camera_logarithmicdepthbuffer', 'webgl_clipping', 'webgl_clipping_advanced', 'webgl_custom_attributes', 'webgl_custom_attributes_points3', + 'webgl_decals', + 'webgl_depth_texture', + 'webgl_framebuffer_texture', + 'webgl_furnace_test', 'webgl_geometry_extrude_shapes2', 'webgl_gpgpu_birds_gltf', 'webgl_gpgpu_protoplanet', 'webgl_instancing_scatter', 'webgl_interactive_buffergeometry', + 'webgl_interactive_raycasting_points', 'webgl_interactive_voxelpainter', - 'webgl_lensflares', - 'webgl_lines_sphere', + 'webgl_lightningstrike', + 'webgl_lightprobe_cubecamera', 'webgl_loader_gltf_compressed', + 'webgl_loader_gltf_instancing', 'webgl_loader_ifc', - 'webgl_loader_imagebitmap', 'webgl_loader_ply', 'webgl_loader_svg', 'webgl_loader_texture_dds', - 'webgl_loader_texture_lottie', - 'webgl_loader_texture_pvrtc', - 'webgl_morphtargets_face', + 'webgl_materials_envmaps_groundprojected', + 'webgl_materials_envmaps_hdr', + 'webgl_materials_variations_lambert', + 'webgl_materials_variations_standard', + 'webgl_materials_variations_toon', + 'webgl_mirror', + 'webgl_modifier_subdivision', 'webgl_multiple_renderers', - 'webgl_nodes_materials_standard', 'webgl_performance_shader', 'webgl_pmrem_test', - 'webgl_postprocessing_crossfade', - 'webgl_postprocessing_dof2', + 'webgl_points_waves', 'webgl_postprocessing_sao', 'webgl_postprocessing_smaa', 'webgl_postprocessing_ssaa', - 'webgl_raymarching_reflect', - 'webgl_renderer_pathtracer', + 'webgl_postprocessing_ssao', + 'webgl_postprocessing_unreal_bloom_selective', 'webgl_shadowmap', - 'webgl_shadowmap_progressive', - 'webgl_shadowmesh', - 'webgl_test_memory2', - 'webgl_tiled_forward' + 'webgl_shadowmesh' ]; @@ -161,10 +190,12 @@ async function main() { const isExactList = exactList.length !== 0; + const filesExceptionList = process.platform === 'darwin' ? exceptionList.concat( macExceptionList ) : exceptionList; + let files = ( await fs.readdir( 'examples' ) ) .filter( s => s.slice( - 5 ) === '.html' && s !== 'index.html' ) .map( s => s.slice( 0, s.length - 5 ) ) - .filter( f => isExactList ? exactList.includes( f ) : ! exceptionList.includes( f ) ); + .filter( f => isExactList ? exactList.includes( f ) : ! filesExceptionList.includes( f ) ); if ( isExactList ) { From ec780978f9e5943a7ec9a4cf333710a03d388a40 Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Tue, 31 Jan 2023 21:50:47 +1030 Subject: [PATCH 10/29] Update exceptions --- test/e2e/puppeteer.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/test/e2e/puppeteer.js b/test/e2e/puppeteer.js index 8bd1caad0dc52..90f2e392d272c 100644 --- a/test/e2e/puppeteer.js +++ b/test/e2e/puppeteer.js @@ -57,6 +57,7 @@ const exceptionList = [ 'webgl_worker_offscreencanvas', // in a worker, not robust // TODO: most of these can be fixed just by increasing idleTime and parseTime + 'webgl_buffergeometry_glbufferattribute', 'webgl_lensflares', 'webgl_lines_sphere', 'webgl_loader_imagebitmap', @@ -84,7 +85,6 @@ const macExceptionList = [ 'webgl_animation_skinning_ik', 'webgl_buffergeometry_compression', 'webgl_buffergeometry_custom_attributes_particles', - 'webgl_buffergeometry_glbufferattribute', 'webgl_buffergeometry_indexed', 'webgl_buffergeometry_instancing_billboards', 'webgl_buffergeometry_lines_indexed', @@ -132,8 +132,12 @@ const macExceptionList = [ 'webgl_postprocessing_ssaa', 'webgl_postprocessing_ssao', 'webgl_postprocessing_unreal_bloom_selective', + 'webgl_shaders_tonemapping', + 'webgl_shadow_contact', 'webgl_shadowmap', - 'webgl_shadowmesh' + 'webgl_shadowmap_vsm', + 'webgl_shadowmesh', + 'webgl_tonemapping' ]; From f8a3c6579ba9e1d363c6e6fe504995f15578f6b7 Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Tue, 31 Jan 2023 21:53:47 +1030 Subject: [PATCH 11/29] Update exceptions --- test/e2e/puppeteer.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/e2e/puppeteer.js b/test/e2e/puppeteer.js index 90f2e392d272c..e052939538b67 100644 --- a/test/e2e/puppeteer.js +++ b/test/e2e/puppeteer.js @@ -135,8 +135,10 @@ const macExceptionList = [ 'webgl_shaders_tonemapping', 'webgl_shadow_contact', 'webgl_shadowmap', + 'webgl_shadowmap_viewer', 'webgl_shadowmap_vsm', 'webgl_shadowmesh', + 'webgl_simple_gi', 'webgl_tonemapping' ]; From 59e8bf681a51acb3d6abcb7788ea0e49e4e6a712 Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Wed, 1 Feb 2023 16:43:26 +1100 Subject: [PATCH 12/29] Test headful on Mac --- test/e2e/puppeteer.js | 74 ++----------------------------------------- 1 file changed, 2 insertions(+), 72 deletions(-) diff --git a/test/e2e/puppeteer.js b/test/e2e/puppeteer.js index e052939538b67..4190d5f45daf9 100644 --- a/test/e2e/puppeteer.js +++ b/test/e2e/puppeteer.js @@ -75,74 +75,6 @@ const exceptionList = [ ]; -const macExceptionList = [ - - 'physics_oimo_instancing', - 'webgl2_multisampled_renderbuffers', - 'webgl2_ubo', - 'webgl_animation_keyframes', - 'webgl_animation_skinning_additive_blending', - 'webgl_animation_skinning_ik', - 'webgl_buffergeometry_compression', - 'webgl_buffergeometry_custom_attributes_particles', - 'webgl_buffergeometry_indexed', - 'webgl_buffergeometry_instancing_billboards', - 'webgl_buffergeometry_lines_indexed', - 'webgl_buffergeometry_points_interleaved', - 'webgl_buffergeometry_uint', - 'webgl_camera', - 'webgl_camera_array', - 'webgl_camera_logarithmicdepthbuffer', - 'webgl_clipping', - 'webgl_clipping_advanced', - 'webgl_custom_attributes', - 'webgl_custom_attributes_points3', - 'webgl_decals', - 'webgl_depth_texture', - 'webgl_framebuffer_texture', - 'webgl_furnace_test', - 'webgl_geometry_extrude_shapes2', - 'webgl_gpgpu_birds_gltf', - 'webgl_gpgpu_protoplanet', - 'webgl_instancing_scatter', - 'webgl_interactive_buffergeometry', - 'webgl_interactive_raycasting_points', - 'webgl_interactive_voxelpainter', - 'webgl_lightningstrike', - 'webgl_lightprobe_cubecamera', - 'webgl_loader_gltf_compressed', - 'webgl_loader_gltf_instancing', - 'webgl_loader_ifc', - 'webgl_loader_ply', - 'webgl_loader_svg', - 'webgl_loader_texture_dds', - 'webgl_materials_envmaps_groundprojected', - 'webgl_materials_envmaps_hdr', - 'webgl_materials_variations_lambert', - 'webgl_materials_variations_standard', - 'webgl_materials_variations_toon', - 'webgl_mirror', - 'webgl_modifier_subdivision', - 'webgl_multiple_renderers', - 'webgl_performance_shader', - 'webgl_pmrem_test', - 'webgl_points_waves', - 'webgl_postprocessing_sao', - 'webgl_postprocessing_smaa', - 'webgl_postprocessing_ssaa', - 'webgl_postprocessing_ssao', - 'webgl_postprocessing_unreal_bloom_selective', - 'webgl_shaders_tonemapping', - 'webgl_shadow_contact', - 'webgl_shadowmap', - 'webgl_shadowmap_viewer', - 'webgl_shadowmap_vsm', - 'webgl_shadowmesh', - 'webgl_simple_gi', - 'webgl_tonemapping' - -]; - /* CONFIG VARIABLES END */ const LAST_REVISION_URLS = { @@ -196,12 +128,10 @@ async function main() { const isExactList = exactList.length !== 0; - const filesExceptionList = process.platform === 'darwin' ? exceptionList.concat( macExceptionList ) : exceptionList; - let files = ( await fs.readdir( 'examples' ) ) .filter( s => s.slice( - 5 ) === '.html' && s !== 'index.html' ) .map( s => s.slice( 0, s.length - 5 ) ) - .filter( f => isExactList ? exactList.includes( f ) : ! filesExceptionList.includes( f ) ); + .filter( f => isExactList ? exactList.includes( f ) : ! exceptionList.includes( f ) ); if ( isExactList ) { @@ -244,7 +174,7 @@ async function main() { browser = await puppeteer.launch( { executablePath, - headless: ! process.env.VISIBLE, + headless: process.platform !== 'darwin', args: flags, defaultViewport: viewport, handleSIGINT: false From 8d71e89f555d0fbba049697cd0fefeb1de386926 Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Wed, 1 Feb 2023 17:11:06 +1100 Subject: [PATCH 13/29] Test mutiple browsers instead of multiple pages on Mac --- test/e2e/puppeteer.js | 49 ++++++++++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 15 deletions(-) diff --git a/test/e2e/puppeteer.js b/test/e2e/puppeteer.js index 4190d5f45daf9..41abf7e5b2c2e 100644 --- a/test/e2e/puppeteer.js +++ b/test/e2e/puppeteer.js @@ -98,6 +98,8 @@ const numPages = 16; // use 16 browser pages const numCIJobs = 3; // GitHub Actions run the script in 3 threads +const multiPageStrategy = process.platform !== 'darwin'; // whether to use multiple pages or multiple browsers, true if multiple pages + const width = 400; const height = 250; const viewScale = 2; @@ -107,7 +109,7 @@ console.red = msg => console.log( chalk.red( msg ) ); console.yellow = msg => console.log( chalk.yellow( msg ) ); console.green = msg => console.log( chalk.green( msg ) ); -let browser; +const browsers = []; /* Launch server */ @@ -164,7 +166,9 @@ async function main() { const { executablePath } = await downloadLatestChromium(); - /* Launch browser */ + /* Launch browsers */ + + const numThreads = Math.min( numPages, files.length ); const flags = [ '--hide-scrollbars', '--enable-unsafe-webgpu' ]; flags.push( '--enable-features=Vulkan', '--use-gl=swiftshader', '--use-angle=swiftshader', '--use-vulkan=swiftshader', '--use-webgpu-adapter=swiftshader' ); @@ -172,17 +176,21 @@ async function main() { const viewport = { width: width * viewScale, height: height * viewScale }; - browser = await puppeteer.launch( { - executablePath, - headless: process.platform !== 'darwin', - args: flags, - defaultViewport: viewport, - handleSIGINT: false - } ); + for ( let i = 0; i < multiPageStrategy ? 1 : numThreads; i++ ) { + + browsers.push( await puppeteer.launch( { + executablePath, + headless: ! process.env.VISIBLE, + args: flags, + defaultViewport: viewport, + handleSIGINT: false + } ); - // this line is intended to stop the script if the browser (in headful mode) is closed by user (while debugging) - // browser.on( 'targetdestroyed', target => ( target.type() === 'other' ) ? close() : null ); - // for some reason it randomly stops the script after about ~30 screenshots processed + // this line is intended to stop the script if the browser (in headful mode) is closed by user (while debugging) + // browser.on( 'targetdestroyed', target => ( target.type() === 'other' ) ? close() : null ); + // for some reason it randomly stops the script after about ~30 screenshots processed + + } /* Prepare injections */ @@ -194,8 +202,19 @@ async function main() { const errorMessagesCache = []; - const pages = await browser.pages(); - while ( pages.length < numPages && pages.length < files.length ) pages.push( await browser.newPage() ); + let pages; + + if ( multiPageStrategy ) { + + const browser = browsers[ 0 ]; + pages = await browser.pages(); + while ( pages.length < numThreads ) pages.push( await browser.newPage() ); + + } else { + + pages = browsers.map( browser => ( await browser.pages() )[ 0 ] ); + + } for ( const page of pages ) await preparePage( page, injection, build, errorMessagesCache ); @@ -565,7 +584,7 @@ function close( exitCode = 1 ) { console.log( 'Closing...' ); - if ( browser !== undefined ) browser.close(); + browsers.forEach( browser => browser.close() ); server.close(); process.exit( exitCode ); From 6eb6f7cd5f4b7153b73c1936285064575f5b2272 Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Wed, 1 Feb 2023 17:13:20 +1100 Subject: [PATCH 14/29] Fix --- test/e2e/puppeteer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/puppeteer.js b/test/e2e/puppeteer.js index 41abf7e5b2c2e..5ee2bf70dae67 100644 --- a/test/e2e/puppeteer.js +++ b/test/e2e/puppeteer.js @@ -184,7 +184,7 @@ async function main() { args: flags, defaultViewport: viewport, handleSIGINT: false - } ); + } ) ); // this line is intended to stop the script if the browser (in headful mode) is closed by user (while debugging) // browser.on( 'targetdestroyed', target => ( target.type() === 'other' ) ? close() : null ); From 22ce68cd7b96349b459254f8adecb21fdb15ea77 Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Wed, 1 Feb 2023 17:21:29 +1100 Subject: [PATCH 15/29] Fix --- test/e2e/puppeteer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/puppeteer.js b/test/e2e/puppeteer.js index 5ee2bf70dae67..30c416dfd5a04 100644 --- a/test/e2e/puppeteer.js +++ b/test/e2e/puppeteer.js @@ -212,7 +212,7 @@ async function main() { } else { - pages = browsers.map( browser => ( await browser.pages() )[ 0 ] ); + pages = await Promise.all( browsers.map( async browser => ( await browser.pages() )[ 0 ] ) ); } From e427f71df3b2e6dae237602e7f5a02e31fb93b0c Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Wed, 1 Feb 2023 17:28:13 +1100 Subject: [PATCH 16/29] Fix --- test/e2e/puppeteer.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/test/e2e/puppeteer.js b/test/e2e/puppeteer.js index 30c416dfd5a04..173c235572abc 100644 --- a/test/e2e/puppeteer.js +++ b/test/e2e/puppeteer.js @@ -94,12 +94,11 @@ const renderTimeout = 1.5; // 1.5 seconds, set to 0 to disable const numAttempts = 3; // perform 3 progressive attempts before failing -const numPages = 16; // use 16 browser pages +const numPages = 8; // use 8 browser pages +const multiPageStrategy = process.platform !== 'darwin'; // whether to use multiple pages or multiple browsers, true if multiple pages const numCIJobs = 3; // GitHub Actions run the script in 3 threads -const multiPageStrategy = process.platform !== 'darwin'; // whether to use multiple pages or multiple browsers, true if multiple pages - const width = 400; const height = 250; const viewScale = 2; From 55b3f4397c02b08d0ca77a0f412a494f901af73a Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Wed, 1 Feb 2023 17:31:05 +1100 Subject: [PATCH 17/29] Fix --- test/e2e/puppeteer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/puppeteer.js b/test/e2e/puppeteer.js index 173c235572abc..aa0d1c24aef32 100644 --- a/test/e2e/puppeteer.js +++ b/test/e2e/puppeteer.js @@ -175,7 +175,7 @@ async function main() { const viewport = { width: width * viewScale, height: height * viewScale }; - for ( let i = 0; i < multiPageStrategy ? 1 : numThreads; i++ ) { + for ( let i = 0; i < ( multiPageStrategy ? 1 : numThreads ); i++ ) { browsers.push( await puppeteer.launch( { executablePath, From 875492ceffc599051ffeeeb2ba7430942a427f40 Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Wed, 1 Feb 2023 17:50:05 +1100 Subject: [PATCH 18/29] Revert --- test/e2e/puppeteer.js | 50 ++++++++++++++----------------------------- 1 file changed, 16 insertions(+), 34 deletions(-) diff --git a/test/e2e/puppeteer.js b/test/e2e/puppeteer.js index aa0d1c24aef32..8d6705c67a050 100644 --- a/test/e2e/puppeteer.js +++ b/test/e2e/puppeteer.js @@ -94,8 +94,7 @@ const renderTimeout = 1.5; // 1.5 seconds, set to 0 to disable const numAttempts = 3; // perform 3 progressive attempts before failing -const numPages = 8; // use 8 browser pages -const multiPageStrategy = process.platform !== 'darwin'; // whether to use multiple pages or multiple browsers, true if multiple pages +const numPages = 16; // use 16 browser pages const numCIJobs = 3; // GitHub Actions run the script in 3 threads @@ -108,7 +107,7 @@ console.red = msg => console.log( chalk.red( msg ) ); console.yellow = msg => console.log( chalk.yellow( msg ) ); console.green = msg => console.log( chalk.green( msg ) ); -const browsers = []; +let browser; /* Launch server */ @@ -165,9 +164,7 @@ async function main() { const { executablePath } = await downloadLatestChromium(); - /* Launch browsers */ - - const numThreads = Math.min( numPages, files.length ); + /* Launch browser */ const flags = [ '--hide-scrollbars', '--enable-unsafe-webgpu' ]; flags.push( '--enable-features=Vulkan', '--use-gl=swiftshader', '--use-angle=swiftshader', '--use-vulkan=swiftshader', '--use-webgpu-adapter=swiftshader' ); @@ -175,21 +172,17 @@ async function main() { const viewport = { width: width * viewScale, height: height * viewScale }; - for ( let i = 0; i < ( multiPageStrategy ? 1 : numThreads ); i++ ) { - - browsers.push( await puppeteer.launch( { - executablePath, - headless: ! process.env.VISIBLE, - args: flags, - defaultViewport: viewport, - handleSIGINT: false - } ) ); - - // this line is intended to stop the script if the browser (in headful mode) is closed by user (while debugging) - // browser.on( 'targetdestroyed', target => ( target.type() === 'other' ) ? close() : null ); - // for some reason it randomly stops the script after about ~30 screenshots processed + browser = await puppeteer.launch( { + executablePath, + headless: ! process.env.VISIBLE, + args: flags, + defaultViewport: viewport, + handleSIGINT: false + } ); - } + // this line is intended to stop the script if the browser (in headful mode) is closed by user (while debugging) + // browser.on( 'targetdestroyed', target => ( target.type() === 'other' ) ? close() : null ); + // for some reason it randomly stops the script after about ~30 screenshots processed /* Prepare injections */ @@ -201,19 +194,8 @@ async function main() { const errorMessagesCache = []; - let pages; - - if ( multiPageStrategy ) { - - const browser = browsers[ 0 ]; - pages = await browser.pages(); - while ( pages.length < numThreads ) pages.push( await browser.newPage() ); - - } else { - - pages = await Promise.all( browsers.map( async browser => ( await browser.pages() )[ 0 ] ) ); - - } + const pages = await browser.pages(); + while ( pages.length < numPages && pages.length < files.length ) pages.push( await browser.newPage() ); for ( const page of pages ) await preparePage( page, injection, build, errorMessagesCache ); @@ -583,7 +565,7 @@ function close( exitCode = 1 ) { console.log( 'Closing...' ); - browsers.forEach( browser => browser.close() ); + if ( browser !== undefined ) browser.close(); server.close(); process.exit( exitCode ); From 58b1aedd9cc5c334c715923c6607f0f887750746 Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Wed, 1 Feb 2023 21:44:15 +1100 Subject: [PATCH 19/29] Try to increase networkTimeout --- test/e2e/puppeteer.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/e2e/puppeteer.js b/test/e2e/puppeteer.js index 8d6705c67a050..347c14321a6d3 100644 --- a/test/e2e/puppeteer.js +++ b/test/e2e/puppeteer.js @@ -89,7 +89,7 @@ const port = 1234; const pixelThreshold = 0.1; // threshold error in one pixel const maxFailedPixels = 0.05; // at most 5% different pixels -const networkTimeout = 30; // 30 seconds, set to 0 to disable +const networkTimeout = 60; // 60 seconds, set to 0 to disable const renderTimeout = 1.5; // 1.5 seconds, set to 0 to disable const numAttempts = 3; // perform 3 progressive attempts before failing @@ -289,7 +289,7 @@ async function preparePage( page, injection, build, errorMessages ) { const args = await Promise.all( msg.args().map( async arg => { try { return await arg.executionContext().evaluate( arg => arg instanceof Error ? arg.message : arg, arg ); - } catch (e) { // Execution context might have been already destroyed + } catch ( e ) { // Execution context might have been already destroyed return arg; } } ) ); From 678b4f9db65d8216b41d8c576471c089be436acb Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Wed, 1 Feb 2023 22:20:33 +1100 Subject: [PATCH 20/29] Increase CI threads to 4 --- .github/workflows/ci.yml | 2 +- test/e2e/puppeteer.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fa1b5d589541e..2205b80372dc0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -59,7 +59,7 @@ jobs: fail-fast: false matrix: os: [ windows-latest, ubuntu-latest, macos-latest ] - CI: [ 0, 1, 2 ] + CI: [ 0, 1, 2, 3 ] env: CI: ${{ matrix.CI }} FORCE_COLOR: 1 diff --git a/test/e2e/puppeteer.js b/test/e2e/puppeteer.js index 347c14321a6d3..cbb3f08df0ff6 100644 --- a/test/e2e/puppeteer.js +++ b/test/e2e/puppeteer.js @@ -96,7 +96,7 @@ const numAttempts = 3; // perform 3 progressive attempts before failing const numPages = 16; // use 16 browser pages -const numCIJobs = 3; // GitHub Actions run the script in 3 threads +const numCIJobs = 4; // GitHub Actions run the script in 4 threads const width = 400; const height = 250; From 3b56c3223c57a0ca2f119ce0a54d4063134f9e61 Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Thu, 2 Feb 2023 17:21:09 +1100 Subject: [PATCH 21/29] Should be fixed now --- test/e2e/puppeteer.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/test/e2e/puppeteer.js b/test/e2e/puppeteer.js index 7cea95e35b179..ececdd7c7eb67 100644 --- a/test/e2e/puppeteer.js +++ b/test/e2e/puppeteer.js @@ -557,11 +557,7 @@ async function makeAttempt( pages, failedScreenshots, cleanPage, isMakeScreensho } else { - if ( ! e.message.includes( 'TimeoutError' ) ) { // TODO: fix this - - console.yellow( `${ e }, another attempt...` ); - - } + console.yellow( `${ e }, another attempt...` ); this.add( file, attemptID + 1 ); } From de9b6c9a36ac40d443bfb1dece23c967b1ed98d6 Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Thu, 2 Feb 2023 17:42:02 +1100 Subject: [PATCH 22/29] Further increase networkTimeout --- test/e2e/puppeteer.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/e2e/puppeteer.js b/test/e2e/puppeteer.js index ececdd7c7eb67..7dda1b8f23c54 100644 --- a/test/e2e/puppeteer.js +++ b/test/e2e/puppeteer.js @@ -92,8 +92,8 @@ const port = 1234; const pixelThreshold = 0.1; // threshold error in one pixel const maxFailedPixels = 0.05; // at most 5% different pixels -const networkTimeout = 180; // 180 seconds, set to 0 to disable -const renderTimeout = 4.5; // 4.5 seconds, set to 0 to disable +const networkTimeout = 300; // 5 minutes, set to 0 to disable +const renderTimeout = 5; // 5 seconds, set to 0 to disable const numAttempts = 2; // perform 2 attempts before failing From cfa7b8b719887c70c7a3936f2061bf9dab8b688b Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Fri, 3 Feb 2023 17:48:18 +1030 Subject: [PATCH 23/29] Further increase networkTimeout --- test/e2e/puppeteer.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/e2e/puppeteer.js b/test/e2e/puppeteer.js index 8db112daef0fb..81b5e51bfd4cd 100644 --- a/test/e2e/puppeteer.js +++ b/test/e2e/puppeteer.js @@ -92,7 +92,7 @@ const port = 1234; const pixelThreshold = 0.1; // threshold error in one pixel const maxDifferentPixels = 0.05; // at most 5% different pixels -const networkTimeout = 300; // 5 minutes, set to 0 to disable +const networkTimeout = 10; // 10 minutes, set to 0 to disable const renderTimeout = 5; // 5 seconds, set to 0 to disable const numAttempts = 2; // perform 2 attempts before failing @@ -414,7 +414,7 @@ async function makeAttempt( pages, failedScreenshots, cleanPage, isMakeScreensho await page.goto( `http://localhost:${ port }/examples/${ file }.html`, { waitUntil: 'networkidle0', - timeout: networkTimeout * 1000 + timeout: networkTimeout * 60000 } ); } catch ( e ) { @@ -430,7 +430,7 @@ async function makeAttempt( pages, failedScreenshots, cleanPage, isMakeScreensho await page.evaluate( cleanPage ); await page.waitForNetworkIdle( { - timeout: networkTimeout * 1000, + timeout: networkTimeout * 60000, idleTime: idleTime * 1000 } ); From 421529effd01aec0c04f0162548bfc913f150217 Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Fri, 3 Feb 2023 18:00:25 +1030 Subject: [PATCH 24/29] TEST: numPages: 8, networkTimeout: 1.5 --- test/e2e/puppeteer.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/e2e/puppeteer.js b/test/e2e/puppeteer.js index 81b5e51bfd4cd..94d4be4420fc9 100644 --- a/test/e2e/puppeteer.js +++ b/test/e2e/puppeteer.js @@ -92,12 +92,12 @@ const port = 1234; const pixelThreshold = 0.1; // threshold error in one pixel const maxDifferentPixels = 0.05; // at most 5% different pixels -const networkTimeout = 10; // 10 minutes, set to 0 to disable +const networkTimeout = 1.5; // 1.5 minutes, set to 0 to disable const renderTimeout = 5; // 5 seconds, set to 0 to disable const numAttempts = 2; // perform 2 attempts before failing -const numPages = 16; // use 16 browser pages +const numPages = 8; // use 8 browser pages const numCIJobs = 4; // GitHub Actions run the script in 4 threads From a2f909f59cbf6d128b1b039ef164bdd3885ee459 Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Fri, 3 Feb 2023 18:41:20 +1100 Subject: [PATCH 25/29] TEST: numPages: 8, networkTimeout: 5 --- test/e2e/puppeteer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/puppeteer.js b/test/e2e/puppeteer.js index 94d4be4420fc9..d1fd86c682f30 100644 --- a/test/e2e/puppeteer.js +++ b/test/e2e/puppeteer.js @@ -92,7 +92,7 @@ const port = 1234; const pixelThreshold = 0.1; // threshold error in one pixel const maxDifferentPixels = 0.05; // at most 5% different pixels -const networkTimeout = 1.5; // 1.5 minutes, set to 0 to disable +const networkTimeout = 5; // 5 minutes, set to 0 to disable const renderTimeout = 5; // 5 seconds, set to 0 to disable const numAttempts = 2; // perform 2 attempts before failing From 3268266bcc8a335c9f83e25cfd14973200ec0149 Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Fri, 3 Feb 2023 18:49:57 +1100 Subject: [PATCH 26/29] TEST: numPages: 4, networkTimeout: 1.5 --- test/e2e/puppeteer.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/e2e/puppeteer.js b/test/e2e/puppeteer.js index d1fd86c682f30..2a450b6559e16 100644 --- a/test/e2e/puppeteer.js +++ b/test/e2e/puppeteer.js @@ -92,12 +92,12 @@ const port = 1234; const pixelThreshold = 0.1; // threshold error in one pixel const maxDifferentPixels = 0.05; // at most 5% different pixels -const networkTimeout = 5; // 5 minutes, set to 0 to disable +const networkTimeout = 1.5; // 1.5 minutes, set to 0 to disable const renderTimeout = 5; // 5 seconds, set to 0 to disable const numAttempts = 2; // perform 2 attempts before failing -const numPages = 8; // use 8 browser pages +const numPages = 4; // use 4 browser pages const numCIJobs = 4; // GitHub Actions run the script in 4 threads From 4d5fbe3bec645209240728f1014818dd19ba21b8 Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Sat, 4 Feb 2023 00:02:52 +1100 Subject: [PATCH 27/29] Return to 8-5 --- test/e2e/puppeteer.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/test/e2e/puppeteer.js b/test/e2e/puppeteer.js index 2a450b6559e16..b96b27e0bb40d 100644 --- a/test/e2e/puppeteer.js +++ b/test/e2e/puppeteer.js @@ -69,6 +69,7 @@ const exceptionList = [ 'webgl_postprocessing_dof2', 'webgl_raymarching_reflect', 'webgl_renderer_pathtracer', + 'webgl_shadowmap', 'webgl_shadowmap_progressive', 'webgl_test_memory2', 'webgl_tiled_forward' @@ -92,12 +93,12 @@ const port = 1234; const pixelThreshold = 0.1; // threshold error in one pixel const maxDifferentPixels = 0.05; // at most 5% different pixels -const networkTimeout = 1.5; // 1.5 minutes, set to 0 to disable +const networkTimeout = 5; // 5 minutes, set to 0 to disable const renderTimeout = 5; // 5 seconds, set to 0 to disable const numAttempts = 2; // perform 2 attempts before failing -const numPages = 4; // use 4 browser pages +const numPages = 8; // use 8 browser pages const numCIJobs = 4; // GitHub Actions run the script in 4 threads From 991f3df18a52544a4d59047f7b91ef4ea76a0e7e Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Mon, 6 Feb 2023 21:00:34 +1100 Subject: [PATCH 28/29] Accidentally removed one exception --- test/e2e/puppeteer.js | 1 + 1 file changed, 1 insertion(+) diff --git a/test/e2e/puppeteer.js b/test/e2e/puppeteer.js index 6197238a50086..d856e82f6be82 100644 --- a/test/e2e/puppeteer.js +++ b/test/e2e/puppeteer.js @@ -71,6 +71,7 @@ const exceptionList = [ // Unknown // TODO: most of these can be fixed just by increasing idleTime and parseTime + 'webgl_buffergeometry_glbufferattribute', 'webgl_clipping_advanced', 'webgl_lensflares', 'webgl_lines_sphere', From 7dbe198963f1b83c78c8866d829ea86c6114e812 Mon Sep 17 00:00:00 2001 From: Levi Pesin <35454228+LeviPesin@users.noreply.github.com> Date: Mon, 6 Feb 2023 21:11:06 +1100 Subject: [PATCH 29/29] New exception --- test/e2e/puppeteer.js | 1 + 1 file changed, 1 insertion(+) diff --git a/test/e2e/puppeteer.js b/test/e2e/puppeteer.js index d856e82f6be82..e03fc91aa212f 100644 --- a/test/e2e/puppeteer.js +++ b/test/e2e/puppeteer.js @@ -71,6 +71,7 @@ const exceptionList = [ // Unknown // TODO: most of these can be fixed just by increasing idleTime and parseTime + 'webgl_animation_skinning_blending', 'webgl_buffergeometry_glbufferattribute', 'webgl_clipping_advanced', 'webgl_lensflares',