mirror of
https://github.com/servo/servo.git
synced 2025-10-08 04:29:24 +01:00
stylo: Avoid using InterpolateMatrix as a fallback for matched transform function pair In the current implementation, if there is any interpolation error in a matched transform function pair, we fall-back to use InterpolateMatrix unconditionally. However, the error could be caused by: 1. mismatched transform function pair 2. matched transform function pair within at least one undecomposable matrix. Using InterpolateMatrix for case 1 makes sense, however, using InterpolateMatrix for case 2 does not. According to the spec, we should just report error for case 2, and let the caller do the fallback procedure. Using InterpolateMatrix for case 2 will go through more unnecessary code path, and produce more memory usage and calculation cost, which should be avoidable. In this patch, we add an extra pass to check if a transform function pair have matched operations in advance. With this information, we can easily tell whether the interpolation error in a equal-length transform function pair is caused by case 1 or case 2. So, we can avoid the unnecessary cost. --- <!-- 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 [Bug 1399049](https://bugzilla.mozilla.org/show_bug.cgi?id=1399049) - [X] These changes do not require tests because the change is for some performance gain, and we have tests to ensure that we won't regress the existing behavior already. <!-- 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/18966) <!-- Reviewable:end --> |
||
---|---|---|
.. | ||
allocator | ||
atoms | ||
bluetooth | ||
bluetooth_traits | ||
canvas | ||
canvas_traits | ||
compositing | ||
config | ||
constellation | ||
debugger | ||
deny_public_fields | ||
devtools | ||
devtools_traits | ||
dom_struct | ||
domobject_derive | ||
fallible | ||
geometry | ||
gfx | ||
gfx_traits | ||
hashglobe | ||
jstraceable_derive | ||
layout | ||
layout_thread | ||
layout_traits | ||
lru_cache | ||
malloc_size_of | ||
malloc_size_of_derive | ||
metrics | ||
msg | ||
net | ||
net_traits | ||
nonzero | ||
profile | ||
profile_traits | ||
rand | ||
range | ||
remutex | ||
script | ||
script_layout_interface | ||
script_plugins | ||
script_traits | ||
selectors | ||
servo | ||
servo_arc | ||
size_of_test | ||
style | ||
style_derive | ||
style_traits | ||
url | ||
webdriver_server | ||
webvr | ||
webvr_traits |