Summary: | Rubberband scrolling on news.google.com causes text to blink repeatedly | ||||||
---|---|---|---|---|---|---|---|
Product: | WebKit | Reporter: | Elliott Sprehn <esprehn> | ||||
Component: | Layout and Rendering | Assignee: | Simon Fraser (smfr) <simon.fraser> | ||||
Status: | RESOLVED FIXED | ||||||
Severity: | Normal | CC: | bdakin, eric, jamesr, ojan.autocc, simon.fraser, vollick, webkit-bug-importer, webkit.review.bot | ||||
Priority: | P2 | Keywords: | InRadar | ||||
Version: | 528+ (Nightly build) | ||||||
Hardware: | Mac | ||||||
OS: | OS X 10.8 | ||||||
URL: | https://news.google.com | ||||||
Attachments: |
|
Description
Elliott Sprehn
2013-01-18 14:33:07 PST
Note that the sidebar is position: fixed in this scenario, so I think it's rubber banding + position fixed + compositing. The fixed thing is dropping out of a layer briefly, because we think it's layer is at 0,0 in the view (the Y offset should be larger). s/it's/its When we destroy the fixed layer because we think it's outside the viewport, the render tree is actually needing layout: RenderView 0x1180834f8 at (0,0) size 1143x605 (needs layout: positioned child) and the fixed layer has a bogus 0,0 location: layer 0x10d67eca8 at (0,0) size 196x606 scrollWidth 204 (composited, bounds=at (0,0) size 196x605, drawsContent=1, paints into ancestor=0) RenderBlock (positioned) 0x10d69ded8 zI: 99 {DIV} at (0,0) size 196x608 [bgcolor=#FFFFFF] id="nav-menu-wrapper" class="nav nav-one-col-hp jfk-scrollbar-borderless left-nav-pinned" (needs layout: self) RenderBlock 0x10d652d28 {DIV} at (28,3) size 152x553 class="browse-sidebar" Ah, we're actually inside layout at that point: * thread #1: tid = 0x2303, 0x00000001049d14a3 WebCore`WebCore::RenderLayerCompositor::requiresCompositingForPosition(WebCore::RenderObject*, WebCore::RenderLayer const*, WebCore::RenderLayer::ViewportConstrainedNotCompositedReason*) const + 755 at RenderLayerCompositor.cpp:2079, stop reason = breakpoint 8.1 frame #0: 0x00000001049d14a3 WebCore`WebCore::RenderLayerCompositor::requiresCompositingForPosition(WebCore::RenderObject*, WebCore::RenderLayer const*, WebCore::RenderLayer::ViewportConstrainedNotCompositedReason*) const + 755 at RenderLayerCompositor.cpp:2079 frame #1: 0x00000001049cc41d WebCore`WebCore::RenderLayerCompositor::requiresCompositingLayer(WebCore::RenderLayer const*, WebCore::RenderLayer::ViewportConstrainedNotCompositedReason*) const + 381 at RenderLayerCompositor.cpp:1645 frame #2: 0x00000001049ccdba WebCore`WebCore::RenderLayerCompositor::needsToBeComposited(WebCore::RenderLayer const*, WebCore::RenderLayer::ViewportConstrainedNotCompositedReason*) const + 74 at RenderLayerCompositor.cpp:1621 frame #3: 0x00000001049cc937 WebCore`WebCore::RenderLayerCompositor::updateBacking(WebCore::RenderLayer*, WebCore::RenderLayerCompositor::CompositingChangeRepaint) + 71 at RenderLayerCompositor.cpp:566 frame #4: 0x00000001049cd0e3 WebCore`WebCore::RenderLayerCompositor::updateLayerCompositingState(WebCore::RenderLayer*, WebCore::RenderLayerCompositor::CompositingChangeRepaint) + 35 at RenderLayerCompositor.cpp:659 frame #5: 0x000000010499b293 WebCore`WebCore::RenderLayer::updateScrollInfoAfterLayout() + 435 at RenderLayer.cpp:3097 frame #6: 0x0000000104864444 WebCore`WebCore::RenderBlock::updateScrollInfoAfterLayout() + 180 at RenderBlock.cpp:1349 frame #7: 0x0000000104865a0b WebCore`WebCore::RenderBlock::layoutBlock(bool, WebCore::LayoutUnit) + 2779 at RenderBlock.cpp:1589 frame #8: 0x00000001048644ce WebCore`WebCore::RenderBlock::layout() + 126 at RenderBlock.cpp:1363 frame #9: 0x0000000103bb8db6 WebCore`WebCore::RenderObject::layoutIfNeeded() + 54 at RenderObject.h:676 frame #10: 0x0000000104868cb4 WebCore`WebCore::RenderBlock::layoutPositionedObjects(bool, bool) + 724 at RenderBlock.cpp:2711 frame #11: 0x000000010486619e WebCore`WebCore::RenderBlock::simplifiedLayout() + 574 at RenderBlock.cpp:2604 frame #12: 0x000000010486500a WebCore`WebCore::RenderBlock::layoutBlock(bool, WebCore::LayoutUnit) + 218 at RenderBlock.cpp:1485 frame #13: 0x00000001048644ce WebCore`WebCore::RenderBlock::layout() + 126 at RenderBlock.cpp:1363 frame #14: 0x0000000104b3ad54 WebCore`WebCore::RenderView::layoutContent(WebCore::LayoutState const&) + 116 at RenderView.cpp:131 frame #15: 0x0000000104b3b54c WebCore`WebCore::RenderView::layout() + 1148 at RenderView.cpp:215 frame #16: 0x0000000103c4825d WebCore`WebCore::FrameView::layout(bool) + 3261 at FrameView.cpp:1213 frame #17: 0x00000001038f37d6 WebCore`WebCore::Document::updateLayout() + 374 at Document.cpp:1892 frame #18: 0x00000001049a0edd WebCore`WebCore::RenderLayer::hitTest(WebCore::HitTestRequest const&, RenderBlock::updateScrollInfoAfterLayout() is causing premature compositing stuff to happen inside layout. Looks like the code that was added for compositing scrolling is causing this. Created attachment 185393 [details]
Patch
|