Closed
Bug 1405899
Opened 7 years ago
Closed 6 years ago
stylo: Element::Matches using stylo is slower than using Gecko in some cases
Categories
(Core :: CSS Parsing and Computation, defect, P3)
Tracking
()
RESOLVED
WORKSFORME
Tracking | Status | |
---|---|---|
firefox57 | --- | unaffected |
firefox58 | --- | affected |
People
(Reporter: bzbarsky, Assigned: emilio)
References
Details
Attachments
(1 file)
675 bytes,
text/html
|
Details |
See attached testcase. The "html body" selector is noticeably (10-20%) slower with layout.css.servo.enabled set to true. I didn't test more complicated selectors yet.
Flags: needinfo?(emilio)
Updated•7 years ago
|
Reporter | ||
Comment 1•7 years ago
|
||
57 is not affected, because bug 1404897 is 58-only and I assume we don't plan to backport it to 57.
Reporter | ||
Comment 2•7 years ago
|
||
So just looking at the "html body" selector, a Gecko profile is https://perfht.ml/2xiT8SS and a Stylo profile is https://perfht.ml/2xiBRt4 The main difference is that Stylo seems to spend about 33ms in self time in matches_complex_selector_internal (and another 6ms in matches_complex_selector) while the corresponding time for Gecko (SelectorMatchesTree) seems to be about 8ms. That's not quite right, because parts of matches_complex_selector are inside SelectorMatches in Gecko (which really matches a sequence of simple selectors), but the SelectorMatches calls are comparable in time spent to the matches_simple_selector calls in Stylo... Sadly, I can't get per-line blame with the gecko profiler.
Assignee | ||
Comment 3•7 years ago
|
||
I can't repro this Boris. With stylo enabled I get times that look like: 81.97500000000002 69.94999999999999 95.445 With stylo disabled I get times that look like: 101.22500000000002 90.12500000000006 127.005 There's a bit of noise, but stylo numbers look quite better than Gecko's overall.
Flags: needinfo?(emilio)
Reporter | ||
Comment 4•7 years ago
|
||
Hmm. I tried a build from our infra and I'm getting numbers that are a lot better than my local optimized build. All this on Mac. Let me try updating rustc to 1.20 and seeing whether that changes things...
Reporter | ||
Comment 5•7 years ago
|
||
I'm getting numbers like I was getting before, with rustc 1.20 and local builds. Specifically: Stylo enabled: 84.58 81.56500000000001 125.69999999999999 Stylo disabled: 88.72 73.215 98.13499999999999 With the m-c build I downloaded, I get: Stylo enabled: 80.755 66.865 95.61499999999998 Stylo disabled: 82.13 73.74 98.10500000000002
Comment 6•7 years ago
|
||
Performance regression is quite terrible in certain cases, it is multiple times slower. Please take a look at this comment https://github.com/gorhill/uBlock/issues/3111#issuecomment-335918101 it contains link to the NSFW that is unusable with uBlock Origin after switch to Stylo for Element::Matches. I confirmed that disabling Stylo bring back proper performance. Please tell me if you can reproduce if not I will prepare standalone testcase. But you should be able to reproduce easily, try scrolling page...
Assignee | ||
Comment 7•7 years ago
|
||
(In reply to Kacper Michajłow [:kasper93] from comment #6) > Performance regression is quite terrible in certain cases, it is multiple > times slower. Please take a look at this comment > https://github.com/gorhill/uBlock/issues/3111#issuecomment-335918101 it > contains link to the NSFW that is unusable with uBlock Origin after switch > to Stylo for Element::Matches. I confirmed that disabling Stylo bring back > proper performance. Please tell me if you can reproduce if not I will > prepare standalone testcase. But you should be able to reproduce easily, try > scrolling page... Do you have a selector for that / a test-case? I can look into this tomorrow installing uBlock myself too. Thanks for reaching out!
Flags: needinfo?(kasper93)
Assignee | ||
Updated•7 years ago
|
Flags: needinfo?(emilio)
Assignee | ||
Comment 8•7 years ago
|
||
(Just pointing me to where the selectors that page is testing are defined may save me some time tomorrow, but I definitely plan to look into this)
Assignee: nobody → emilio
I also tried to reproduce on SFW page. Using Nightly 20171011100133, uBlock Origin 1.14.14 with default settings plus "--- Banner sizes ---" section (250 generic filters) from "Adguard Base Filters"[1] copied into My Filters tab in uBlock settings (may be easier to just enable "Adguard Base Filters" in 3rd-party filters tab) Open https://discourse.mozilla.org/ Start profiling Refresh page. Stop after fully loaded. On my system, with `layout.css.servo.enabled;false` processHighHighGeneric[2] takes 435ms - https://perfht.ml/2ycJLJj with `layout.css.servo.enabled;true` - 5105ms - https://perfht.ml/2ybW2NQ` [1]:https://filters.adtidy.org/extension/ublock/filters/2_without_easylist.txt [2]:https://github.com/gorhill/uBlock/blob/master/src/js/contentscript.js?utf8=%E2%9C%93#L1460
Reporter | ||
Comment 10•7 years ago
|
||
I filed bug 1407864 on the uBlock Origin issue from comment 6 and comment 9. Thank you for the profiles! They made this really easy to diagnose. I'd like to keep this bug focused on the problem I was seeing, which is a much smaller and subtler (and maybe limited to my self-builds?) effect.
Flags: needinfo?(kasper93)
Flags: needinfo?(emilio)
Assignee | ||
Comment 11•6 years ago
|
||
This is now considerably _faster_ with Stylo enabled on the current nightly. Part of it may be because the old style system is already not exercised by PGO I presume... Thinking through, I don't know if the measurements of the local opt builds mentioned in comment 5 may be because the default rust opt level for opt is 1 instead of 2, but not sure... Anyway I don't think there's anything actionable here right now. I'm trying to land PGO support in rust this month, that may make this even faster on Stylo.
Status: NEW → RESOLVED
Closed: 6 years ago
Resolution: --- → WORKSFORME
You need to log in
before you can comment on or make changes to this bug.
Description
•