Only set the unhandled rejection handler once per process. We run the setup and teardown multiple times per-process now. Add clearPuppeteerState() to unset the state between runs on a parallel test runner. This is because the port changes between successive runs in the same process. Remove the hasShutdown logic from mocha_hooks. Also remove the beforeExit hook which was causing this to get called at least twice for every process. It already gets called in the ordinary shutdown case via the afterAll() hook. We only need to call it in the extraordinary case which is the SIGINT case. Now that we do the shutdown multiple times per process, we don't care if we already shutdown on this process or not. The only issue could be if ctrl+c is sent during the shutdown, but then we are crashing anyway. Right now the default # of jobs is 1, so out bots will still run in serial mode. We want to add parallel mode as an options for local development while we iron out any last problems with this approach. You can test this locally with npm run e2etests -- --jobs=8. We make use of global setup fixtures to only run one hosted mode server and share it between all parallel runners. Each runner still starts its own chrome and restarts it between files, which is a bit inefficient but still a big improvement compared to serial mode. Split the hosted mode server out into its own file inside conductor as it can be dealt with entirely separately, and its state is not per-process like the chrome state, but only per-main-process which launches the test runner sub-processes. Bug: 1101784 Change-Id: Ic0c9be3559708fd5403a88882b9fb93257633de9 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2288694 Reviewed-by: Tim van der Lippe <tvanderlippe@chromium.org> Commit-Queue: Peter Marshall <petermarshall@chromium.org>
DevTools Scripts
Development workflow scripts
These are scripts that can be useful to run independently as you're working on Chrome DevTools front-end.
The newer scripts such as for testing and hosted mode are written in Node.js, which has become the standard toolchain for web apps. The older scripts such as building (e.g. bundling and minifying) are written in Python, which has first-class support in Chromium's infrastructure.
Overview
Folders
- build - Python package for generating DevTools debug and release mode
- chrome_debug_launcher - automagically finds Chrome Canary and launches it with debugging flags (e.g. remote debugging port)
- closure - see section on Closure Compiler below
- gulp - experimental build process written in node.js & gulp to remove the dependency on Chromium-specific build tools (i.e. gn and ninja)
- hosted_mode - run DevTools on a localhost development server
- jsdoc_validator - enforces the use of Closure type annotations
Python Scripts
- compile_frontend.py - runs closure compiler to do static type analysis
- Note: the compiled outputs are not actually used to run DevTools
- lint_javascript.py - run eslint
- optimize_svg_images.py - manually run when changing svg images
Node.js scripts
The easiest way to run the node.js scripts is to use npm run which displays all the commands. For more information on the specific npm run commands, take a look at the primary devtools front-end readme (../readme.md).
Closure
DevTools manually rolls the closure compiler to ./closure. If you manually roll closure compiler, you will need to re-generate the closure_runner (in ./closure) and jsdoc_validator custom jars using the python scripts in their respective directory.