Enable codegen-units=4 in debug mode
We previously had this and removed it because it caused runtime slowdowns
(discussion in #11102), but that was in release mode.
Debug mode is already very slow at runtime.
In my opinion, debug mode is mostly for the edit-compile-test cycle
which is currently dominated by compile times, so sacrificing runtime for compile time makes sense.
I’ve observed a ~30% improvement of compile times with this. This figure is consistent between a very fast desktop with 4 cores / 8 threads and a not-as-fast laptop with 2 cores / 4 threads.
<!-- Please describe your changes on the following line: -->
---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [ ] These changes fix #__ (github issue number if applicable).
<!-- Either: -->
- [ ] There are tests for these changes OR
- [ ] These changes do not require tests because _____
<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/14995)
<!-- Reviewable:end -->
We previously had this and removed it because it caused runtime slowdowns
(discussion in #11102), but that was in release mode.
Debug mode is already very slow at runtime.
In my opinion, debug mode is mostly for the edit-compile-test cycle
which is currently dominated by compile times,
so sacrificing runtime for compile time makes sense.
I’ve observed a ~30% improvement of compile times with this.
This figure is consistent between a very fast desktop with 4 cores / 8 threads
and a not-as-fast laptop with 2 cores / 4 threads.
replace match by if let statements if possible
<!-- Please describe your changes on the following line: -->
Hi there,
This PR replaces `match` statements by `if let` when possible.
Thanks for reviewing
---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [X] `./mach build -d` does not report any errors
- [X] `./mach test-tidy` does not report any errors
- [X] These changes fix#14788
<!-- Either: -->
- [ ] There are tests for these changes OR
- [X] These changes do not require tests because this PR is a code cleanup patch.
<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/14796)
<!-- Reviewable:end -->
It turns out that it's problematic to embed ThreadLocalStyleContext within
LayoutContext, because parameterizing the former on TElement (which we do
in the next patch) infects all the traversal stuff with the trait parameters,
which we don't really want.
In general, it probably makes sense to use separate scoped TLS types for
the separate DOM and Flow tree passes, so we can add a different ScopedTLS
type for the Flow pass if we ever need it.
We also reorder the |scope| and |shared| parameters in parallel.rs, because
it aligns more with the order in style/parallel.rs. I did this when I was
adding a TLS parameter to all these functions, which I realized we don't need
for now.
This allows us to get rid of a bunch of lifetimes and simplify a lot of code. It
also lets us get rid of that nasty lifetime transmute, which is awesome.
The situation with thread-local contexts is still suboptimal, but we fix that in
subsequent patches.
Use `android-rs-injected-glue` on Android
<!-- Please describe your changes on the following line: -->
Due to changes in `android-rs-glue`, currently the Android build fails to start. As discussed [here](https://github.com/servo/servo/issues/13154), other than the `android-glue`, we now also have to inject some additional code too. This task is usually done by a helper program of `android-glue`, `cargo-apk`, but since Servo's build system is somewhat more complex than a regular small application, at the moment it'd be more clean to move the required internal `injected-glue` lib to a new repository, and add it as a dependency.
This patch adds a new dependency, `android-rs-injected-glue`, and integrates it into Servo. After applying this commit and #14528, Servo can be launched on Android. (It doesn't *work* yet as expected, though.)
Part of #13154.
---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/14530)
<!-- Reviewable:end -->