RESOLVED FIXED 136433
REGRESSION (r172832): Poor 2-finger scrolling performance at theverge.com articles (all tiles repaint)
https://bugs.webkit.org/show_bug.cgi?id=136433
Summary REGRESSION (r172832): Poor 2-finger scrolling performance at theverge.com art...
mitz
Reported 2014-09-01 12:26:27 PDT
Performing a two-finger scroll gesture on theverge.com articles causes all tiles to repaint, and scrolling either doesn’t happen or happens very slowly. To reproduce, navigate to the URL and two-finger scroll vertically. With repaint counters on, you’ll see that all the tiles repaint with every wheel event (even if the page doesn’t scroll at all). This was cause by <http://trac.webkit.org/r172832>, the fix for bug 91655.
Attachments
Patch (2.60 KB, patch)
2014-09-03 13:54 PDT, Beth Dakin
no flags
Test case (201 bytes, text/html)
2014-09-03 15:59 PDT, Beth Dakin
no flags
Patch (7.67 KB, patch)
2014-09-03 20:10 PDT, Beth Dakin
thorton: review+
mitz
Comment 1 2014-09-01 12:26:39 PDT
Beth Dakin
Comment 2 2014-09-02 13:17:59 PDT
I'm actually having a hard time reproducing the bug at The Verge, but it is very obvious at hulu.com for me.
Beth Dakin
Comment 3 2014-09-03 13:54:38 PDT
Created attachment 237578 [details] Patch Unfortunately, I still don't totally understand what Hulu is doing to get into this state, and therefore I don't have a test case. I have failed so far in my attempts to make a reduction.
Beth Dakin
Comment 4 2014-09-03 15:59:42 PDT
Created attachment 237596 [details] Test case Here's a test case that reproduces the bug! So far I haven't found a way to turn it into a layout test since the bug does not reproduce when scrolling programatically.
Tim Horton
Comment 5 2014-09-03 16:02:20 PDT
(In reply to comment #4) > Created an attachment (id=237596) [details] > Test case > > Here's a test case that reproduces the bug! So far I haven't found a way to turn it into a layout test since the bug does not reproduce when scrolling programatically. What if you use bfulgham's magical scroll event generating internals thing? Those look way more like real scroll events to WebKit IIRC.
Beth Dakin
Comment 6 2014-09-03 20:10:26 PDT
Created attachment 237607 [details] Patch A few notes about this patch. I took Tim's suggestion, and tried to use Brent's momentum events to create a test, and I kind of succeeded. The test seems to work on my machine. I am just dubious because I am not 100% convinced that these momentum events will do the exact same thing on all computers. So I put a note in the test about how if it turns out to be flakey, we can skip it. But! It is effective on my machine. Another note. Sitting with Simon and Sam about this bug, they also want ScrollableArea::handleWheelEvent() to return early is the ScrollableArea is not scrollable or rubberbandable. I am going to implement that in a followup patch because adding a virtual function to ScrollableArea called isScrollableOrRubberbandable() turns out to be a bit complicated for RenderListBox since there is already a virtual function of that same name in its RenderObject inheritance chain. Ah, the joys of multiple inheritance. Anyway, there are obviously solutions to that problem, but it seems involved enough that it should be a separate patch.
Beth Dakin
Comment 7 2014-09-04 12:19:31 PDT
Comment on attachment 237607 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=237607&action=review > LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/root-overflow-with-mousewheel.html:35 > + setTimeout(checkForScroll, 500); Oh, I can get rid of this setTimeout completely, so that's good.
Tim Horton
Comment 8 2014-09-04 13:43:33 PDT
Comment on attachment 237607 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=237607&action=review > Source/WebCore/rendering/RenderLayer.cpp:6401 > + bool needsHorizontalScrollbar = renderer().hasOverflowClip() && ((hasHorizontalScrollbar() && overflowDefinesAutomaticScrollbar(overflowX)) || overflowRequiresScrollbar(overflowX)); we already have our RenderBox in a local, perhaps use that instead? >> LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/root-overflow-with-mousewheel.html:35 >> + setTimeout(checkForScroll, 500); > > Oh, I can get rid of this setTimeout completely, so that's good. Please do! 500ms tests are unwelcome :)
Beth Dakin
Comment 9 2014-09-04 13:48:35 PDT
Note You need to log in before you can comment on or make changes to this bug.