You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by sh...@apache.org on 2021/05/10 07:04:56 UTC

[echarts] branch enhance-visual-regression-test updated: test(visual): use threads in cli instead of server

This is an automated email from the ASF dual-hosted git repository.

shenyi pushed a commit to branch enhance-visual-regression-test
in repository https://gitbox.apache.org/repos/asf/echarts.git


The following commit(s) were added to refs/heads/enhance-visual-regression-test by this push:
     new dcf48f2  test(visual): use threads in cli instead of server
dcf48f2 is described below

commit dcf48f2711641d2da7643c1727c4248049316f76
Author: pissang <bm...@gmail.com>
AuthorDate: Mon May 10 15:04:08 2021 +0800

    test(visual): use threads in cli instead of server
---
 test/runTest/cli.js    |  2 +-
 test/runTest/server.js | 92 ++++++++++++++++++++++----------------------------
 2 files changed, 42 insertions(+), 52 deletions(-)

diff --git a/test/runTest/cli.js b/test/runTest/cli.js
index 676b7e4..7ef3533 100644
--- a/test/runTest/cli.js
+++ b/test/runTest/cli.js
@@ -40,7 +40,7 @@ program
     .option('--expected <expected>', 'Expected version')
     .option('--actual <actual>', 'Actual version')
     .option('--renderer <renderer>', 'svg/canvas renderer')
-    .option('--threads', 'How many threads to run concurrently')
+    .option('--threads <threads>', 'How many threads to run concurrently')
     .option('--no-save', 'Don\'t save result')
     .option('--dir <dir>', 'Out dir');
 
diff --git a/test/runTest/server.js b/test/runTest/server.js
index 03f37ac..c497708 100644
--- a/test/runTest/server.js
+++ b/test/runTest/server.js
@@ -63,15 +63,15 @@ function serve() {
     };
 };
 
-let runningThreads = [];
+let runningThread;
 let pendingTests;
-let running = false;
 
 function stopRunningTests() {
-    if (runningThreads) {
-        runningThreads.forEach(thread => thread.kill());
-        runningThreads = [];
+    if (runningThread) {
+        runningThread.kill();
+        runningThread = null;
     }
+
     if (pendingTests) {
         pendingTests.forEach(testOpt => {
             if (testOpt.status === 'pending') {
@@ -93,8 +93,7 @@ class Thread {
 
     fork(extraArgs) {
         let p = fork(path.join(__dirname, 'cli.js'), [
-            '--tests',
-            this.tests.map(testOpt => testOpt.name).join(','),
+            '--tests', this.tests.map(testOpt => testOpt.name).join(','),
             ...extraArgs
         ]);
         this.p = p;
@@ -131,9 +130,12 @@ function startTests(testsNameList, socket, {
     console.log('Received: ', testsNameList.join(','));
 
     threadsCount = threadsCount || 1;
-    stopRunningTests();
 
     return new Promise(resolve => {
+        if (!runningThread) {
+            resolve();
+        }
+
         pendingTests = getTestsList().filter(testOpt => {
             return testsNameList.includes(testOpt.name);
         });
@@ -147,7 +149,7 @@ function startTests(testsNameList, socket, {
             // Save status immediately
             saveTestsList();
 
-            if (running) {
+            if (runningThread) {
                 socket.emit('update', {
                     tests: getTestsList(),
                     running: true
@@ -155,47 +157,32 @@ function startTests(testsNameList, socket, {
             }
         }
 
-        let runningCount = 0;
         function onExit() {
-            runningCount--;
-            if (runningCount === 0) {
-                runningThreads = [];
-                resolve();
-            }
+            runningThread = null;
+            resolve();
         }
         function onUpdate() {
             // Merge tests.
-            if (running && !noSave) {
+            if (runningThread && !noSave) {
                 socket.emit('update', {
                     tests: getTestsList(),
                     running: true
                 });
             }
         }
-        threadsCount = Math.min(threadsCount, pendingTests.length);
-        // Assigning tests to threads
-        runningThreads = new Array(threadsCount).fill(0).map(() => new Thread() );
-        for (let i = 0; i < pendingTests.length; i++) {
-            runningThreads[i % threadsCount].tests.push(pendingTests[i]);
-        }
-        for (let i = 0; i < threadsCount; i++) {
-            runningThreads[i].onExit = onExit;
-            runningThreads[i].onUpdate = onUpdate;
-            runningThreads[i].fork([
-                '--speed', replaySpeed || 5,
-                '--actual', actualVersion,
-                '--expected', expectedVersion,
-                '--renderer', renderer || '',
-                '--dir', getResultBaseDir(),
-                ...(noHeadless ? ['--no-headless'] : []),
-                ...(noSave ? ['--no-save'] : [])
-            ]);
-            runningCount++;
-        }
-        // If something bad happens and no proccess are started successfully
-        if (runningCount === 0) {
-            resolve();
-        }
+        runningThread.tests = pendingTests.slice();
+        runningThread.onExit = onExit;
+        runningThread.onUpdate = onUpdate;
+        runningThread.fork([
+            '--speed', replaySpeed || 5,
+            '--actual', actualVersion,
+            '--expected', expectedVersion,
+            '--renderer', renderer || '',
+            '--threads', threadsCount,
+            '--dir', getResultBaseDir(),
+            ...(noHeadless ? ['--no-headless'] : []),
+            ...(noSave ? ['--no-save'] : [])
+        ]);
     });
 }
 
@@ -234,13 +221,15 @@ async function start() {
     nightlyVersions.unshift('local');
 
     io.of('/client').on('connect', async socket => {
+
+        let isAborted = false;
         function abortTests() {
-            if (!running) {
+            if (!runningThread) {
                 return;
             }
+            isAborted = true;
             stopRunningTests();
             io.of('/client').emit('abort');
-            running = false;
         }
 
         socket.on('syncRunConfig', async ({
@@ -277,12 +266,12 @@ async function start() {
             }
             await updateTestsList(
                 _currentTestHash = getRunHash(_currentRunConfig),
-                !running // Set to unsettled if not running
+                !runningThread // Set to unsettled if not running
             );
 
             socket.emit('update', {
                 tests: getTestsList(),
-                running: runningThreads.length > 0
+                running: !!runningThread
             });
         });
 
@@ -308,17 +297,16 @@ async function start() {
         });
 
         socket.on('run', async data => {
+            stopRunningTests();
+            isAborted = false;
+            // Create runningThread immediately. In case abort happens.
+            runningThread = new Thread();
 
             let startTime = Date.now();
-            running = true;
 
             await prepareEChartsLib(data.expectedVersion); // Expected version.
             await prepareEChartsLib(data.actualVersion); // Version to test
 
-            if (!running) {  // If it is aborted when downloading echarts lib.
-                return;
-            }
-
             // TODO Should broadcast to all sockets.
             try {
                 if (!checkStoreVersion(data)) {
@@ -343,14 +331,13 @@ async function start() {
                 console.error(e);
             }
 
-            if (running) {
+            if (!isAborted) {
                 console.log('Finished');
                 io.of('/client').emit('finish', {
                     time: Date.now() - startTime,
                     count: data.tests.length,
                     threads: data.threads
                 });
-                running = false;
             }
             else {
                 console.log('Aborted!');
@@ -385,6 +372,9 @@ async function start() {
             }
         });
         socket.on('runSingle', async data => {
+            stopRunningTests();
+            runningThread = new Thread();
+
             try {
                 await startTests([data.testName], socket, {
                     noHeadless: true,

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org