⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 252419 in webkit


Ignore:
Timestamp:
Nov 13, 2019, 11:22:54 AM (7 years ago)
Author:
Antti Koivisto
Message:

Google Docs spreadsheet tiles render very slowly (because of event region painting)
https://bugs.webkit.org/show_bug.cgi?id=204160
<rdar://problem/57073401>

Reviewed by Simon Fraser.

Source/WebCore:

Content of a overflow:scroll area on this page doesn't cover the entire scrollable area and we end
up generating a complex shape for the event region. This is unnecessary as touches within scrollers
always scroll the content.

Test: fast/scrolling/ios/event-region-scrolled-contents-layer.html

  • rendering/RenderLayerBacking.cpp:

(WebCore::RenderLayerBacking::updateEventRegion):

Initialize event region for scrolled contents layer with layer-sized event region. This optimizes away
event region mutations. We still need to to do the event region paint to capture touch-action regions.

In future we should also improve Region type to not have pathological worst-case performance with complex
shapes.

LayoutTests:

  • fast/scrolling/ios/event-region-scrolled-contents-layer-expected.txt: Added.
  • fast/scrolling/ios/event-region-scrolled-contents-layer.html: Added.
Location:
trunk
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r252412 r252419  
     12019-11-13  Antti Koivisto  <antti@apple.com>
     2
     3        Google Docs spreadsheet tiles render very slowly (because of event region painting)
     4        https://bugs.webkit.org/show_bug.cgi?id=204160
     5        <rdar://problem/57073401>
     6
     7        Reviewed by Simon Fraser.
     8
     9        * fast/scrolling/ios/event-region-scrolled-contents-layer-expected.txt: Added.
     10        * fast/scrolling/ios/event-region-scrolled-contents-layer.html: Added.
     11
    1122019-11-13  Youenn Fablet  <youenn@apple.com>
    213
  • trunk/Source/WebCore/ChangeLog

    r252417 r252419  
     12019-11-13  Antti Koivisto  <antti@apple.com>
     2
     3        Google Docs spreadsheet tiles render very slowly (because of event region painting)
     4        https://bugs.webkit.org/show_bug.cgi?id=204160
     5        <rdar://problem/57073401>
     6
     7        Reviewed by Simon Fraser.
     8
     9        Content of a overflow:scroll area on this page doesn't cover the entire scrollable area and we end
     10        up generating a complex shape for the event region. This is unnecessary as touches within scrollers
     11        always scroll the content.
     12
     13        Test: fast/scrolling/ios/event-region-scrolled-contents-layer.html
     14
     15        * rendering/RenderLayerBacking.cpp:
     16        (WebCore::RenderLayerBacking::updateEventRegion):
     17
     18        Initialize event region for scrolled contents layer with layer-sized event region. This optimizes away
     19        event region mutations. We still need to to do the event region paint to capture touch-action regions.
     20
     21        In future we should also improve Region type to not have pathological worst-case performance with complex
     22        shapes.
     23
    1242019-11-13  Andres Gonzalez  <andresg_22@apple.com>
    225
  • trunk/Source/WebCore/rendering/RenderLayerBacking.cpp

    r252070 r252419  
    16001600        EventRegion eventRegion;
    16011601        auto eventRegionContext = eventRegion.makeContext();
     1602        auto layerOffset = graphicsLayer.scrollOffset() - roundedIntSize(graphicsLayer.offsetFromRenderer());
     1603
     1604        if (&graphicsLayer == m_scrolledContentsLayer && renderer().visibleToHitTesting()) {
     1605            // Initialize scrolled contents layer with layer-sized event region as it can all used for scrolling.
     1606            // This avoids generating unnecessarily complex event regions. We still need to to do the paint to capture touch-action regions.
     1607            eventRegionContext.unite(enclosingIntRect(FloatRect(-layerOffset, graphicsLayer.size())), RenderStyle::defaultStyle());
     1608        }
     1609
    16021610        auto dirtyRect = enclosingIntRect(FloatRect(FloatPoint(graphicsLayer.offsetFromRenderer()), graphicsLayer.size()));
    1603 
    16041611        paintIntoLayer(&graphicsLayer, nullContext, dirtyRect, { }, &eventRegionContext);
    16051612
    1606         auto layerOffset = toIntSize(graphicsLayer.scrollOffset()) - roundedIntSize(graphicsLayer.offsetFromRenderer());
    1607         eventRegion.translate(layerOffset);
     1613        eventRegion.translate(toIntSize(layerOffset));
    16081614
    16091615        graphicsLayer.setEventRegion(WTFMove(eventRegion));
Note: See TracChangeset for help on using the changeset viewer.