Skip to content
  • timothy_horton@apple.com's avatar
    [wk2] Page overlays shouldn't dirty the entire layer when flushing if the main frame can't scroll · a4c83fcf
    timothy_horton@apple.com authored
    https://bugs.webkit.org/show_bug.cgi?id=111662
    <rdar://problem/13355808>
    
    Reviewed by Dean Jackson.
    
    Instead of setNeedsDisplay()ing the whole page overlay layer every time through
    TCADA::flushLayers, do it at scroll time instead. Repainting on scroll is
    necessary to keep things painted in the right place when we scroll (the overlay
    is fixed to the size of the view), but is quite wasteful in apps that don’t scroll.
    
    This works with threaded scrolling because overlay installation forces us
    into main-thread scrolling mode.
    
    * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
    (WebKit::WebFrameLoaderClient::didChangeScrollOffset):
    Plumb scroll offset changes through to the drawing area, so it can invalidate the page overlay.
    * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
    (TiledCoreAnimationDrawingArea):
    Add didChangeScrollOffsetForAnyFrame, for WebFrameLoaderClient to call us back when any frame scrolls.
    * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
    (WebKit::TiledCoreAnimationDrawingArea::didChangeScrollOffsetForAnyFrame):
    Invalidate the page overlay when any frame scrolls, so that find indicators in subframes are kept in the right place.
    (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
    Stop unconditionally invalidating the page overlay when we flush layers.
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@146539 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    a4c83fcf