Changeset 76437 in webkit


Ignore:
Timestamp:
Jan 22, 2011 2:00:13 AM (13 years ago)
Author:
enne@google.com
Message:

2011-01-22 Adrienne Walker <enne@google.com>

Reviewed by James Robinson.

[chromium] Fix compositor repaints for offscreen fixed elements
https://bugs.webkit.org/show_bug.cgi?id=52681

The fast path scrolling was clipping offscreen invalidations.
Additionally, the compositor was ignoring all invalidations that were
entirely out of the content rect.

Test: compositing/ to verify this caused no regressions.
Tested fix manually in browser as I could not generate a LayoutTest that reproduced the bug in run-webkit-tests.

  • page/FrameView.cpp: (WebCore::FrameView::scrollContentsFastPath):
  • platform/graphics/chromium/LayerRendererChromium.cpp: (WebCore::LayerRendererChromium::invalidateRootLayerRect):
Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r76433 r76437  
     12011-01-22  Adrienne Walker  <enne@google.com>
     2
     3        Reviewed by James Robinson.
     4
     5        [chromium] Fix compositor repaints for offscreen fixed elements
     6        https://bugs.webkit.org/show_bug.cgi?id=52681
     7
     8        The fast path scrolling was clipping offscreen invalidations.
     9        Additionally, the compositor was ignoring all invalidations that were
     10        entirely out of the content rect.
     11
     12        Test: compositing/ to verify this caused no regressions.
     13        Tested fix manually in browser as I could not generate a LayoutTest that reproduced the bug in run-webkit-tests.
     14
     15        * page/FrameView.cpp:
     16        (WebCore::FrameView::scrollContentsFastPath):
     17        * platform/graphics/chromium/LayerRendererChromium.cpp:
     18        (WebCore::LayerRendererChromium::invalidateRootLayerRect):
     19
    1202011-01-22  Alexey Proskuryakov  <ap@apple.com>
    221
  • trunk/Source/WebCore/page/FrameView.cpp

    r76291 r76437  
    10981098        IntRect updateRect = renderBox->layer()->repaintRectIncludingDescendants();
    10991099        updateRect = contentsToWindow(updateRect);
    1100 
    1101         updateRect.intersect(rectToScroll);
     1100        if (clipsRepaints())
     1101            updateRect.intersect(rectToScroll);
    11021102        if (!updateRect.isEmpty()) {
    11031103            if (subRectToUpdate.size() >= fixedObjectThreshold) {
     
    11211121            scrolledRect.move(scrollDelta);
    11221122            updateRect.unite(scrolledRect);
    1123             updateRect.intersect(rectToScroll);
     1123            if (clipsRepaints())
     1124                updateRect.intersect(rectToScroll);
    11241125            hostWindow()->invalidateContentsAndWindow(updateRect, false);
    11251126        }
  • trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp

    r76299 r76437  
    156156void LayerRendererChromium::invalidateRootLayerRect(const IntRect& dirtyRect, const IntRect& visibleRect, const IntRect& contentRect)
    157157{
    158     if (contentRect.intersects(dirtyRect))
    159         m_rootLayerTiler->invalidateRect(dirtyRect);
     158    m_rootLayerTiler->invalidateRect(dirtyRect);
    160159    if (m_horizontalScrollbarTiler) {
    161160        IntRect scrollbar = horizontalScrollbarRect(visibleRect, contentRect);
Note: See TracChangeset for help on using the changeset viewer.