Changeset 115752 in webkit


Ignore:
Timestamp:
May 1, 2012 3:22:25 PM (12 years ago)
Author:
andersca@apple.com
Message:

Slow scrolling on www.sholby.net
https://bugs.webkit.org/show_bug.cgi?id=85304
<rdar://problem/11138952>

Reviewed by Beth Dakin.

Fix two performance issues that showed up on the profiles.

  • loader/FrameLoader.cpp:

(WebCore::FrameLoader::checkLoadCompleteForThisFrame):
Reset the relevant painted object counter; it's only interesting when loading.

  • page/Page.cpp:

(WebCore::Page::startCountingRelevantRepaintedObjects):
Set m_isCountingRelevantRepaintedObjects to true after calling reset, since reset now sets it to false.

(WebCore::Page::resetRelevantPaintedObjectCounter):
Set m_isCountingRelevantRepaintedObjects to false.

(WebCore::Page::addRelevantRepaintedObject):
Use HashSet::find to avoid an extra hash lookup.

  • page/scrolling/ScrollingCoordinator.cpp:

(WebCore::ScrollingCoordinator::updateMainFrameScrollPositionAndScrollLayerPosition):
Remove the call to FrameView::updateCompositingLayersAfterLayout now, since FrameView::notifyScrollPositionChanged
already calls this and was making us to a lot of work twice.

Location:
trunk/Source/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r115749 r115752  
     12012-05-01  Anders Carlsson  <andersca@apple.com>
     2
     3        Slow scrolling on www.sholby.net
     4        https://bugs.webkit.org/show_bug.cgi?id=85304
     5        <rdar://problem/11138952>
     6
     7        Reviewed by Beth Dakin.
     8
     9        Fix two performance issues that showed up on the profiles.
     10
     11        * loader/FrameLoader.cpp:
     12        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
     13        Reset the relevant painted object counter; it's only interesting when loading.
     14
     15        * page/Page.cpp:
     16        (WebCore::Page::startCountingRelevantRepaintedObjects):
     17        Set m_isCountingRelevantRepaintedObjects to true after calling reset, since reset now sets it to false.
     18
     19        (WebCore::Page::resetRelevantPaintedObjectCounter):
     20        Set m_isCountingRelevantRepaintedObjects to false.
     21
     22        (WebCore::Page::addRelevantRepaintedObject):
     23        Use HashSet::find to avoid an extra hash lookup.
     24
     25        * page/scrolling/ScrollingCoordinator.cpp:
     26        (WebCore::ScrollingCoordinator::updateMainFrameScrollPositionAndScrollLayerPosition):
     27        Remove the call to FrameView::updateCompositingLayersAfterLayout now, since FrameView::notifyScrollPositionChanged
     28        already calls this and was making us to a lot of work twice.
     29
    1302012-05-01  Silvia Pfeiffer  <silviapf@chromium.org>
    231
  • trunk/Source/WebCore/loader/FrameLoader.cpp

    r115654 r115752  
    21032103                return;
    21042104
    2105             if (Page* page = m_frame->page())
     2105            if (Page* page = m_frame->page()) {
    21062106                page->progress()->progressCompleted(m_frame);
     2107
     2108                if (m_frame == page->mainFrame())
     2109                    page->resetRelevantPaintedObjectCounter();
     2110            }
    21072111
    21082112            const ResourceError& error = dl->mainDocumentError();
  • trunk/Source/WebCore/page/Page.cpp

    r115369 r115752  
    10401040void Page::startCountingRelevantRepaintedObjects()
    10411041{
    1042     m_isCountingRelevantRepaintedObjects = true;
    1043 
    10441042    // Reset everything in case we didn't hit the threshold last time.
    10451043    resetRelevantPaintedObjectCounter();
     1044
     1045    m_isCountingRelevantRepaintedObjects = true;
    10461046}
    10471047
    10481048void Page::resetRelevantPaintedObjectCounter()
    10491049{
     1050    m_isCountingRelevantRepaintedObjects = false;
    10501051    m_relevantUnpaintedRenderObjects.clear();
    10511052    m_relevantPaintedRegion = Region();
     
    10681069    // If this object was previously counted as an unpainted object, remove it from that HashSet
    10691070    // and corresponding Region. FIXME: This doesn't do the right thing if the objects overlap.
    1070     if (m_relevantUnpaintedRenderObjects.contains(object)) {
    1071         m_relevantUnpaintedRenderObjects.remove(object);
     1071    HashSet<RenderObject*>::iterator it = m_relevantUnpaintedRenderObjects.find(object);
     1072    if (it != m_relevantUnpaintedRenderObjects.end()) {
     1073        m_relevantUnpaintedRenderObjects.remove(it);
    10721074        m_relevantUnpaintedRegion.subtract(snappedPaintRect);
    10731075    }
  • trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.cpp

    r115681 r115752  
    287287    IntPoint scrollPosition = m_scrollingTree->mainFrameScrollPosition();
    288288
    289     // Make sure to update the main frame scroll position before changing the scroll layer position,
    290     // otherwise we'll introduce jittering on pages with slow repaint objects (like background-attachment: fixed).
    291     frameView->updateCompositingLayersAfterLayout();
    292289    frameView->setConstrainsScrollingToContentEdge(false);
    293290    frameView->notifyScrollPositionChanged(scrollPosition);
Note: See TracChangeset for help on using the changeset viewer.