Closed
Bug 1486996
Opened 6 years ago
Closed 6 years ago
Console slow reflows - OSX differences depending on Scrollbar visibility (Alway -> slow, other options -> less slow)
Categories
(DevTools :: Console, defect)
DevTools
Console
Tracking
(Not tracked)
RESOLVED
FIXED
People
(Reporter: nchevobbe, Assigned: bradwerth)
References
Details
Attachments
(1 obsolete file)
STR:
0. Go to about:blank
1. Open the console
2. Evaluate the following:
```js
for (let i = 0; i < 500; i ++) {
console.log(i)
}
```
3. When all the log are displayed, type `z` in the input (it shouldn't trigger an autocompletion so it won't pollute the profile)
---
Here's how it looks on my work machine (OSX 10.13.6): https://perfht.ml/2BXGm3V — 2 ~90ms reflows
Here's how it looks on my personal, 9 years old machine (OSX 10.11.6): https://perfht.ml/2wmomuY — 2 _18ms_ reflows
It's almost 5 times faster on my old laptop which is quite surprising to me.
Reporter | ||
Comment 1•6 years ago
|
||
For reference, this is is the same steps on FirefoxDevEdition: https://perfht.ml/2Nyk4Y4 (grid layout, <1ms reflows; we can't really use grid with the design we want now though)
Reporter | ||
Comment 2•6 years ago
|
||
Brad, can you make sense of the differences between OS versions in Comment 0 ?
Assignee | ||
Comment 4•6 years ago
|
||
Okay, at least part of this appears to be about the handling of scrollbars, and whether those scrollbars are visible or not. The slow profile spends a lot of time in a function that behaves differently whether or not the horizontal scrollbar is visible. So, one possible difference between your two machines might be some OS-level preference about when scrollbars should be shown. In current macOS, in System Preferences, the General tab has some options for scrollbars visible:
* Automatically based on mouse or trackpad
* When scrolling
* Always
On my current machine, I have "Always" set, and my guess would be that would provide the best performance since the size of overflow containers would never have to guess if an inline element would cause a horizontal scrollbar to appear. Check those settings on both of your machines (which of course might be different in the older version of macOS) and see if they affect your profile behavior. I'll do my own testing with this setting and see what they do on my machine.
Flags: needinfo?(nchevobbe)
Assignee | ||
Comment 5•6 years ago
|
||
(In reply to Brad Werth [:bradwerth] from comment #4)
> On my current machine, I have "Always" set, and my guess would be that would
> provide the best performance...
Yes, this setting is very likely what is responsible for the difference in your two profiles. Against my prediction, I get much faster reflows with "When scrolling" is selected.
* "Always" 65ms (with a call pattern roughly matching your slow profile)
* "When Scrolling" 9ms (with a call pattern roughly matching your fast profile)
I'll try to figure out why the "Always" setting puts us in such a slow path for flex container layout and what we can do about it in the platform.
Assignee | ||
Comment 6•6 years ago
|
||
(In reply to Brad Werth [:bradwerth] from comment #5)
> I'll try to figure out why the "Always" setting puts us in such a slow path
> for flex container layout and what we can do about it in the platform.
Sorry, to be clear, this slow path is in the nsHTMLScrollFrame::ReflowContents method. The use of flex within the scroll frame may be incidental.
Assignee | ||
Comment 7•6 years ago
|
||
Assignee | ||
Comment 8•6 years ago
|
||
The proposed patch should speed up some nsHTMLScrollFrame::ReflowContents calls, but didn't speed up this one for reasons I don't understand yet.
Reporter | ||
Comment 9•6 years ago
|
||
I confirm the difference in those options between my 2 machines.
Thanks a lot Brad !
Also, I tried setting overflow: hidden to the element that shouldn't overflow and I'm now closer to ~50ms reflows (in comparison to ~90ms prior to that).
Flags: needinfo?(nchevobbe)
Summary: Console slow reflows - OS differences → Console slow reflows - OSX differences depending on Scrollbar visibility (Alway -> slow, other options -> less slow)
Assignee | ||
Comment 10•6 years ago
|
||
There's not much more to do on this issue, I think. We've figured out what is causing the differences in the two profiles. The fact that the flex container itself is a slow reflow is covered in Bug 1482798 which I've reopened and updated with my new understanding of next steps. The patch I wrote for this bug should be put into its own bug, which I will do. That patch doesn't affect this issue since the reflow call pattern here reflows the minimum two times: once without a vertical scrollbar and once with. The proposed patch can't improve on that, though it could improve performance for other cases.
Assignee | ||
Updated•6 years ago
|
Status: NEW → RESOLVED
Closed: 6 years ago
Resolution: --- → FIXED
Assignee | ||
Updated•6 years ago
|
Attachment #9005072 -
Attachment is obsolete: true
You need to log in
before you can comment on or make changes to this bug.
Description
•