Optimize building the non-fast scrollable region with multiple iframes
authorsimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 23 Jan 2018 05:36:42 +0000 (05:36 +0000)
committersimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 23 Jan 2018 05:36:42 +0000 (05:36 +0000)
https://bugs.webkit.org/show_bug.cgi?id=181971

Reviewed by Zalan Bujtas.

Source/WebCore:

AsyncScrollingCoordinator::frameViewLayoutUpdated() is called every time a subframe lays out.
We don't need to eagerly update the non-fast scrollable region at this time; we can just mark
it dirty, and rely on the existing scrolling tree commit code to recompute it.

On my machine this makes fast/frames/lots-of-objects.html no longer a timeout.

* page/scrolling/AsyncScrollingCoordinator.cpp:
(WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):

LayoutTests:

* platform/mac-wk2/TestExpectations: fast/frames/lots-of-objects.html is no longer always a timeout.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@227396 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/platform/mac-wk2/TestExpectations
Source/WebCore/ChangeLog
Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp

index 2eed071..0d456fb 100644 (file)
@@ -1,3 +1,12 @@
+2018-01-22  Simon Fraser  <simon.fraser@apple.com>
+
+        Optimize building the non-fast scrollable region with multiple iframes
+        https://bugs.webkit.org/show_bug.cgi?id=181971
+
+        Reviewed by Zalan Bujtas.
+
+        * platform/mac-wk2/TestExpectations: fast/frames/lots-of-objects.html is no longer always a timeout.
+
 2018-01-22  Jiewen Tan  <jiewen_tan@apple.com>
 
         [WebAuthN] Implement PublicKeyCredential's [[Create]] with a dummy authenticator
index c6b4cfc..6758c31 100644 (file)
@@ -324,7 +324,7 @@ webkit.org/b/167321 tiled-drawing/scrolling/scroll-snap/scroll-snap-proximity-ma
 
 webkit.org/b/148408 tiled-drawing/scrolling/root-overflow-with-mousewheel.html [ Pass Failure Timeout ]
 
-webkit.org/b/139820 fast/frames/lots-of-objects.html [ Timeout ]
+webkit.org/b/139820 fast/frames/lots-of-objects.html [ Pass Timeout ]
 webkit.org/b/139820 fast/frames/lots-of-iframes.html [ Pass Timeout ]
 
 webkit.org/b/145432 media/video-transformed-by-javascript.html [ Failure ]
index 691f1fc..55c21d6 100644 (file)
@@ -1,3 +1,19 @@
+2018-01-22  Simon Fraser  <simon.fraser@apple.com>
+
+        Optimize building the non-fast scrollable region with multiple iframes
+        https://bugs.webkit.org/show_bug.cgi?id=181971
+
+        Reviewed by Zalan Bujtas.
+
+        AsyncScrollingCoordinator::frameViewLayoutUpdated() is called every time a subframe lays out.
+        We don't need to eagerly update the non-fast scrollable region at this time; we can just mark
+        it dirty, and rely on the existing scrolling tree commit code to recompute it.
+
+        On my machine this makes fast/frames/lots-of-objects.html no longer a timeout.
+
+        * page/scrolling/AsyncScrollingCoordinator.cpp:
+        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
+
 2018-01-22  Jiewen Tan  <jiewen_tan@apple.com>
 
         [WebAuthN] Implement PublicKeyCredential's [[Create]] with a dummy authenticator
index 51925ab..5cdbb86 100644 (file)
@@ -123,14 +123,7 @@ void AsyncScrollingCoordinator::frameViewLayoutUpdated(FrameView& frameView)
     if (!m_scrollingStateTree->rootStateNode())
         return;
 
-    // Compute the region of the page that we can't do fast scrolling for. This currently includes
-    // all scrollable areas, such as subframes, overflow divs and list boxes. We need to do this even if the
-    // frame view whose layout was updated is not the main frame.
-    // In the future, we may want to have the ability to set non-fast scrolling regions for more than
-    // just the root node. But right now, this concept only applies to the root.
-    m_scrollingStateTree->rootStateNode()->setEventTrackingRegions(absoluteEventTrackingRegions());
-    m_eventTrackingRegionsDirty = false;
-
+    setEventTrackingRegionsDirty();
     if (!coordinatesScrollingForFrameView(frameView))
         return;