New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Make ToCss' SequenceWriter not monomorphise like a maniac anymore #19838
Conversation
Heads up! This PR modifies the following files:
|
@bors-servo try |
Make ToCss' SequenceWriter not monomorphise like a maniac anymore
💔 Test failed - linux-rel-wpt |
a0cf705
to
4743dc3
Compare
@bors-servo try |
Make ToCss' SequenceWriter not monomorphise like a maniac anymore <!-- 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/19838) <!-- Reviewable:end -->
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
/me likes :)
Not sure if you want to wait for @SimonSapin's / @bholley's review or not, if you don't just feel free to land with r=me.
ports/geckolib/glue.rs
Outdated
None, None /* No extra custom properties */); | ||
.single_value_to_css( | ||
&get_property_id_from_nscsspropertyid!(property, ()), | ||
&mut CssWriter::new(&mut string), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should make this pass buffer
directly. Mind filing an issue? Though I don't recall if @bholley's patch fixed this.
components/style_traits/values.rs
Outdated
has_written: false, | ||
let has_prefix = self.inner.prefix.is_some(); | ||
if !has_prefix { | ||
self.inner.prefix = Some(self.separator); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
oh, smart :)
where | ||
W: Write, | ||
{ | ||
/// Creates a new `CssWriter`. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: Maybe #[inline]
/// A writer tailored for serialising CSS. | ||
/// | ||
/// Coupled with SequenceWriter, this allows callers to transparently handle | ||
/// things like comma-separated values etc. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe put an example of how this is used? I had to read it a bit carefully.
In particular, what state does prefix
represent? If I'm not wrong, when writing a sequence:
- We start with prefix =
Some("")
. - On the first
item
, assuming it writes something, ittake
s the prefix. - On the second one, since there's no prefix, we set
prefix: Some(sequence_separator)
, and reset it after theto_css
call begins. - ...
components/style_traits/values.rs
Outdated
self.has_written = true; | ||
item.to_css(&mut self.inner)?; | ||
if !has_prefix { | ||
self.inner.prefix = None; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it'd be nice, more as a self-documenting assert than as a sanity-check, that in this case self.inner.prefix
is either None
or self.separator
before the assignment (since even though it can change down the line, it should always be mutated by another SequenceWriter
, and thus resetted too.
💔 Test failed - linux-dev |
4743dc3
to
bd7e68d
Compare
bd7e68d
to
0bf70dc
Compare
@bors-servo try |
Make ToCss' SequenceWriter not monomorphise like a maniac anymore <!-- 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/19838) <!-- Reviewable:end -->
☀️ Test successful - android, arm32, arm64, linux-dev, linux-rel-css, linux-rel-wpt, mac-dev-unit, mac-rel-css1, mac-rel-css2, mac-rel-wpt1, mac-rel-wpt2, mac-rel-wpt3, mac-rel-wpt4, windows-msvc-dev |
☔ The latest upstream changes (presumably #19841) made this pull request unmergeable. Please resolve the merge conflicts. |
This more concrete wrapper type can write a prefix the very first time something is written to it. This allows removing plenty of useless monomorphisations caused by the former W/SequenceWriter<W> pair of types.
💔 Test failed - mac-dev-unit |
Now that SequenceWriter<W> does not monomorphise excessively, we can actually type check a derived ToCss without too much type recursion.
04e7cce
to
42c8dc9
Compare
Make ToCss' SequenceWriter not monomorphise like a maniac anymore <!-- 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/19838) <!-- Reviewable:end -->
💔 Test failed - arm32 |
@bors-servo r+ |
📌 Commit 42c8dc9 has been approved by |
@bors-servo p=7 |
Make ToCss' SequenceWriter not monomorphise like a maniac anymore <!-- 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/19838) <!-- Reviewable:end -->
☀️ Test successful - android, arm32, arm64, linux-dev, linux-rel-css, linux-rel-wpt, mac-dev-unit, mac-rel-css1, mac-rel-css2, mac-rel-wpt1, mac-rel-wpt2, mac-rel-wpt3, mac-rel-wpt4, windows-msvc-dev |
Good news! This noticeably reduced build times on Windows. == Change summary for alert #11256 (as of Tue, 23 Jan 2018 16:57:02 GMT) == Improvements: 9% build times windows2012-64 opt rusttests taskcluster-c4.4xlarge 2,321.94 -> 2,103.34 For up to date results, see: https://treeherder.mozilla.org/perf.html#/alerts?id=11256 |
This change is