servo/components/script/dom/bindings/codegen
Simon Sapin 5c60023cb8 WebIDL codegen: Replace cmake with a single Python script
When playing around with Cargo’s new timing visualization:
https://internals.rust-lang.org/t/exploring-crate-graph-build-times-with-cargo-build-ztimings/10975/21

… I was surprised to see the `script` crate’s build script take 76 seconds.
I did not expect WebIDL bindings generation to be *that* computationally
intensive.

It turns out almost all of this time is overhead. The build script uses CMake
to generate bindings for each WebIDL file in parallel, but that causes a lot
of work to be repeated 366 times:

* Starting up a Python VM
* Importing (parts of) the Python standard library
* Importing ~16k lines of our Python code
* Recompiling the latter to bytecode, since we used `python -B` to disable
  writing `.pyc` file
* Deserializing with `cPickle` and recreating in memory the results
  of parsing all WebIDL files

----

This commit remove the use of CMake and cPickle for the `script` crate.
Instead, all WebIDL bindings generation is done sequentially
in a single Python process. This takes 2 to 3 seconds.
2019-09-27 13:53:19 +02:00
..
parser Update WebIDL parser 2019-08-16 23:17:50 +09:00
ply Cargoify servo 2014-09-08 20:21:42 -06:00
api.html.template Generate a list of supported DOM APIs from parsed WebIDLs. 2016-07-15 18:13:09 -04:00
apis.html.template Generate a list of supported DOM APIs from parsed WebIDLs. 2016-07-15 18:13:09 -04:00
Bindings.conf Use the newly added inCompartments option everywhere it can be 2019-05-25 17:28:07 +02:00
CodegenRust.py WebIDL codegen: Replace cmake with a single Python script 2019-09-27 13:53:19 +02:00
Configuration.py Support default toJSON in WebIDL 2019-07-24 22:01:55 +09:00
interface.html.template Generate a list of supported DOM APIs from parsed WebIDLs. 2016-07-15 18:13:09 -04:00
property.html.template Generate a list of supported DOM APIs from parsed WebIDLs. 2016-07-15 18:13:09 -04:00
run.py WebIDL codegen: Replace cmake with a single Python script 2019-09-27 13:53:19 +02:00