Track a coverage rect through GraphicsLayerCA flushes, use it to mark backing store...
authorsimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 25 Apr 2015 01:02:52 +0000 (01:02 +0000)
committersimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 25 Apr 2015 01:02:52 +0000 (01:02 +0000)
https://bugs.webkit.org/show_bug.cgi?id=144165

Reviewed by Dean Jackson.

Source/WebCore:

Push in the clipRect as the secondary rect when doing a GraphicsLayerCA flush,
which maps this rect through all the layers. Each layer tests intersection with
this rect to determine if its backing store should be attached.

This will cause us to drop backing store for layers that don't intersect the
visible part of the view, which is too aggressive. A future patch will add
some padding.

Tests: compositing/visible-rect/coverage-clipped.html
       compositing/visible-rect/coverage-scrolling.html

* platform/graphics/ca/GraphicsLayerCA.cpp:
(WebCore::GraphicsLayerCA::GraphicsLayerCA): Remove initialization of things with
C++11 initializers. Initialize the new m_intersectsCoverageRect bit.
(WebCore::GraphicsLayerCA::flushCompositingState): Push the clipRect in as the
secondary coverage rect. A future patch will inflate this on the way down the tree.
(WebCore::GraphicsLayerCA::computeVisibleRect): If we're clipping, and
we have a secondary coverage rect, that rect can be clipped to us too.
(WebCore::GraphicsLayerCA::setVisibleAndCoverageRects):
(WebCore::GraphicsLayerCA::recursiveCommitChanges):
(WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
(WebCore::GraphicsLayerCA::updateBackingStoreAttachment):
(WebCore::GraphicsLayerCA::dumpAdditionalProperties):
* platform/graphics/ca/GraphicsLayerCA.h: New CoverageRectChanged bit.
Use more C++11 initializers.
(WebCore::GraphicsLayerCA::coverageRect):

LayoutTests:

Updated results that now include coverage rects, and a new test that includes both visible
and hidden layers.

* compositing/contents-scale/animating-expected.txt:
* compositing/contents-scale/rounded-contents-scale-expected.txt:
* compositing/contents-scale/scaled-ancestor-expected.txt:
* compositing/contents-scale/simple-scale-expected.txt:
* compositing/contents-scale/z-translate-expected.txt:
* compositing/visible-rect/coverage-clipped-expected.txt: Added.
* compositing/visible-rect/coverage-clipped.html: Added.
* compositing/visible-rect/coverage-scrolling-expected.txt: Added.
* compositing/visible-rect/coverage-scrolling.html: Added.
* platform/ios-simulator-wk2/compositing/visible-rect/coverage-clipped-expected.txt: Added.
* platform/ios-simulator-wk2/compositing/visible-rect/coverage-scrolling-expected.txt: Added.
* platform/mac-wk2/compositing/tiling/rotated-tiled-clamped-expected.txt:
* platform/mac-wk2/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt:
* platform/mac-wk2/compositing/tiling/tile-cache-zoomed-expected.txt:
* platform/mac-wk2/compositing/visible-rect/iframe-no-layers-expected.txt:
* platform/mac/compositing/overflow/clipping-behaviour-change-is-not-propagated-to-descendants-expected.txt:
* platform/mac/compositing/overflow/clipping-behaviour-change-is-not-propagated-to-descendants2-expected.txt:
* platform/mac/compositing/tiling/rotated-tiled-clamped-expected.txt:
* platform/mac/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt:
* platform/mac/compositing/tiling/tile-cache-zoomed-expected.txt:
* platform/mac/compositing/visible-rect/2d-transformed-expected.txt:
* platform/mac/compositing/visible-rect/3d-transform-style-expected.txt:
* platform/mac/compositing/visible-rect/3d-transformed-expected.txt:
* platform/mac/compositing/visible-rect/animated-expected.txt:
* platform/mac/compositing/visible-rect/animated-from-none-expected.txt:
* platform/mac/compositing/visible-rect/clipped-by-viewport-expected.txt:
* platform/mac/compositing/visible-rect/clipped-visible-rect-expected.txt:
* platform/mac/compositing/visible-rect/flipped-preserve-3d-expected.txt:
* platform/mac/compositing/visible-rect/iframe-and-layers-expected.txt:
* platform/mac/compositing/visible-rect/iframe-no-layers-expected.txt:
* platform/mac/compositing/visible-rect/nested-transform-expected.txt:
* platform/mac/compositing/visible-rect/scrolled-expected.txt:

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

36 files changed:
LayoutTests/ChangeLog
LayoutTests/compositing/contents-scale/animating-expected.txt
LayoutTests/compositing/contents-scale/rounded-contents-scale-expected.txt
LayoutTests/compositing/contents-scale/scaled-ancestor-expected.txt
LayoutTests/compositing/contents-scale/simple-scale-expected.txt
LayoutTests/compositing/contents-scale/z-translate-expected.txt
LayoutTests/compositing/visible-rect/coverage-clipped-expected.txt [new file with mode: 0644]
LayoutTests/compositing/visible-rect/coverage-clipped.html [new file with mode: 0644]
LayoutTests/compositing/visible-rect/coverage-scrolling-expected.txt [new file with mode: 0644]
LayoutTests/compositing/visible-rect/coverage-scrolling.html [new file with mode: 0644]
LayoutTests/platform/ios-simulator-wk2/compositing/visible-rect/coverage-clipped-expected.txt [new file with mode: 0644]
LayoutTests/platform/ios-simulator-wk2/compositing/visible-rect/coverage-scrolling-expected.txt [new file with mode: 0644]
LayoutTests/platform/mac-wk2/compositing/tiling/rotated-tiled-clamped-expected.txt
LayoutTests/platform/mac-wk2/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt
LayoutTests/platform/mac-wk2/compositing/tiling/tile-cache-zoomed-expected.txt
LayoutTests/platform/mac-wk2/compositing/visible-rect/iframe-no-layers-expected.txt
LayoutTests/platform/mac/compositing/overflow/clipping-behaviour-change-is-not-propagated-to-descendants-expected.txt
LayoutTests/platform/mac/compositing/overflow/clipping-behaviour-change-is-not-propagated-to-descendants2-expected.txt
LayoutTests/platform/mac/compositing/tiling/rotated-tiled-clamped-expected.txt
LayoutTests/platform/mac/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt
LayoutTests/platform/mac/compositing/tiling/tile-cache-zoomed-expected.txt
LayoutTests/platform/mac/compositing/visible-rect/2d-transformed-expected.txt
LayoutTests/platform/mac/compositing/visible-rect/3d-transform-style-expected.txt
LayoutTests/platform/mac/compositing/visible-rect/3d-transformed-expected.txt
LayoutTests/platform/mac/compositing/visible-rect/animated-expected.txt
LayoutTests/platform/mac/compositing/visible-rect/animated-from-none-expected.txt
LayoutTests/platform/mac/compositing/visible-rect/clipped-by-viewport-expected.txt
LayoutTests/platform/mac/compositing/visible-rect/clipped-visible-rect-expected.txt
LayoutTests/platform/mac/compositing/visible-rect/flipped-preserve-3d-expected.txt
LayoutTests/platform/mac/compositing/visible-rect/iframe-and-layers-expected.txt
LayoutTests/platform/mac/compositing/visible-rect/iframe-no-layers-expected.txt
LayoutTests/platform/mac/compositing/visible-rect/nested-transform-expected.txt
LayoutTests/platform/mac/compositing/visible-rect/scrolled-expected.txt
Source/WebCore/ChangeLog
Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp
Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h

index bc2c154..2345d93 100644 (file)
@@ -1,3 +1,46 @@
+2015-04-24  Simon Fraser  <simon.fraser@apple.com>
+
+        Track a coverage rect through GraphicsLayerCA flushes, use it to mark backing store attached
+        https://bugs.webkit.org/show_bug.cgi?id=144165
+
+        Reviewed by Dean Jackson.
+        
+        Updated results that now include coverage rects, and a new test that includes both visible
+        and hidden layers.
+
+        * compositing/contents-scale/animating-expected.txt:
+        * compositing/contents-scale/rounded-contents-scale-expected.txt:
+        * compositing/contents-scale/scaled-ancestor-expected.txt:
+        * compositing/contents-scale/simple-scale-expected.txt:
+        * compositing/contents-scale/z-translate-expected.txt:
+        * compositing/visible-rect/coverage-clipped-expected.txt: Added.
+        * compositing/visible-rect/coverage-clipped.html: Added.
+        * compositing/visible-rect/coverage-scrolling-expected.txt: Added.
+        * compositing/visible-rect/coverage-scrolling.html: Added.
+        * platform/ios-simulator-wk2/compositing/visible-rect/coverage-clipped-expected.txt: Added.
+        * platform/ios-simulator-wk2/compositing/visible-rect/coverage-scrolling-expected.txt: Added.
+        * platform/mac-wk2/compositing/tiling/rotated-tiled-clamped-expected.txt:
+        * platform/mac-wk2/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt:
+        * platform/mac-wk2/compositing/tiling/tile-cache-zoomed-expected.txt:
+        * platform/mac-wk2/compositing/visible-rect/iframe-no-layers-expected.txt:
+        * platform/mac/compositing/overflow/clipping-behaviour-change-is-not-propagated-to-descendants-expected.txt:
+        * platform/mac/compositing/overflow/clipping-behaviour-change-is-not-propagated-to-descendants2-expected.txt:
+        * platform/mac/compositing/tiling/rotated-tiled-clamped-expected.txt:
+        * platform/mac/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt:
+        * platform/mac/compositing/tiling/tile-cache-zoomed-expected.txt:
+        * platform/mac/compositing/visible-rect/2d-transformed-expected.txt:
+        * platform/mac/compositing/visible-rect/3d-transform-style-expected.txt:
+        * platform/mac/compositing/visible-rect/3d-transformed-expected.txt:
+        * platform/mac/compositing/visible-rect/animated-expected.txt:
+        * platform/mac/compositing/visible-rect/animated-from-none-expected.txt:
+        * platform/mac/compositing/visible-rect/clipped-by-viewport-expected.txt:
+        * platform/mac/compositing/visible-rect/clipped-visible-rect-expected.txt:
+        * platform/mac/compositing/visible-rect/flipped-preserve-3d-expected.txt:
+        * platform/mac/compositing/visible-rect/iframe-and-layers-expected.txt:
+        * platform/mac/compositing/visible-rect/iframe-no-layers-expected.txt:
+        * platform/mac/compositing/visible-rect/nested-transform-expected.txt:
+        * platform/mac/compositing/visible-rect/scrolled-expected.txt:
+
 2015-04-21  Geoffrey Garen  <ggaren@apple.com>
 
         It shouldn't take 1846 lines of code and 5 FIXMEs to sort an array.
index 8d729d9..1392a7e 100644 (file)
@@ -3,12 +3,16 @@ Box
   (anchor 0.00 0.00)
   (bounds 800.00 600.00)
   (visible rect 0.00, 0.00 800.00 x 600.00)
+  (coverage rect 0.00, 0.00 800.00 x 600.00)
+  (intersects coverage rect 1)
   (contentsScale 1.00)
   (children 1
     (GraphicsLayer
       (bounds 800.00 600.00)
       (contentsOpaque 1)
       (visible rect 0.00, 0.00 800.00 x 600.00)
+      (coverage rect 0.00, 0.00 800.00 x 600.00)
+      (intersects coverage rect 1)
       (contentsScale 1.00)
       (children 1
         (GraphicsLayer
@@ -19,6 +23,8 @@ Box
           (drawsContent 1)
           (transform [1.50 0.00 0.00 0.00] [0.00 1.50 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 0.00 1.00])
           (visible rect 0.00, 0.00 100.00 x 100.00)
+          (coverage rect 0.00, 0.00 800.00 x 600.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
         )
       )
index 858af1b..8372d67 100644 (file)
@@ -2,12 +2,16 @@
   (anchor 0.00 0.00)
   (bounds 800.00 600.00)
   (visible rect 0.00, 0.00 800.00 x 600.00)
+  (coverage rect 0.00, 0.00 800.00 x 600.00)
+  (intersects coverage rect 1)
   (contentsScale 1.00)
   (children 1
     (GraphicsLayer
       (bounds 800.00 600.00)
       (contentsOpaque 1)
       (visible rect 0.00, 0.00 800.00 x 600.00)
+      (coverage rect 0.00, 0.00 800.00 x 600.00)
+      (intersects coverage rect 1)
       (contentsScale 1.00)
       (children 1
         (GraphicsLayer
@@ -15,6 +19,8 @@
           (bounds 784.00 512.00)
           (childrenTransform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.78 0.51 1.00 -0.00] [0.00 0.00 0.00 1.00])
           (visible rect 0.00, 0.00 784.00 x 512.00)
+          (coverage rect -8.00, -8.00 800.00 x 600.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
           (children 6
             (GraphicsLayer
@@ -23,6 +29,8 @@
               (drawsContent 1)
               (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 -200.00 1.00])
               (visible rect 0.00, 0.00 102.00 x 102.00)
+              (coverage rect -8.00, -8.00 800.00 x 600.00)
+              (intersects coverage rect 1)
               (contentsScale 1.00)
             )
             (GraphicsLayer
@@ -32,6 +40,8 @@
               (drawsContent 1)
               (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 -100.00 1.00])
               (visible rect 0.00, 0.00 102.00 x 102.00)
+              (coverage rect -8.00, -8.00 800.00 x 600.00)
+              (intersects coverage rect 1)
               (contentsScale 1.00)
             )
             (GraphicsLayer
@@ -40,6 +50,8 @@
               (contentsOpaque 1)
               (drawsContent 1)
               (visible rect 0.00, 0.00 102.00 x 102.00)
+              (coverage rect -8.00, -8.00 800.00 x 600.00)
+              (intersects coverage rect 1)
               (contentsScale 1.00)
             )
             (GraphicsLayer
@@ -49,6 +61,8 @@
               (drawsContent 1)
               (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 50.00 1.00])
               (visible rect 0.00, 0.00 102.00 x 102.00)
+              (coverage rect -8.00, -8.00 800.00 x 600.00)
+              (intersects coverage rect 1)
               (contentsScale 1.00)
             )
             (GraphicsLayer
@@ -58,6 +72,8 @@
               (drawsContent 1)
               (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 100.00 1.00])
               (visible rect 0.00, 0.00 102.00 x 102.00)
+              (coverage rect -8.00, -8.00 800.00 x 600.00)
+              (intersects coverage rect 1)
               (contentsScale 1.00)
             )
             (GraphicsLayer
@@ -67,6 +83,8 @@
               (drawsContent 1)
               (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 150.00 1.00])
               (visible rect 0.00, 0.00 102.00 x 4.40)
+              (coverage rect -8.00, -8.00 800.00 x 600.00)
+              (intersects coverage rect 1)
               (contentsScale 1.00)
             )
           )
index eff23b6..9e00140 100644 (file)
@@ -3,12 +3,16 @@ Box
   (anchor 0.00 0.00)
   (bounds 800.00 600.00)
   (visible rect 0.00, 0.00 800.00 x 600.00)
+  (coverage rect 0.00, 0.00 800.00 x 600.00)
+  (intersects coverage rect 1)
   (contentsScale 1.00)
   (children 1
     (GraphicsLayer
       (bounds 800.00 600.00)
       (contentsOpaque 1)
       (visible rect 0.00, 0.00 800.00 x 600.00)
+      (coverage rect 0.00, 0.00 800.00 x 600.00)
+      (intersects coverage rect 1)
       (contentsScale 1.00)
       (children 1
         (GraphicsLayer
@@ -18,6 +22,8 @@ Box
           (drawsContent 1)
           (transform [2.00 0.00 0.00 0.00] [0.00 2.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 0.00 1.00])
           (visible rect 0.00, 0.00 102.00 x 102.00)
+          (coverage rect 0.00, 0.00 800.00 x 600.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
           (children 1
             (GraphicsLayer
@@ -26,6 +32,8 @@ Box
               (contentsOpaque 1)
               (drawsContent 1)
               (visible rect 0.00, 0.00 100.00 x 100.00)
+              (coverage rect -11.00, -11.00 800.00 x 600.00)
+              (intersects coverage rect 1)
               (contentsScale 1.00)
             )
           )
index 2d15a90..94c40f1 100644 (file)
@@ -3,12 +3,16 @@ Box
   (anchor 0.00 0.00)
   (bounds 800.00 600.00)
   (visible rect 0.00, 0.00 800.00 x 600.00)
+  (coverage rect 0.00, 0.00 800.00 x 600.00)
+  (intersects coverage rect 1)
   (contentsScale 1.00)
   (children 1
     (GraphicsLayer
       (bounds 800.00 600.00)
       (contentsOpaque 1)
       (visible rect 0.00, 0.00 800.00 x 600.00)
+      (coverage rect 0.00, 0.00 800.00 x 600.00)
+      (intersects coverage rect 1)
       (contentsScale 1.00)
       (children 1
         (GraphicsLayer
@@ -19,6 +23,8 @@ Box
           (drawsContent 1)
           (transform [2.00 0.00 0.00 0.00] [0.00 2.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 0.00 1.00])
           (visible rect 0.00, 0.00 100.00 x 100.00)
+          (coverage rect 0.00, 0.00 800.00 x 600.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
         )
       )
index 67a82d4..25bbaa2 100644 (file)
@@ -4,12 +4,16 @@ Box
   (anchor 0.00 0.00)
   (bounds 800.00 600.00)
   (visible rect 0.00, 0.00 800.00 x 600.00)
+  (coverage rect 0.00, 0.00 800.00 x 600.00)
+  (intersects coverage rect 1)
   (contentsScale 1.00)
   (children 1
     (GraphicsLayer
       (bounds 800.00 600.00)
       (contentsOpaque 1)
       (visible rect 0.00, 0.00 800.00 x 600.00)
+      (coverage rect 0.00, 0.00 800.00 x 600.00)
+      (intersects coverage rect 1)
       (contentsScale 1.00)
       (children 1
         (GraphicsLayer
@@ -17,6 +21,8 @@ Box
           (bounds 102.00 102.00)
           (childrenTransform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 -0.00] [0.00 0.00 0.00 1.00])
           (visible rect 0.00, 0.00 102.00 x 102.00)
+          (coverage rect -8.00, -8.00 800.00 x 600.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
           (children 1
             (GraphicsLayer
@@ -27,6 +33,8 @@ Box
               (drawsContent 1)
               (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 100.00 1.00])
               (visible rect 0.00, 0.00 100.00 x 100.00)
+              (coverage rect -7.20, -7.20 640.00 x 480.00)
+              (intersects coverage rect 1)
               (contentsScale 1.00)
               (children 1
                 (GraphicsLayer
@@ -37,6 +45,8 @@ Box
                   (drawsContent 1)
                   (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 100.00 1.00])
                   (visible rect 0.00, 0.00 100.00 x 100.00)
+                  (coverage rect -15.40, -33.40 480.00 x 360.00)
+                  (intersects coverage rect 1)
                   (contentsScale 1.00)
                 )
               )
diff --git a/LayoutTests/compositing/visible-rect/coverage-clipped-expected.txt b/LayoutTests/compositing/visible-rect/coverage-clipped-expected.txt
new file mode 100644 (file)
index 0000000..01fcf9d
--- /dev/null
@@ -0,0 +1,123 @@
+       
+(GraphicsLayer
+  (anchor 0.00 0.00)
+  (bounds 785.00 4021.00)
+  (visible rect 0.00, 0.00 785.00 x 600.00)
+  (coverage rect 0.00, 0.00 785.00 x 600.00)
+  (intersects coverage rect 1)
+  (contentsScale 1.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 785.00 4021.00)
+      (contentsOpaque 1)
+      (visible rect 0.00, 0.00 785.00 x 600.00)
+      (coverage rect 0.00, 0.00 785.00 x 600.00)
+      (intersects coverage rect 1)
+      (contentsScale 1.00)
+      (children 1
+        (GraphicsLayer
+          (position 28.00 33.00)
+          (bounds 202.00 202.00)
+          (visible rect 0.00, 0.00 202.00 x 202.00)
+          (coverage rect -28.00, -33.00 785.00 x 600.00)
+          (intersects coverage rect 1)
+          (contentsScale 1.00)
+          (children 1
+            (GraphicsLayer
+              (position 1.00 1.00)
+              (bounds 200.00 200.00)
+              (visible rect 0.00, 0.00 200.00 x 200.00)
+              (coverage rect 0.00, 0.00 200.00 x 200.00)
+              (intersects coverage rect 1)
+              (contentsScale 1.00)
+              (children 9
+                (GraphicsLayer
+                  (position -264.00 22.00)
+                  (bounds 128.00 128.00)
+                  (drawsContent 1)
+                  (visible rect 0.00, 0.00 0.00 x 0.00)
+                  (coverage rect 264.00, -22.00 200.00 x 200.00)
+                  (intersects coverage rect 0)
+                  (contentsScale 1.00)
+                )
+                (GraphicsLayer
+                  (position -140.00 22.00)
+                  (bounds 128.00 128.00)
+                  (drawsContent 1)
+                  (visible rect 0.00, 0.00 0.00 x 0.00)
+                  (coverage rect 140.00, -22.00 200.00 x 200.00)
+                  (intersects coverage rect 0)
+                  (contentsScale 1.00)
+                )
+                (GraphicsLayer
+                  (position -16.00 22.00)
+                  (bounds 128.00 128.00)
+                  (drawsContent 1)
+                  (visible rect 16.00, 0.00 112.00 x 128.00)
+                  (coverage rect 16.00, -22.00 200.00 x 200.00)
+                  (intersects coverage rect 1)
+                  (contentsScale 1.00)
+                )
+                (GraphicsLayer
+                  (position 108.00 22.00)
+                  (bounds 128.00 128.00)
+                  (drawsContent 1)
+                  (visible rect 0.00, 0.00 92.00 x 128.00)
+                  (coverage rect -108.00, -22.00 200.00 x 200.00)
+                  (intersects coverage rect 1)
+                  (contentsScale 1.00)
+                )
+                (GraphicsLayer
+                  (position 232.00 22.00)
+                  (bounds 128.00 128.00)
+                  (drawsContent 1)
+                  (visible rect 0.00, 0.00 0.00 x 0.00)
+                  (coverage rect -232.00, -22.00 200.00 x 200.00)
+                  (intersects coverage rect 0)
+                  (contentsScale 1.00)
+                )
+                (GraphicsLayer
+                  (position 356.00 22.00)
+                  (bounds 128.00 128.00)
+                  (drawsContent 1)
+                  (visible rect 0.00, 0.00 0.00 x 0.00)
+                  (coverage rect -356.00, -22.00 200.00 x 200.00)
+                  (intersects coverage rect 0)
+                  (contentsScale 1.00)
+                )
+                (GraphicsLayer
+                  (position 480.00 22.00)
+                  (bounds 128.00 128.00)
+                  (drawsContent 1)
+                  (visible rect 0.00, 0.00 0.00 x 0.00)
+                  (coverage rect -480.00, -22.00 200.00 x 200.00)
+                  (intersects coverage rect 0)
+                  (contentsScale 1.00)
+                )
+                (GraphicsLayer
+                  (position 604.00 22.00)
+                  (bounds 128.00 128.00)
+                  (drawsContent 1)
+                  (visible rect 0.00, 0.00 0.00 x 0.00)
+                  (coverage rect -604.00, -22.00 200.00 x 200.00)
+                  (intersects coverage rect 0)
+                  (contentsScale 1.00)
+                )
+                (GraphicsLayer
+                  (position -264.00 166.00)
+                  (bounds 128.00 128.00)
+                  (drawsContent 1)
+                  (visible rect 0.00, 0.00 0.00 x 0.00)
+                  (coverage rect 264.00, -166.00 200.00 x 200.00)
+                  (intersects coverage rect 0)
+                  (contentsScale 1.00)
+                )
+              )
+            )
+          )
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/compositing/visible-rect/coverage-clipped.html b/LayoutTests/compositing/visible-rect/coverage-clipped.html
new file mode 100644 (file)
index 0000000..327c5b1
--- /dev/null
@@ -0,0 +1,69 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+    <style>
+        body {
+            height: 4000px;
+        }
+        
+        .container {
+            position: absolute;
+            height: 200px;
+            width: 200px;
+            margin: 20px;
+            border: 1px solid black;
+            overflow: hidden;
+            z-index: 0;
+        }
+        ol {
+            position: relative;
+            width: 1000px;
+            left: -300px;
+        }
+        li {
+            display: inline-block;
+            margin: 20px 10px;
+            height: 100px;
+            width: 100px;
+            border: 10px solid blue;
+            background-color: gray;
+            box-shadow: 0 0 10px black;
+            font-size: 24pt;
+            box-sizing: border-box;
+            -webkit-transform: translateZ(0);
+        }
+    </style>
+    <script>
+        if (window.testRunner)
+            testRunner.dumpAsText();
+
+        function doTest()
+        {
+            if (window.internals)
+                document.getElementById('layers').innerText = internals.layerTreeAsText(document, internals.LAYER_TREE_INCLUDES_VISIBLE_RECTS)
+        }
+
+        window.addEventListener('load', doTest, false);
+    </script>
+</head>
+<body>
+
+<div class="container">
+    <ol>
+        <li></li>
+        <li></li>
+        <li></li>
+        <li></li>
+        <li></li>
+        <li></li>
+        <li></li>
+        <li></li>
+        <li></li>
+    </ol>
+</div>
+<pre id="layers">Layer tree goes here when testing</pre>
+
+</body>
+</html>
+
diff --git a/LayoutTests/compositing/visible-rect/coverage-scrolling-expected.txt b/LayoutTests/compositing/visible-rect/coverage-scrolling-expected.txt
new file mode 100644 (file)
index 0000000..b3e4d95
--- /dev/null
@@ -0,0 +1,111 @@
+(GraphicsLayer
+  (anchor 0.00 0.00)
+  (bounds 785.00 4208.00)
+  (visible rect 0.00, 980.00 785.00 x 600.00)
+  (coverage rect 0.00, 980.00 785.00 x 600.00)
+  (intersects coverage rect 1)
+  (contentsScale 1.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 785.00 4208.00)
+      (contentsOpaque 1)
+      (visible rect 0.00, 980.00 785.00 x 600.00)
+      (coverage rect 0.00, 980.00 785.00 x 600.00)
+      (intersects coverage rect 1)
+      (contentsScale 1.00)
+      (children 9
+        (GraphicsLayer
+          (position 107.00 186.00)
+          (anchor 0.54 0.50)
+          (bounds 355.00 228.00)
+          (drawsContent 1)
+          (visible rect 0.00, 0.00 0.00 x 0.00)
+          (coverage rect -107.00, 794.00 785.00 x 600.00)
+          (intersects coverage rect 0)
+          (contentsScale 1.00)
+        )
+        (GraphicsLayer
+          (position 107.00 586.00)
+          (anchor 0.54 0.50)
+          (bounds 355.00 228.00)
+          (drawsContent 1)
+          (visible rect 0.00, 0.00 0.00 x 0.00)
+          (coverage rect -107.00, 394.00 785.00 x 600.00)
+          (intersects coverage rect 0)
+          (contentsScale 1.00)
+        )
+        (GraphicsLayer
+          (position 107.00 986.00)
+          (anchor 0.54 0.50)
+          (bounds 355.00 228.00)
+          (drawsContent 1)
+          (visible rect 0.00, 0.00 355.00 x 228.00)
+          (coverage rect -107.00, -6.00 785.00 x 600.00)
+          (intersects coverage rect 1)
+          (contentsScale 1.00)
+        )
+        (GraphicsLayer
+          (position 107.00 1386.00)
+          (anchor 0.54 0.50)
+          (bounds 355.00 228.00)
+          (drawsContent 1)
+          (visible rect 0.00, 0.00 355.00 x 194.00)
+          (coverage rect -107.00, -406.00 785.00 x 600.00)
+          (intersects coverage rect 1)
+          (contentsScale 1.00)
+        )
+        (GraphicsLayer
+          (position 107.00 1786.00)
+          (anchor 0.54 0.50)
+          (bounds 355.00 228.00)
+          (drawsContent 1)
+          (visible rect 0.00, 0.00 0.00 x 0.00)
+          (coverage rect -107.00, -806.00 785.00 x 600.00)
+          (intersects coverage rect 0)
+          (contentsScale 1.00)
+        )
+        (GraphicsLayer
+          (position 107.00 2186.00)
+          (anchor 0.54 0.50)
+          (bounds 355.00 228.00)
+          (drawsContent 1)
+          (visible rect 0.00, 0.00 0.00 x 0.00)
+          (coverage rect -107.00, -1206.00 785.00 x 600.00)
+          (intersects coverage rect 0)
+          (contentsScale 1.00)
+        )
+        (GraphicsLayer
+          (position 107.00 2586.00)
+          (anchor 0.54 0.50)
+          (bounds 355.00 228.00)
+          (drawsContent 1)
+          (visible rect 0.00, 0.00 0.00 x 0.00)
+          (coverage rect -107.00, -1606.00 785.00 x 600.00)
+          (intersects coverage rect 0)
+          (contentsScale 1.00)
+        )
+        (GraphicsLayer
+          (position 107.00 2986.00)
+          (anchor 0.54 0.50)
+          (bounds 355.00 228.00)
+          (drawsContent 1)
+          (visible rect 0.00, 0.00 0.00 x 0.00)
+          (coverage rect -107.00, -2006.00 785.00 x 600.00)
+          (intersects coverage rect 0)
+          (contentsScale 1.00)
+        )
+        (GraphicsLayer
+          (position 107.00 3386.00)
+          (anchor 0.54 0.50)
+          (bounds 355.00 228.00)
+          (drawsContent 1)
+          (visible rect 0.00, 0.00 0.00 x 0.00)
+          (coverage rect -107.00, -2406.00 785.00 x 600.00)
+          (intersects coverage rect 0)
+          (contentsScale 1.00)
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/compositing/visible-rect/coverage-scrolling.html b/LayoutTests/compositing/visible-rect/coverage-scrolling.html
new file mode 100644 (file)
index 0000000..895c699
--- /dev/null
@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+    <style>
+        body {
+            height: 4000px;
+        }
+        
+        ol {
+            height: 80%;
+        }
+        li {
+            margin: 200px 100px;
+            height: 200px;
+            width: 300px;
+            border: 10px solid blue;
+            background-color: gray;
+            box-shadow: 0 0 10px black;
+            font-size: 24pt;
+            box-sizing: border-box;
+            -webkit-transform: translateZ(0);
+        }
+    </style>
+    <script>
+        if (window.testRunner) {
+            testRunner.dumpAsText();
+            testRunner.waitUntilDone();
+        }
+
+        function doTest()
+        {
+            window.setTimeout(function() {
+                window.scrollTo(0, 980);
+                if (window.internals)
+                    document.getElementById('layers').innerText = internals.layerTreeAsText(document, internals.LAYER_TREE_INCLUDES_VISIBLE_RECTS)
+
+                if (window.testRunner)
+                    testRunner.notifyDone();
+            }, 0);
+        }
+
+        window.addEventListener('load', doTest, false);
+    </script>
+</head>
+<body>
+
+<ol>
+    <li></li>
+    <li></li>
+    <li></li>
+    <li></li>
+    <li></li>
+    <li></li>
+    <li></li>
+    <li></li>
+    <li></li>
+</ol>
+<pre id="layers">Layer tree goes here when testing</pre>
+
+</body>
+</html>
+
diff --git a/LayoutTests/platform/ios-simulator-wk2/compositing/visible-rect/coverage-clipped-expected.txt b/LayoutTests/platform/ios-simulator-wk2/compositing/visible-rect/coverage-clipped-expected.txt
new file mode 100644 (file)
index 0000000..1f2e367
--- /dev/null
@@ -0,0 +1,97 @@
+       
+(GraphicsLayer
+  (anchor 0.00 0.00)
+  (bounds 800.00 4021.00)
+  (visible rect 0.00, 0.00 800.00 x 600.00)
+  (contentsScale 2.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 4021.00)
+      (contentsOpaque 1)
+      (visible rect 0.00, 0.00 800.00 x 600.00)
+      (contentsScale 2.00)
+      (children 1
+        (GraphicsLayer
+          (position 28.00 33.00)
+          (bounds 202.00 202.00)
+          (visible rect 0.00, 0.00 202.00 x 202.00)
+          (contentsScale 2.00)
+          (children 1
+            (GraphicsLayer
+              (position 1.00 1.00)
+              (bounds 200.00 200.00)
+              (visible rect 0.00, 0.00 200.00 x 200.00)
+              (contentsScale 2.00)
+              (children 9
+                (GraphicsLayer
+                  (position -264.00 22.00)
+                  (bounds 128.00 128.00)
+                  (drawsContent 1)
+                  (visible rect 0.00, 0.00 0.00 x 0.00)
+                  (contentsScale 2.00)
+                )
+                (GraphicsLayer
+                  (position -140.00 22.00)
+                  (bounds 128.00 128.00)
+                  (drawsContent 1)
+                  (visible rect 0.00, 0.00 0.00 x 0.00)
+                  (contentsScale 2.00)
+                )
+                (GraphicsLayer
+                  (position -16.00 22.00)
+                  (bounds 128.00 128.00)
+                  (drawsContent 1)
+                  (visible rect 16.00, 0.00 112.00 x 128.00)
+                  (contentsScale 2.00)
+                )
+                (GraphicsLayer
+                  (position 108.00 22.00)
+                  (bounds 128.00 128.00)
+                  (drawsContent 1)
+                  (visible rect 0.00, 0.00 92.00 x 128.00)
+                  (contentsScale 2.00)
+                )
+                (GraphicsLayer
+                  (position 232.00 22.00)
+                  (bounds 128.00 128.00)
+                  (drawsContent 1)
+                  (visible rect 0.00, 0.00 0.00 x 0.00)
+                  (contentsScale 2.00)
+                )
+                (GraphicsLayer
+                  (position 356.00 22.00)
+                  (bounds 128.00 128.00)
+                  (drawsContent 1)
+                  (visible rect 0.00, 0.00 0.00 x 0.00)
+                  (contentsScale 2.00)
+                )
+                (GraphicsLayer
+                  (position 480.00 22.00)
+                  (bounds 128.00 128.00)
+                  (drawsContent 1)
+                  (visible rect 0.00, 0.00 0.00 x 0.00)
+                  (contentsScale 2.00)
+                )
+                (GraphicsLayer
+                  (position 604.00 22.00)
+                  (bounds 128.00 128.00)
+                  (drawsContent 1)
+                  (visible rect 0.00, 0.00 0.00 x 0.00)
+                  (contentsScale 2.00)
+                )
+                (GraphicsLayer
+                  (position -264.00 167.00)
+                  (bounds 128.00 128.00)
+                  (drawsContent 1)
+                  (visible rect 0.00, 0.00 0.00 x 0.00)
+                  (contentsScale 2.00)
+                )
+              )
+            )
+          )
+        )
+      )
+    )
+  )
+)
+
diff --git a/LayoutTests/platform/ios-simulator-wk2/compositing/visible-rect/coverage-scrolling-expected.txt b/LayoutTests/platform/ios-simulator-wk2/compositing/visible-rect/coverage-scrolling-expected.txt
new file mode 100644 (file)
index 0000000..0c2b492
--- /dev/null
@@ -0,0 +1,89 @@
+(GraphicsLayer
+  (anchor 0.00 0.00)
+  (bounds 800.00 4208.00)
+  (visible rect 0.00, 0.00 800.00 x 600.00)
+  (contentsScale 2.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 4208.00)
+      (contentsOpaque 1)
+      (visible rect 0.00, 0.00 800.00 x 600.00)
+      (contentsScale 2.00)
+      (children 9
+        (GraphicsLayer
+          (position 107.00 186.00)
+          (anchor 0.54 0.50)
+          (bounds 355.00 228.00)
+          (drawsContent 1)
+          (visible rect 0.00, 0.00 355.00 x 228.00)
+          (contentsScale 2.00)
+        )
+        (GraphicsLayer
+          (position 107.00 586.00)
+          (anchor 0.54 0.50)
+          (bounds 355.00 228.00)
+          (drawsContent 1)
+          (visible rect 0.00, 0.00 355.00 x 14.00)
+          (contentsScale 2.00)
+        )
+        (GraphicsLayer
+          (position 107.00 986.00)
+          (anchor 0.54 0.50)
+          (bounds 355.00 228.00)
+          (drawsContent 1)
+          (visible rect 0.00, 0.00 0.00 x 0.00)
+          (contentsScale 2.00)
+        )
+        (GraphicsLayer
+          (position 107.00 1386.00)
+          (anchor 0.54 0.50)
+          (bounds 355.00 228.00)
+          (drawsContent 1)
+          (visible rect 0.00, 0.00 0.00 x 0.00)
+          (contentsScale 2.00)
+        )
+        (GraphicsLayer
+          (position 107.00 1786.00)
+          (anchor 0.54 0.50)
+          (bounds 355.00 228.00)
+          (drawsContent 1)
+          (visible rect 0.00, 0.00 0.00 x 0.00)
+          (contentsScale 2.00)
+        )
+        (GraphicsLayer
+          (position 107.00 2186.00)
+          (anchor 0.54 0.50)
+          (bounds 355.00 228.00)
+          (drawsContent 1)
+          (visible rect 0.00, 0.00 0.00 x 0.00)
+          (contentsScale 2.00)
+        )
+        (GraphicsLayer
+          (position 107.00 2586.00)
+          (anchor 0.54 0.50)
+          (bounds 355.00 228.00)
+          (drawsContent 1)
+          (visible rect 0.00, 0.00 0.00 x 0.00)
+          (contentsScale 2.00)
+        )
+        (GraphicsLayer
+          (position 107.00 2986.00)
+          (anchor 0.54 0.50)
+          (bounds 355.00 228.00)
+          (drawsContent 1)
+          (visible rect 0.00, 0.00 0.00 x 0.00)
+          (contentsScale 2.00)
+        )
+        (GraphicsLayer
+          (position 107.00 3386.00)
+          (anchor 0.54 0.50)
+          (bounds 355.00 228.00)
+          (drawsContent 1)
+          (visible rect 0.00, 0.00 0.00 x 0.00)
+          (contentsScale 2.00)
+        )
+      )
+    )
+  )
+)
+
index 9638546..620b22f 100644 (file)
@@ -2,12 +2,16 @@
   (anchor 0.00 0.00)
   (bounds 800.00 600.00)
   (visible rect 0.00, 0.00 800.00 x 600.00)
+  (coverage rect 0.00, 0.00 800.00 x 600.00)
+  (intersects coverage rect 1)
   (contentsScale 1.00)
   (children 1
     (GraphicsLayer
       (bounds 800.00 600.00)
       (contentsOpaque 1)
       (visible rect 0.00, 0.00 800.00 x 600.00)
+      (coverage rect 0.00, 0.00 800.00 x 600.00)
+      (intersects coverage rect 1)
       (contentsScale 1.00)
       (tile cache coverage 0, 0 800 x 600)
       (tile size 512 x 512)
@@ -17,6 +21,8 @@
           (position 58.00 50.00)
           (bounds 502.00 302.00)
           (visible rect 0.00, 0.00 502.00 x 302.00)
+          (coverage rect -58.00, -50.00 800.00 x 600.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
           (children 1
             (GraphicsLayer
@@ -24,6 +30,8 @@
               (bounds 500.00 300.00)
               (childrenTransform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 -0.00] [0.00 0.00 0.00 1.00])
               (visible rect 0.00, 0.00 500.00 x 300.00)
+              (coverage rect 0.00, 0.00 500.00 x 300.00)
+              (intersects coverage rect 1)
               (contentsScale 1.00)
               (children 1
                 (GraphicsLayer
@@ -35,6 +43,8 @@
                   (drawsContent 1)
                   (transform [0.17 0.00 -0.98 0.00] [0.00 1.00 0.00 0.00] [0.98 0.00 0.17 0.00] [0.00 0.00 0.00 1.00])
                   (visible rect 0.00, 0.00 2800.00 x 300.00)
+                  (coverage rect 0.00, 0.00 500.00 x 300.00)
+                  (intersects coverage rect 1)
                   (contentsScale 1.00)
                   (tile cache coverage 0, 0 2800 x 300)
                   (tile size 512 x 512)
index 42cdd77..6b050af 100644 (file)
@@ -2,12 +2,16 @@
   (anchor 0.00 0.00)
   (bounds 800.00 600.00)
   (visible rect 0.00, 0.00 800.00 x 600.00)
+  (coverage rect 0.00, 0.00 800.00 x 600.00)
+  (intersects coverage rect 1)
   (contentsScale 1.00)
   (children 1
     (GraphicsLayer
       (bounds 800.00 600.00)
       (contentsOpaque 1)
       (visible rect 0.00, 0.00 800.00 x 600.00)
+      (coverage rect 0.00, 0.00 800.00 x 600.00)
+      (intersects coverage rect 1)
       (contentsScale 1.00)
       (tile cache coverage 0, 0 800 x 600)
       (tile size 512 x 512)
@@ -17,6 +21,8 @@
           (position 58.00 50.00)
           (bounds 502.00 302.00)
           (visible rect 0.00, 0.00 502.00 x 302.00)
+          (coverage rect -58.00, -50.00 800.00 x 600.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
           (children 1
             (GraphicsLayer
               (bounds 500.00 300.00)
               (childrenTransform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 -0.00] [0.00 0.00 0.00 1.00])
               (visible rect 0.00, 0.00 500.00 x 300.00)
+              (coverage rect 0.00, 0.00 500.00 x 300.00)
+              (intersects coverage rect 1)
               (contentsScale 1.00)
               (children 1
                 (GraphicsLayer
                   (preserves3D 1)
                   (visible rect 0.00, 0.00 0.00 x 0.00)
+                  (coverage rect 0.00, 0.00 500.00 x 300.00)
+                  (intersects coverage rect 0)
                   (contentsScale 1.00)
                   (children 1
                     (GraphicsLayer
@@ -40,6 +50,8 @@
                       (drawsContent 1)
                       (transform [0.17 0.00 -0.98 0.00] [0.00 1.00 0.00 0.00] [0.98 0.00 0.17 0.00] [0.00 0.00 0.00 1.00])
                       (visible rect 0.00, 0.00 2800.00 x 300.00)
+                      (coverage rect -1562500.00, -1562500.00 1563571.88 x 1562694.63)
+                      (intersects coverage rect 1)
                       (contentsScale 1.00)
                       (tile cache coverage 0, 0 2800 x 300)
                       (tile size 512 x 512)
index 52e11ef..8fb766a 100644 (file)
@@ -2,6 +2,8 @@
   (anchor 0.00 0.00)
   (bounds 1932.00 4150.00)
   (visible rect 0.00, 0.00 785.00 x 585.00)
+  (coverage rect 0.00, 0.00 785.00 x 585.00)
+  (intersects coverage rect 1)
   (contentsScale 1.00)
   (children 1
     (GraphicsLayer
@@ -10,6 +12,8 @@
       (contentsOpaque 1)
       (transform [1.60 0.00 0.00 0.00] [0.00 1.60 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 0.00 1.00])
       (visible rect 0.00, 0.00 490.63 x 365.63)
+      (coverage rect 0.00, 0.00 785.00 x 585.00)
+      (intersects coverage rect 1)
       (contentsScale 1.60)
       (tile cache coverage 0, 0 640 x 640)
       (tile size 512 x 512)
@@ -21,6 +25,8 @@
           (contentsOpaque 1)
           (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 1.00 1.00])
           (visible rect 0.00, 0.00 482.63 x 357.63)
+          (coverage rect 0.00, 0.00 785.00 x 585.00)
+          (intersects coverage rect 1)
           (contentsScale 1.60)
         )
       )
index 35127c6..fdb67d0 100644 (file)
@@ -3,12 +3,16 @@
   (anchor 0.00 0.00)
   (bounds 1508.00 1516.00)
   (visible rect 10.00, 100.00 285.00 x 135.00)
+  (coverage rect 10.00, 100.00 285.00 x 135.00)
+  (intersects coverage rect 1)
   (contentsScale 1.00)
   (children 1
     (GraphicsLayer
       (bounds 1508.00 1516.00)
       (drawsContent 1)
       (visible rect 10.00, 100.00 285.00 x 135.00)
+      (coverage rect 10.00, 100.00 285.00 x 135.00)
+      (intersects coverage rect 1)
       (contentsScale 1.00)
       (children 1
         (GraphicsLayer
@@ -18,6 +22,8 @@
           (drawsContent 1)
           (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 1.00 1.00])
           (visible rect 2.00, 92.00 98.00 x 135.00)
+          (coverage rect 10.00, 100.00 285.00 x 135.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
         )
       )
index 7d52fff..0c77d00 100644 (file)
@@ -8,12 +8,16 @@ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
   (anchor 0.00 0.00)
   (bounds 807.00 585.00)
   (visible rect 0.00, 0.00 800.00 x 585.00)
+  (coverage rect 0.00, 0.00 800.00 x 585.00)
+  (intersects coverage rect 1)
   (contentsScale 1.00)
   (children 1
     (GraphicsLayer
       (bounds 807.00 585.00)
       (contentsOpaque 1)
       (visible rect 0.00, 0.00 800.00 x 585.00)
+      (coverage rect 0.00, 0.00 800.00 x 585.00)
+      (intersects coverage rect 1)
       (contentsScale 1.00)
       (children 6
         (GraphicsLayer
@@ -21,6 +25,8 @@ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
           (bounds 22.00 22.00)
           (drawsContent 1)
           (visible rect 0.00, 0.00 22.00 x 22.00)
+          (coverage rect -8.00, -96.00 800.00 x 585.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
         )
         (GraphicsLayer
@@ -28,6 +34,8 @@ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
           (bounds 22.00 22.00)
           (drawsContent 1)
           (visible rect 0.00, 0.00 22.00 x 22.00)
+          (coverage rect -8.00, -138.00 800.00 x 585.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
         )
         (GraphicsLayer
@@ -35,18 +43,24 @@ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
           (bounds 102.00 20.00)
           (drawsContent 1)
           (visible rect 0.00, 0.00 102.00 x 20.00)
+          (coverage rect -8.00, -86.00 800.00 x 585.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
         )
         (GraphicsLayer
           (position 9.00 87.00)
           (bounds 100.00 18.00)
           (visible rect 0.00, 0.00 100.00 x 18.00)
+          (coverage rect 0.00, 0.00 100.00 x 18.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
           (children 1
             (GraphicsLayer
               (bounds 100.00 18.00)
               (drawsContent 1)
               (visible rect 0.00, 0.00 100.00 x 18.00)
+              (coverage rect 0.00, 0.00 100.00 x 18.00)
+              (intersects coverage rect 1)
               (contentsScale 1.00)
             )
           )
@@ -56,6 +70,8 @@ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
           (bounds 102.00 20.00)
           (drawsContent 1)
           (visible rect 0.00, 0.00 102.00 x 20.00)
+          (coverage rect -8.00, -128.00 800.00 x 585.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
         )
         (GraphicsLayer
@@ -63,6 +79,8 @@ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
           (bounds 807.00 18.00)
           (drawsContent 1)
           (visible rect 0.00, 0.00 800.00 x 18.00)
+          (coverage rect 0.00, -129.00 800.00 x 585.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
         )
       )
index ee434af..ac2b42c 100644 (file)
@@ -8,12 +8,16 @@ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
   (anchor 0.00 0.00)
   (bounds 807.00 585.00)
   (visible rect 0.00, 0.00 800.00 x 585.00)
+  (coverage rect 0.00, 0.00 800.00 x 585.00)
+  (intersects coverage rect 1)
   (contentsScale 1.00)
   (children 1
     (GraphicsLayer
       (bounds 807.00 585.00)
       (contentsOpaque 1)
       (visible rect 0.00, 0.00 800.00 x 585.00)
+      (coverage rect 0.00, 0.00 800.00 x 585.00)
+      (intersects coverage rect 1)
       (contentsScale 1.00)
       (children 6
         (GraphicsLayer
@@ -21,6 +25,8 @@ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
           (bounds 22.00 22.00)
           (drawsContent 1)
           (visible rect 0.00, 0.00 22.00 x 22.00)
+          (coverage rect -8.00, -96.00 800.00 x 585.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
         )
         (GraphicsLayer
@@ -28,6 +34,8 @@ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
           (bounds 22.00 22.00)
           (drawsContent 1)
           (visible rect 0.00, 0.00 22.00 x 22.00)
+          (coverage rect -8.00, -138.00 800.00 x 585.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
         )
         (GraphicsLayer
@@ -35,18 +43,24 @@ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
           (bounds 102.00 20.00)
           (drawsContent 1)
           (visible rect 0.00, 0.00 102.00 x 20.00)
+          (coverage rect -8.00, -86.00 800.00 x 585.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
         )
         (GraphicsLayer
           (position 9.00 87.00)
           (bounds 100.00 18.00)
           (visible rect 0.00, 0.00 100.00 x 18.00)
+          (coverage rect 0.00, 0.00 100.00 x 18.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
           (children 1
             (GraphicsLayer
               (bounds 100.00 18.00)
               (drawsContent 1)
               (visible rect 0.00, 0.00 100.00 x 18.00)
+              (coverage rect 0.00, 0.00 100.00 x 18.00)
+              (intersects coverage rect 1)
               (contentsScale 1.00)
             )
           )
@@ -56,6 +70,8 @@ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
           (bounds 102.00 20.00)
           (drawsContent 1)
           (visible rect 0.00, 0.00 102.00 x 20.00)
+          (coverage rect -8.00, -128.00 800.00 x 585.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
         )
         (GraphicsLayer
@@ -63,6 +79,8 @@ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
           (bounds 798.00 18.00)
           (drawsContent 1)
           (visible rect 0.00, 0.00 791.00 x 18.00)
+          (coverage rect -9.00, -129.00 800.00 x 585.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
         )
       )
index bfbb990..c994c63 100644 (file)
@@ -2,18 +2,24 @@
   (anchor 0.00 0.00)
   (bounds 800.00 600.00)
   (visible rect 0.00, 0.00 800.00 x 600.00)
+  (coverage rect 0.00, 0.00 800.00 x 600.00)
+  (intersects coverage rect 1)
   (contentsScale 1.00)
   (children 1
     (GraphicsLayer
       (bounds 800.00 600.00)
       (contentsOpaque 1)
       (visible rect 0.00, 0.00 800.00 x 600.00)
+      (coverage rect 0.00, 0.00 800.00 x 600.00)
+      (intersects coverage rect 1)
       (contentsScale 1.00)
       (children 1
         (GraphicsLayer
           (position 58.00 50.00)
           (bounds 502.00 302.00)
           (visible rect 0.00, 0.00 502.00 x 302.00)
+          (coverage rect -58.00, -50.00 800.00 x 600.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
           (children 1
             (GraphicsLayer
@@ -21,6 +27,8 @@
               (bounds 500.00 300.00)
               (childrenTransform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 -0.00] [0.00 0.00 0.00 1.00])
               (visible rect 0.00, 0.00 500.00 x 300.00)
+              (coverage rect 0.00, 0.00 500.00 x 300.00)
+              (intersects coverage rect 1)
               (contentsScale 1.00)
               (children 1
                 (GraphicsLayer
@@ -32,6 +40,8 @@
                   (drawsContent 1)
                   (transform [0.17 0.00 -0.98 0.00] [0.00 1.00 0.00 0.00] [0.98 0.00 0.17 0.00] [0.00 0.00 0.00 1.00])
                   (visible rect 0.00, 0.00 2800.00 x 300.00)
+                  (coverage rect 0.00, 0.00 500.00 x 300.00)
+                  (intersects coverage rect 1)
                   (contentsScale 1.00)
                   (tile cache coverage 0, 0 2800 x 300)
                   (tile size 512 x 512)
index 8a1cbde..4f0fe6f 100644 (file)
@@ -2,18 +2,24 @@
   (anchor 0.00 0.00)
   (bounds 800.00 600.00)
   (visible rect 0.00, 0.00 800.00 x 600.00)
+  (coverage rect 0.00, 0.00 800.00 x 600.00)
+  (intersects coverage rect 1)
   (contentsScale 1.00)
   (children 1
     (GraphicsLayer
       (bounds 800.00 600.00)
       (contentsOpaque 1)
       (visible rect 0.00, 0.00 800.00 x 600.00)
+      (coverage rect 0.00, 0.00 800.00 x 600.00)
+      (intersects coverage rect 1)
       (contentsScale 1.00)
       (children 1
         (GraphicsLayer
           (position 58.00 50.00)
           (bounds 502.00 302.00)
           (visible rect 0.00, 0.00 502.00 x 302.00)
+          (coverage rect -58.00, -50.00 800.00 x 600.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
           (children 1
             (GraphicsLayer
               (bounds 500.00 300.00)
               (childrenTransform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 -0.00] [0.00 0.00 0.00 1.00])
               (visible rect 0.00, 0.00 500.00 x 300.00)
+              (coverage rect 0.00, 0.00 500.00 x 300.00)
+              (intersects coverage rect 1)
               (contentsScale 1.00)
               (children 1
                 (GraphicsLayer
                   (preserves3D 1)
                   (visible rect 0.00, 0.00 0.00 x 0.00)
+                  (coverage rect 0.00, 0.00 500.00 x 300.00)
+                  (intersects coverage rect 0)
                   (contentsScale 1.00)
                   (children 1
                     (GraphicsLayer
@@ -37,6 +47,8 @@
                       (drawsContent 1)
                       (transform [0.17 0.00 -0.98 0.00] [0.00 1.00 0.00 0.00] [0.98 0.00 0.17 0.00] [0.00 0.00 0.00 1.00])
                       (visible rect 0.00, 0.00 2800.00 x 300.00)
+                      (coverage rect -1562500.00, -1562500.00 1563571.88 x 1562694.63)
+                      (intersects coverage rect 1)
                       (contentsScale 1.00)
                       (tile cache coverage 0, 0 2800 x 300)
                       (tile size 512 x 512)
index 6808629..ecc0171 100644 (file)
@@ -2,6 +2,8 @@
   (anchor 0.00 0.00)
   (bounds 1932.00 4150.00)
   (visible rect 0.00, 0.00 785.00 x 585.00)
+  (coverage rect 0.00, 0.00 785.00 x 585.00)
+  (intersects coverage rect 1)
   (contentsScale 1.00)
   (children 1
     (GraphicsLayer
@@ -10,6 +12,8 @@
       (contentsOpaque 1)
       (transform [1.60 0.00 0.00 0.00] [0.00 1.60 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 0.00 1.00])
       (visible rect 0.00, 0.00 490.63 x 365.63)
+      (coverage rect 0.00, 0.00 785.00 x 585.00)
+      (intersects coverage rect 1)
       (contentsScale 1.60)
       (children 1
         (GraphicsLayer
@@ -18,6 +22,8 @@
           (contentsOpaque 1)
           (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 1.00 1.00])
           (visible rect 0.00, 0.00 482.63 x 357.63)
+          (coverage rect 0.00, 0.00 785.00 x 585.00)
+          (intersects coverage rect 1)
           (contentsScale 1.60)
         )
       )
index 32d54b5..27566f4 100644 (file)
@@ -2,24 +2,32 @@
   (anchor 0.00 0.00)
   (bounds 800.00 600.00)
   (visible rect 0.00, 0.00 800.00 x 600.00)
+  (coverage rect 0.00, 0.00 800.00 x 600.00)
+  (intersects coverage rect 1)
   (contentsScale 1.00)
   (children 1
     (GraphicsLayer
       (bounds 800.00 600.00)
       (contentsOpaque 1)
       (visible rect 0.00, 0.00 800.00 x 600.00)
+      (coverage rect 0.00, 0.00 800.00 x 600.00)
+      (intersects coverage rect 1)
       (contentsScale 1.00)
       (children 1
         (GraphicsLayer
           (position 8.00 8.00)
           (bounds 502.00 202.00)
           (visible rect 0.00, 0.00 502.00 x 202.00)
+          (coverage rect -8.00, -8.00 800.00 x 600.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
           (children 1
             (GraphicsLayer
               (position 1.00 1.00)
               (bounds 500.00 200.00)
               (visible rect 0.00, 0.00 500.00 x 200.00)
+              (coverage rect 0.00, 0.00 500.00 x 200.00)
+              (intersects coverage rect 1)
               (contentsScale 1.00)
               (children 3
                 (GraphicsLayer
@@ -27,6 +35,8 @@
                   (contentsOpaque 1)
                   (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [-100.00 0.00 0.00 1.00])
                   (visible rect 100.00, 0.00 100.00 x 200.00)
+                  (coverage rect 100.00, 0.00 500.00 x 200.00)
+                  (intersects coverage rect 1)
                   (contentsScale 1.00)
                 )
                 (GraphicsLayer
@@ -34,6 +44,8 @@
                   (contentsOpaque 1)
                   (transform [0.71 0.71 0.00 0.00] [-0.71 0.71 0.00 0.00] [0.00 0.00 1.00 0.00] [150.00 0.00 0.00 1.00])
                   (visible rect 0.00, 0.00 200.00 x 200.00)
+                  (coverage rect 0.00, 0.00 500.00 x 200.00)
+                  (intersects coverage rect 1)
                   (contentsScale 1.00)
                 )
                 (GraphicsLayer
@@ -41,6 +53,8 @@
                   (contentsOpaque 1)
                   (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [400.00 0.00 0.00 1.00])
                   (visible rect 0.00, 0.00 100.00 x 200.00)
+                  (coverage rect -400.00, 0.00 500.00 x 200.00)
+                  (intersects coverage rect 1)
                   (contentsScale 1.00)
                 )
               )
index a96f17e..dc44d09 100644 (file)
@@ -2,18 +2,24 @@
   (anchor 0.00 0.00)
   (bounds 800.00 600.00)
   (visible rect 0.00, 0.00 800.00 x 600.00)
+  (coverage rect 0.00, 0.00 800.00 x 600.00)
+  (intersects coverage rect 1)
   (contentsScale 1.00)
   (children 1
     (GraphicsLayer
       (bounds 800.00 600.00)
       (contentsOpaque 1)
       (visible rect 0.00, 0.00 800.00 x 600.00)
+      (coverage rect 0.00, 0.00 800.00 x 600.00)
+      (intersects coverage rect 1)
       (contentsScale 1.00)
       (children 2
         (GraphicsLayer
           (position 18.00 10.00)
           (bounds 204.00 204.00)
           (visible rect 0.00, 0.00 204.00 x 204.00)
+          (coverage rect -18.00, -10.00 800.00 x 600.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
           (children 1
             (GraphicsLayer
               (bounds 200.00 200.00)
               (childrenTransform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.07 0.07 1.00 -0.00] [0.00 0.00 0.00 1.00])
               (visible rect 0.00, 0.00 200.00 x 200.00)
+              (coverage rect 0.00, 0.00 200.00 x 200.00)
+              (intersects coverage rect 1)
               (contentsScale 1.00)
               (children 1
                 (GraphicsLayer
                   (preserves3D 1)
                   (visible rect 0.00, 0.00 0.00 x 0.00)
+                  (coverage rect 0.00, 0.00 200.00 x 200.00)
+                  (intersects coverage rect 0)
                   (contentsScale 1.00)
                   (children 1
                     (GraphicsLayer
@@ -33,6 +43,8 @@
                       (contentsOpaque 1)
                       (transform [1.00 0.00 0.00 0.00] [0.00 0.91 0.42 0.00] [0.00 -0.42 0.91 0.00] [0.00 0.00 0.00 1.00])
                       (visible rect 0.00, 0.00 213.67 x 200.68)
+                      (coverage rect -4.32, -20.27 217.99 x 220.95)
+                      (intersects coverage rect 1)
                       (contentsScale 1.00)
                     )
                   )
@@ -45,6 +57,8 @@
           (position 18.00 224.00)
           (bounds 204.00 204.00)
           (visible rect 0.00, 0.00 204.00 x 204.00)
+          (coverage rect -18.00, -224.00 800.00 x 600.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
           (children 1
             (GraphicsLayer
               (bounds 200.00 200.00)
               (childrenTransform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.07 0.07 1.00 -0.00] [0.00 0.00 0.00 1.00])
               (visible rect 0.00, 0.00 200.00 x 200.00)
+              (coverage rect 0.00, 0.00 200.00 x 200.00)
+              (intersects coverage rect 1)
               (contentsScale 1.00)
               (children 1
                 (GraphicsLayer
                   (preserves3D 1)
                   (visible rect 0.00, 0.00 0.00 x 0.00)
+                  (coverage rect 0.00, 0.00 200.00 x 200.00)
+                  (intersects coverage rect 0)
                   (contentsScale 1.00)
                   (children 1
                     (GraphicsLayer
@@ -64,6 +82,8 @@
                       (contentsOpaque 1)
                       (transform [0.91 0.00 0.42 0.00] [0.00 1.00 0.00 0.00] [-0.42 0.00 0.91 0.00] [0.00 0.00 0.00 1.00])
                       (visible rect 0.00, 0.00 200.68 x 213.67)
+                      (coverage rect -20.27, -4.32 220.95 x 217.99)
+                      (intersects coverage rect 1)
                       (contentsScale 1.00)
                     )
                   )
index 322557e..0f6349d 100644 (file)
@@ -2,18 +2,24 @@
   (anchor 0.00 0.00)
   (bounds 800.00 600.00)
   (visible rect 0.00, 0.00 800.00 x 600.00)
+  (coverage rect 0.00, 0.00 800.00 x 600.00)
+  (intersects coverage rect 1)
   (contentsScale 1.00)
   (children 1
     (GraphicsLayer
       (bounds 800.00 600.00)
       (contentsOpaque 1)
       (visible rect 0.00, 0.00 800.00 x 600.00)
+      (coverage rect 0.00, 0.00 800.00 x 600.00)
+      (intersects coverage rect 1)
       (contentsScale 1.00)
       (children 2
         (GraphicsLayer
           (position 18.00 10.00)
           (bounds 204.00 204.00)
           (visible rect 0.00, 0.00 204.00 x 204.00)
+          (coverage rect -18.00, -10.00 800.00 x 600.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
           (children 1
             (GraphicsLayer
@@ -21,6 +27,8 @@
               (bounds 200.00 200.00)
               (childrenTransform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.07 0.07 1.00 -0.00] [0.00 0.00 0.00 1.00])
               (visible rect 0.00, 0.00 200.00 x 200.00)
+              (coverage rect 0.00, 0.00 200.00 x 200.00)
+              (intersects coverage rect 1)
               (contentsScale 1.00)
               (children 1
                 (GraphicsLayer
@@ -29,6 +37,8 @@
                   (contentsOpaque 1)
                   (transform [1.00 0.00 0.00 0.00] [0.00 0.71 0.71 0.00] [0.00 -0.71 0.71 0.00] [0.00 0.00 0.00 1.00])
                   (visible rect 0.00, 0.00 220.62 x 218.46)
+                  (coverage rect 0.00, 0.00 200.00 x 200.00)
+                  (intersects coverage rect 1)
                   (contentsScale 1.00)
                 )
               )
@@ -39,6 +49,8 @@
           (position 18.00 224.00)
           (bounds 204.00 204.00)
           (visible rect 0.00, 0.00 204.00 x 204.00)
+          (coverage rect -18.00, -224.00 800.00 x 600.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
           (children 1
             (GraphicsLayer
@@ -46,6 +58,8 @@
               (bounds 200.00 200.00)
               (childrenTransform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.07 0.07 1.00 -0.00] [0.00 0.00 0.00 1.00])
               (visible rect 0.00, 0.00 200.00 x 200.00)
+              (coverage rect 0.00, 0.00 200.00 x 200.00)
+              (intersects coverage rect 1)
               (contentsScale 1.00)
               (children 1
                 (GraphicsLayer
@@ -54,6 +68,8 @@
                   (contentsOpaque 1)
                   (transform [0.71 0.00 0.71 0.00] [0.00 1.00 0.00 0.00] [-0.71 0.00 0.71 0.00] [0.00 0.00 0.00 1.00])
                   (visible rect 0.00, 0.00 218.46 x 220.62)
+                  (coverage rect 0.00, 0.00 200.00 x 200.00)
+                  (intersects coverage rect 1)
                   (contentsScale 1.00)
                 )
               )
index 1a39c8e..c11fa69 100644 (file)
@@ -2,24 +2,32 @@
   (anchor 0.00 0.00)
   (bounds 800.00 600.00)
   (visible rect 0.00, 0.00 800.00 x 600.00)
+  (coverage rect 0.00, 0.00 800.00 x 600.00)
+  (intersects coverage rect 1)
   (contentsScale 1.00)
   (children 1
     (GraphicsLayer
       (bounds 800.00 600.00)
       (contentsOpaque 1)
       (visible rect 0.00, 0.00 800.00 x 600.00)
+      (coverage rect 0.00, 0.00 800.00 x 600.00)
+      (intersects coverage rect 1)
       (contentsScale 1.00)
       (children 1
         (GraphicsLayer
           (position 8.00 8.00)
           (bounds 502.00 202.00)
           (visible rect 0.00, 0.00 502.00 x 202.00)
+          (coverage rect -8.00, -8.00 800.00 x 600.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
           (children 1
             (GraphicsLayer
               (position 1.00 1.00)
               (bounds 500.00 200.00)
               (visible rect 0.00, 0.00 500.00 x 200.00)
+              (coverage rect 0.00, 0.00 500.00 x 200.00)
+              (intersects coverage rect 1)
               (contentsScale 1.00)
               (children 1
                 (GraphicsLayer
@@ -27,6 +35,8 @@
                   (contentsOpaque 1)
                   (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [-100.00 0.00 0.00 1.00])
                   (visible rect 100.00, 0.00 100.00 x 200.00)
+                  (coverage rect 100.00, 0.00 500.00 x 200.00)
+                  (intersects coverage rect 1)
                   (contentsScale 1.00)
                 )
               )
index 14bbb6f..b8573db 100644 (file)
@@ -2,24 +2,32 @@
   (anchor 0.00 0.00)
   (bounds 800.00 600.00)
   (visible rect 0.00, 0.00 800.00 x 600.00)
+  (coverage rect 0.00, 0.00 800.00 x 600.00)
+  (intersects coverage rect 1)
   (contentsScale 1.00)
   (children 1
     (GraphicsLayer
       (bounds 800.00 600.00)
       (contentsOpaque 1)
       (visible rect 0.00, 0.00 800.00 x 600.00)
+      (coverage rect 0.00, 0.00 800.00 x 600.00)
+      (intersects coverage rect 1)
       (contentsScale 1.00)
       (children 1
         (GraphicsLayer
           (position 8.00 8.00)
           (bounds 502.00 202.00)
           (visible rect 0.00, 0.00 502.00 x 202.00)
+          (coverage rect -8.00, -8.00 800.00 x 600.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
           (children 1
             (GraphicsLayer
               (position 1.00 1.00)
               (bounds 500.00 200.00)
               (visible rect 0.00, 0.00 500.00 x 200.00)
+              (coverage rect 0.00, 0.00 500.00 x 200.00)
+              (intersects coverage rect 1)
               (contentsScale 1.00)
               (children 1
                 (GraphicsLayer
@@ -27,6 +35,8 @@
                   (bounds 200.00 200.00)
                   (contentsOpaque 1)
                   (visible rect 100.00, 0.00 100.00 x 200.00)
+                  (coverage rect 100.00, 0.00 500.00 x 200.00)
+                  (intersects coverage rect 1)
                   (contentsScale 1.00)
                 )
               )
index e2608a7..452daab 100644 (file)
@@ -2,12 +2,16 @@
   (anchor 0.00 0.00)
   (bounds 800.00 600.00)
   (visible rect 0.00, 0.00 800.00 x 600.00)
+  (coverage rect 0.00, 0.00 800.00 x 600.00)
+  (intersects coverage rect 1)
   (contentsScale 1.00)
   (children 1
     (GraphicsLayer
       (bounds 800.00 600.00)
       (contentsOpaque 1)
       (visible rect 0.00, 0.00 800.00 x 600.00)
+      (coverage rect 0.00, 0.00 800.00 x 600.00)
+      (intersects coverage rect 1)
       (contentsScale 1.00)
       (children 2
         (GraphicsLayer
@@ -16,6 +20,8 @@
           (contentsOpaque 1)
           (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 1.00 1.00])
           (visible rect 100.00, 120.00 100.00 x 80.00)
+          (coverage rect 0.00, 0.00 800.00 x 600.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
         )
         (GraphicsLayer
@@ -24,6 +30,8 @@
           (contentsOpaque 1)
           (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 1.00 1.00])
           (visible rect 100.00, 0.00 100.00 x 200.00)
+          (coverage rect 0.00, 0.00 800.00 x 600.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
         )
       )
index dce7caf..d3011d4 100644 (file)
@@ -2,24 +2,32 @@
   (anchor 0.00 0.00)
   (bounds 800.00 600.00)
   (visible rect 0.00, 0.00 800.00 x 600.00)
+  (coverage rect 0.00, 0.00 800.00 x 600.00)
+  (intersects coverage rect 1)
   (contentsScale 1.00)
   (children 1
     (GraphicsLayer
       (bounds 800.00 600.00)
       (contentsOpaque 1)
       (visible rect 0.00, 0.00 800.00 x 600.00)
+      (coverage rect 0.00, 0.00 800.00 x 600.00)
+      (intersects coverage rect 1)
       (contentsScale 1.00)
       (children 1
         (GraphicsLayer
           (position 8.00 8.00)
           (bounds 502.00 202.00)
           (visible rect 0.00, 0.00 502.00 x 202.00)
+          (coverage rect -8.00, -8.00 800.00 x 600.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
           (children 1
             (GraphicsLayer
               (position 1.00 1.00)
               (bounds 500.00 200.00)
               (visible rect 0.00, 0.00 500.00 x 200.00)
+              (coverage rect 0.00, 0.00 500.00 x 200.00)
+              (intersects coverage rect 1)
               (contentsScale 1.00)
               (children 3
                 (GraphicsLayer
@@ -28,6 +36,8 @@
                   (contentsOpaque 1)
                   (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 1.00 1.00])
                   (visible rect 100.00, 0.00 100.00 x 200.00)
+                  (coverage rect 0.00, 0.00 500.00 x 200.00)
+                  (intersects coverage rect 1)
                   (contentsScale 1.00)
                 )
                 (GraphicsLayer
@@ -36,6 +46,8 @@
                   (contentsOpaque 1)
                   (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 1.00 1.00])
                   (visible rect 0.00, 0.00 200.00 x 200.00)
+                  (coverage rect 0.00, 0.00 500.00 x 200.00)
+                  (intersects coverage rect 1)
                   (contentsScale 1.00)
                 )
                 (GraphicsLayer
@@ -44,6 +56,8 @@
                   (contentsOpaque 1)
                   (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 1.00 1.00])
                   (visible rect 0.00, 0.00 100.00 x 200.00)
+                  (coverage rect 0.00, 0.00 500.00 x 200.00)
+                  (intersects coverage rect 1)
                   (contentsScale 1.00)
                 )
               )
index 22a6ea0..849241d 100644 (file)
@@ -8,12 +8,16 @@ Some text here.
   (anchor 0.00 0.00)
   (bounds 785.00 615.00)
   (visible rect 0.00, 0.00 785.00 x 600.00)
+  (coverage rect 0.00, 0.00 785.00 x 600.00)
+  (intersects coverage rect 1)
   (contentsScale 1.00)
   (children 1
     (GraphicsLayer
       (bounds 785.00 615.00)
       (contentsOpaque 1)
       (visible rect 0.00, 0.00 785.00 x 600.00)
+      (coverage rect 0.00, 0.00 785.00 x 600.00)
+      (intersects coverage rect 1)
       (contentsScale 1.00)
       (children 1
         (GraphicsLayer
@@ -21,6 +25,8 @@ Some text here.
           (bounds 602.00 602.00)
           (childrenTransform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 -0.00] [0.00 0.00 0.00 1.00])
           (visible rect 0.00, 0.00 602.00 x 587.00)
+          (coverage rect 0.00, -13.00 785.00 x 600.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
           (children 1
             (GraphicsLayer
@@ -30,6 +36,8 @@ Some text here.
               (preserves3D 1)
               (transform [-1.00 0.00 -0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 -1.00 0.00] [0.00 0.00 0.00 1.00])
               (visible rect 0.00, 0.00 440.00 x 440.00)
+              (coverage rect -184.00, -114.00 785.00 x 600.00)
+              (intersects coverage rect 1)
               (contentsScale 1.00)
               (children 1
                 (GraphicsLayer
@@ -37,11 +45,15 @@ Some text here.
                   (contentsOpaque 1)
                   (transform [-1.00 0.00 -0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 -1.00 0.00] [0.00 0.00 0.00 1.00])
                   (visible rect 0.00, 0.00 420.00 x 420.00)
+                  (coverage rect -181.00, -114.00 785.00 x 600.00)
+                  (intersects coverage rect 1)
                   (contentsScale 1.00)
                   (children 1
                     (GraphicsLayer
                       (bounds 420.00 420.00)
                       (visible rect 0.00, 0.00 420.00 x 420.00)
+                      (coverage rect 0.00, 0.00 420.00 x 420.00)
+                      (intersects coverage rect 1)
                       (contentsScale 1.00)
                       (children 1
                         (GraphicsLayer
@@ -49,11 +61,15 @@ Some text here.
                           (bounds 418.00 510.00)
                           (contentsOpaque 1)
                           (visible rect 0.00, 90.00 418.00 x 420.00)
+                          (coverage rect 0.00, 90.00 420.00 x 420.00)
+                          (intersects coverage rect 1)
                           (contentsScale 1.00)
                           (children 1
                             (GraphicsLayer
                               (bounds 418.00 510.00)
                               (visible rect 0.00, 90.00 418.00 x 420.00)
+                              (coverage rect 0.00, 90.00 418.00 x 420.00)
+                              (intersects coverage rect 1)
                               (contentsScale 1.00)
                               (children 3
                                 (GraphicsLayer
@@ -63,6 +79,8 @@ Some text here.
                                   (usingTiledLayer 1)
                                   (drawsContent 1)
                                   (visible rect 3000.00, 90.00 418.00 x 30.00)
+                                  (coverage rect 3000.00, 90.00 418.00 x 420.00)
+                                  (intersects coverage rect 1)
                                   (contentsScale 1.00)
                                 )
                                 (GraphicsLayer
@@ -72,6 +90,8 @@ Some text here.
                                   (usingTiledLayer 1)
                                   (drawsContent 1)
                                   (visible rect 3000.00, 0.00 418.00 x 120.00)
+                                  (coverage rect 3000.00, -30.00 418.00 x 420.00)
+                                  (intersects coverage rect 1)
                                   (contentsScale 1.00)
                                 )
                                 (GraphicsLayer
@@ -81,6 +101,8 @@ Some text here.
                                   (usingTiledLayer 1)
                                   (drawsContent 1)
                                   (visible rect 3000.00, 0.00 418.00 x 120.00)
+                                  (coverage rect 3000.00, -150.00 418.00 x 420.00)
+                                  (intersects coverage rect 1)
                                   (contentsScale 1.00)
                                 )
                               )
index 7338ac2..844b3f1 100644 (file)
@@ -3,12 +3,16 @@
   (anchor 0.00 0.00)
   (bounds 1508.00 1516.00)
   (visible rect 0.00, 0.00 785.00 x 585.00)
+  (coverage rect 0.00, 0.00 785.00 x 585.00)
+  (intersects coverage rect 1)
   (contentsScale 1.00)
   (children 1
     (GraphicsLayer
       (bounds 1508.00 1516.00)
       (contentsOpaque 1)
       (visible rect 0.00, 0.00 785.00 x 585.00)
+      (coverage rect 0.00, 0.00 785.00 x 585.00)
+      (intersects coverage rect 1)
       (contentsScale 1.00)
       (children 2
         (GraphicsLayer
           (bounds 360.00 210.00)
           (drawsContent 1)
           (visible rect 0.00, 0.00 360.00 x 210.00)
+          (coverage rect -10.00, -10.00 785.00 x 585.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
           (children 1
             (GraphicsLayer
               (position 30.00 30.00)
               (visible rect 0.00, 0.00 0.00 x 0.00)
+              (coverage rect -40.00, -40.00 785.00 x 585.00)
+              (intersects coverage rect 0)
               (contentsScale 1.00)
               (children 1
                 (GraphicsLayer
                   (anchor 0.00 0.00)
                   (bounds 285.00 135.00)
                   (visible rect 0.00, 0.00 285.00 x 135.00)
+                  (coverage rect 0.00, 0.00 285.00 x 135.00)
+                  (intersects coverage rect 1)
                   (contentsScale 1.00)
                   (children 1
                     (GraphicsLayer
                       (visible rect 0.00, 0.00 0.00 x 0.00)
+                      (coverage rect 0.00, 0.00 285.00 x 135.00)
+                      (intersects coverage rect 0)
                       (contentsScale 1.00)
                       (children 1
                         (GraphicsLayer
                           (anchor 0.00 0.00)
                           (bounds 1508.00 1516.00)
                           (visible rect 0.00, 0.00 285.00 x 135.00)
+                          (coverage rect 0.00, 0.00 285.00 x 135.00)
+                          (intersects coverage rect 1)
                           (contentsScale 1.00)
                           (children 1
                             (GraphicsLayer
                               (bounds 1508.00 1516.00)
                               (drawsContent 1)
                               (visible rect 0.00, 0.00 285.00 x 135.00)
+                              (coverage rect 0.00, 0.00 285.00 x 135.00)
+                              (intersects coverage rect 1)
                               (contentsScale 1.00)
                               (children 1
                                 (GraphicsLayer
@@ -52,6 +68,8 @@
                                   (drawsContent 1)
                                   (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 1.00 1.00])
                                   (visible rect 0.00, 0.00 100.00 x 127.00)
+                                  (coverage rect 0.00, 0.00 285.00 x 135.00)
+                                  (intersects coverage rect 1)
                                   (contentsScale 1.00)
                                 )
                               )
@@ -72,6 +90,8 @@
           (contentsOpaque 1)
           (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 1.00 1.00])
           (visible rect 0.00, 0.00 200.00 x 200.00)
+          (coverage rect 0.00, 0.00 785.00 x 585.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
         )
       )
index 3eb572a..695f04e 100644 (file)
@@ -3,11 +3,15 @@
   (anchor 0.00 0.00)
   (bounds 1508.00 1516.00)
   (visible rect 10.00, 100.00 285.00 x 135.00)
+  (coverage rect 10.00, 100.00 285.00 x 135.00)
+  (intersects coverage rect 1)
   (contentsScale 1.00)
   (children 1
     (GraphicsLayer
       (bounds 1508.00 1516.00)
       (visible rect 10.00, 100.00 285.00 x 135.00)
+      (coverage rect 10.00, 100.00 285.00 x 135.00)
+      (intersects coverage rect 1)
       (contentsScale 1.00)
       (children 1
         (GraphicsLayer
@@ -17,6 +21,8 @@
           (drawsContent 1)
           (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 1.00 1.00])
           (visible rect 2.00, 92.00 98.00 x 135.00)
+          (coverage rect 10.00, 100.00 285.00 x 135.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
         )
       )
index 146c250..0e4e9c3 100644 (file)
@@ -2,18 +2,24 @@
   (anchor 0.00 0.00)
   (bounds 785.00 669.00)
   (visible rect 0.00, 0.00 785.00 x 600.00)
+  (coverage rect 0.00, 0.00 785.00 x 600.00)
+  (intersects coverage rect 1)
   (contentsScale 1.00)
   (children 1
     (GraphicsLayer
       (bounds 785.00 669.00)
       (contentsOpaque 1)
       (visible rect 0.00, 0.00 785.00 x 600.00)
+      (coverage rect 0.00, 0.00 785.00 x 600.00)
+      (intersects coverage rect 1)
       (contentsScale 1.00)
       (children 2
         (GraphicsLayer
           (position 18.00 10.00)
           (bounds 304.00 304.00)
           (visible rect 0.00, 0.00 304.00 x 304.00)
+          (coverage rect -18.00, -10.00 785.00 x 600.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
           (children 1
             (GraphicsLayer
@@ -21,6 +27,8 @@
               (bounds 300.00 300.00)
               (childrenTransform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.26 0.26 1.00 -0.00] [0.00 0.00 0.00 1.00])
               (visible rect 0.00, 0.00 300.00 x 300.00)
+              (coverage rect 0.00, 0.00 300.00 x 300.00)
+              (intersects coverage rect 1)
               (contentsScale 1.00)
               (children 1
                 (GraphicsLayer
@@ -28,6 +36,8 @@
                   (preserves3D 1)
                   (transform [0.94 0.00 -0.34 0.00] [0.00 1.00 0.00 0.00] [0.34 0.00 0.94 0.00] [0.00 0.00 0.00 1.00])
                   (visible rect 0.00, 0.00 0.00 x 0.00)
+                  (coverage rect -2.95, -8.50 360.07 x 353.13)
+                  (intersects coverage rect 0)
                   (contentsScale 1.00)
                   (children 1
                     (GraphicsLayer
@@ -35,6 +45,8 @@
                       (preserves3D 1)
                       (transform [0.94 0.00 -0.34 0.00] [0.00 1.00 0.00 0.00] [0.34 0.00 0.94 0.00] [0.00 0.00 0.00 1.00])
                       (visible rect 0.00, 0.00 0.00 x 0.00)
+                      (coverage rect -27.90, -32.04 593.31 x 500.27)
+                      (intersects coverage rect 0)
                       (contentsScale 1.00)
                       (children 1
                         (GraphicsLayer
@@ -42,6 +54,8 @@
                           (contentsOpaque 1)
                           (transform [1.00 0.00 0.00 0.00] [0.00 0.82 0.57 0.00] [0.00 -0.57 0.82 0.00] [0.00 0.00 0.00 1.00])
                           (visible rect 0.00, 0.00 500.00 x 369.91)
+                          (coverage rect -21.28, -198.73 1388.86 x 568.64)
+                          (intersects coverage rect 1)
                           (contentsScale 1.00)
                         )
                       )
@@ -56,6 +70,8 @@
           (position 18.00 324.00)
           (bounds 304.00 304.00)
           (visible rect 0.00, 0.00 304.00 x 276.00)
+          (coverage rect -18.00, -324.00 785.00 x 600.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
           (children 1
             (GraphicsLayer
               (bounds 300.00 300.00)
               (childrenTransform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.26 0.26 1.00 -0.00] [0.00 0.00 0.00 1.00])
               (visible rect 0.00, 0.00 300.00 x 274.00)
+              (coverage rect 0.00, 0.00 300.00 x 274.00)
+              (intersects coverage rect 1)
               (contentsScale 1.00)
               (children 1
                 (GraphicsLayer
                   (bounds 300.00 0.00)
                   (preserves3D 1)
                   (visible rect 0.00, 0.00 0.00 x 0.00)
+                  (coverage rect 0.00, 0.00 300.00 x 274.00)
+                  (intersects coverage rect 0)
                   (contentsScale 1.00)
                   (children 1
                     (GraphicsLayer
@@ -76,6 +96,8 @@
                       (preserves3D 1)
                       (transform [0.77 0.00 -0.64 0.00] [0.00 1.00 0.00 0.00] [0.64 0.00 0.77 0.00] [0.00 0.00 0.00 1.00])
                       (visible rect 0.00, 0.00 0.00 x 0.00)
+                      (coverage rect -27.90, -32.04 593.31 x 456.91)
+                      (intersects coverage rect 0)
                       (contentsScale 1.00)
                       (children 1
                         (GraphicsLayer
                           (contentsOpaque 1)
                           (transform [1.00 0.00 0.00 0.00] [0.00 0.82 0.57 0.00] [0.00 -0.57 0.82 0.00] [0.00 0.00 0.00 1.00])
                           (visible rect 0.00, 0.00 500.00 x 351.87)
+                          (coverage rect -15.25, -198.73 1382.84 x 550.60)
+                          (intersects coverage rect 1)
                           (contentsScale 1.00)
                         )
                       )
index 5042659..31e1037 100644 (file)
@@ -2,12 +2,16 @@
   (anchor 0.00 0.00)
   (bounds 1508.00 2008.00)
   (visible rect 25.00, 200.00 785.00 x 585.00)
+  (coverage rect 25.00, 200.00 785.00 x 585.00)
+  (intersects coverage rect 1)
   (contentsScale 1.00)
   (children 1
     (GraphicsLayer
       (bounds 1508.00 2008.00)
       (contentsOpaque 1)
       (visible rect 25.00, 200.00 785.00 x 585.00)
+      (coverage rect 25.00, 200.00 785.00 x 585.00)
+      (intersects coverage rect 1)
       (contentsScale 1.00)
       (children 1
         (GraphicsLayer
@@ -16,6 +20,8 @@
           (contentsOpaque 1)
           (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 1.00 1.00])
           (visible rect 17.00, 200.00 183.00 x 300.00)
+          (coverage rect 25.00, 200.00 785.00 x 585.00)
+          (intersects coverage rect 1)
           (contentsScale 1.00)
         )
       )
index 6afe6b6..2eeb3b2 100644 (file)
@@ -1,3 +1,37 @@
+2015-04-24  Simon Fraser  <simon.fraser@apple.com>
+
+        Track a coverage rect through GraphicsLayerCA flushes, use it to mark backing store attached
+        https://bugs.webkit.org/show_bug.cgi?id=144165
+
+        Reviewed by Dean Jackson.
+        
+        Push in the clipRect as the secondary rect when doing a GraphicsLayerCA flush,
+        which maps this rect through all the layers. Each layer tests intersection with
+        this rect to determine if its backing store should be attached.
+        
+        This will cause us to drop backing store for layers that don't intersect the
+        visible part of the view, which is too aggressive. A future patch will add
+        some padding.
+
+        Tests: compositing/visible-rect/coverage-clipped.html
+               compositing/visible-rect/coverage-scrolling.html
+
+        * platform/graphics/ca/GraphicsLayerCA.cpp:
+        (WebCore::GraphicsLayerCA::GraphicsLayerCA): Remove initialization of things with
+        C++11 initializers. Initialize the new m_intersectsCoverageRect bit.
+        (WebCore::GraphicsLayerCA::flushCompositingState): Push the clipRect in as the
+        secondary coverage rect. A future patch will inflate this on the way down the tree.
+        (WebCore::GraphicsLayerCA::computeVisibleRect): If we're clipping, and
+        we have a secondary coverage rect, that rect can be clipped to us too.
+        (WebCore::GraphicsLayerCA::setVisibleAndCoverageRects):
+        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
+        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
+        (WebCore::GraphicsLayerCA::updateBackingStoreAttachment):
+        (WebCore::GraphicsLayerCA::dumpAdditionalProperties):
+        * platform/graphics/ca/GraphicsLayerCA.h: New CoverageRectChanged bit.
+        Use more C++11 initializers.
+        (WebCore::GraphicsLayerCA::coverageRect):
+
 2015-04-24  Dean Jackson  <dino@apple.com>
 
         AnimationController::scrollWasUpdated() shows up in scrolling profiles on pages that don't use scroll triggers
index a2f50ae..fff5f3c 100644 (file)
@@ -351,11 +351,9 @@ PassRefPtr<PlatformCAAnimation> GraphicsLayerCA::createPlatformCAAnimation(Platf
 
 GraphicsLayerCA::GraphicsLayerCA(Type layerType, GraphicsLayerClient& client)
     : GraphicsLayer(layerType, client)
-    , m_contentsLayerPurpose(NoContentsLayer)
     , m_needsFullRepaint(false)
     , m_usingBackdropLayerType(false)
-    , m_uncommittedChanges(0)
-    , m_isCommittingChanges(false)
+    , m_intersectsCoverageRect(true)
 {
 }
 
@@ -1077,6 +1075,8 @@ FloatPoint GraphicsLayerCA::computePositionRelativeToBase(float& pageScale) cons
 void GraphicsLayerCA::flushCompositingState(const FloatRect& clipRect)
 {
     TransformState state(TransformState::UnapplyInverseTransformDirection, FloatQuad(clipRect));
+    FloatQuad coverageQuad(clipRect);
+    state.setSecondaryQuad(&coverageQuad);
     recursiveCommitChanges(CommitState(), state);
 }
 
@@ -1211,22 +1211,23 @@ FloatRect GraphicsLayerCA::computeVisibleRect(TransformState& state, ComputeVisi
         // Flatten, and replace the quad in the TransformState with one that is clipped to this layer's bounds.
         state.flatten();
         state.setQuad(clipRectForSelf);
+        if (state.lastPlanarSecondaryQuad()) {
+            FloatQuad secondaryQuad(clipRectForSelf);
+            state.setSecondaryQuad(&secondaryQuad);
+        }
     }
 
     return clipRectForSelf;
 }
 
-// rootRelativeTransformForScaling is a transform from the root, but for layers with transform animations, it cherry-picked the state of the
-// animation that contributes maximally to the scale (on every layer with animations down the hierarchy).
-void GraphicsLayerCA::recursiveCommitChanges(const CommitState& commitState, const TransformState& state, float pageScaleFactor, const FloatPoint& positionRelativeToBase, bool affectedByPageScale)
+void GraphicsLayerCA::setVisibleAndCoverageRects(const FloatRect& visibleRect, const FloatRect& coverageRect)
 {
-    TransformState localState = state;
-    CommitState childCommitState = commitState;
-    bool affectedByTransformAnimation = commitState.ancestorHasTransformAnimation;
-    
-    FloatRect visibleRect = computeVisibleRect(localState);
-    FloatRect oldVisibleRect = m_visibleRect;
-    if (visibleRect != m_visibleRect) {
+    bool visibleRectChanged = visibleRect != m_visibleRect;
+    bool coverageRectChanged = coverageRect != m_coverageRect;
+    if (!visibleRectChanged && !coverageRectChanged)
+        return;
+
+    if (visibleRectChanged) {
         m_uncommittedChanges |= VisibleRectChanged;
         m_visibleRect = visibleRect;
         
@@ -1237,6 +1238,36 @@ void GraphicsLayerCA::recursiveCommitChanges(const CommitState& commitState, con
         }
     }
 
+    if (coverageRectChanged) {
+        m_uncommittedChanges |= CoverageRectChanged;
+        m_coverageRect = coverageRect;
+
+        // FIXME: we need to take reflections into account when determining whether this layer intersects the coverage rect.
+        m_intersectsCoverageRect = m_coverageRect.intersects(FloatRect(m_boundsOrigin, size()));
+
+        if (GraphicsLayerCA* maskLayer = downcast<GraphicsLayerCA>(m_maskLayer)) {
+            maskLayer->m_uncommittedChanges |= CoverageRectChanged;
+            maskLayer->m_coverageRect = coverageRect;
+        }
+    }
+}
+
+// rootRelativeTransformForScaling is a transform from the root, but for layers with transform animations, it cherry-picked the state of the
+// animation that contributes maximally to the scale (on every layer with animations down the hierarchy).
+void GraphicsLayerCA::recursiveCommitChanges(const CommitState& commitState, const TransformState& state, float pageScaleFactor, const FloatPoint& positionRelativeToBase, bool affectedByPageScale)
+{
+    TransformState localState = state;
+    CommitState childCommitState = commitState;
+    bool affectedByTransformAnimation = commitState.ancestorHasTransformAnimation;
+    
+    FloatRect visibleRect = computeVisibleRect(localState);
+    FloatRect coverageRect = visibleRect;
+    if (std::unique_ptr<FloatQuad> quad = localState.mappedSecondaryQuad())
+        coverageRect = quad->boundingBox();
+
+    FloatRect oldVisibleRect = m_visibleRect;
+    setVisibleAndCoverageRects(visibleRect, coverageRect);
+
 #ifdef VISIBLE_TILE_WASH
     // Use having a transform as a key to making the tile wash layer. If every layer gets a wash,
     // they start to obscure useful information.
@@ -1457,6 +1488,9 @@ void GraphicsLayerCA::commitLayerChangesBeforeSublayers(CommitState& commitState
 
     if (m_uncommittedChanges & VisibleRectChanged)
         updateVisibleRect(oldVisibleRect);
+    
+    if (m_uncommittedChanges & CoverageRectChanged)
+        updateBackingStoreAttachment();
 
     if (m_uncommittedChanges & TilingAreaChanged) // Needs to happen after VisibleRectChanged, ContentsScaleChanged
         updateTiles();
@@ -1931,6 +1965,16 @@ void GraphicsLayerCA::updateDrawsContent()
     }
 }
 
+void GraphicsLayerCA::updateBackingStoreAttachment()
+{
+    m_layer->setBackingStoreAttached(m_intersectsCoverageRect);
+    if (m_layerClones) {
+        LayerMap::const_iterator end = m_layerClones->end();
+        for (LayerMap::const_iterator it = m_layerClones->begin(); it != end; ++it)
+            it->value->setBackingStoreAttached(m_intersectsCoverageRect);
+    }
+}
+
 void GraphicsLayerCA::updateAcceleratesDrawing()
 {
     m_layer->setAcceleratesDrawing(m_acceleratesDrawing);
@@ -3133,7 +3177,6 @@ void GraphicsLayerCA::getDebugBorderInfo(Color& color, float& width) const
     GraphicsLayer::getDebugBorderInfo(color, width);
 }
 
-
 static void dumpInnerLayer(TextStream& textStream, String label, PlatformCALayer* layer, int indent, LayerTreeAsTextBehavior behavior)
 {
     if (!layer)
@@ -3154,6 +3197,12 @@ void GraphicsLayerCA::dumpAdditionalProperties(TextStream& textStream, int inden
         textStream << "(visible rect " << m_visibleRect.x() << ", " << m_visibleRect.y() << " " << m_visibleRect.width() << " x " << m_visibleRect.height() << ")\n";
 
         writeIndent(textStream, indent + 1);
+        textStream << "(coverage rect " << m_coverageRect.x() << ", " << m_coverageRect.y() << " " << m_coverageRect.width() << " x " << m_coverageRect.height() << ")\n";
+
+        writeIndent(textStream, indent + 1);
+        textStream << "(intersects coverage rect " << m_intersectsCoverageRect << ")\n";
+
+        writeIndent(textStream, indent + 1);
         textStream << "(contentsScale " << m_layer->contentsScale() << ")\n";
     }
 
index 6f7d64f..9dc64c1 100644 (file)
@@ -276,7 +276,11 @@ private:
     enum ComputeVisibleRectFlag { RespectAnimatingTransforms = 1 << 0 };
     typedef unsigned ComputeVisibleRectFlags;
     FloatRect computeVisibleRect(TransformState&, ComputeVisibleRectFlags = RespectAnimatingTransforms) const;
+
     const FloatRect& visibleRect() const { return m_visibleRect; }
+    const FloatRect& coverageRect() const { return m_coverageRect; }
+
+    void setVisibleAndCoverageRects(const FloatRect& visibleRect, const FloatRect& coverageRect);
     
     static FloatRect adjustTiledLayerVisibleRect(TiledBacking*, const FloatRect& oldVisibleRect, const FloatRect& newVisibleRect, const FloatSize& oldSize, const FloatSize& newSize);
 
@@ -447,15 +451,16 @@ private:
         ContentsScaleChanged =          1LLU << 24,
         ContentsVisibilityChanged =     1LLU << 25,
         VisibleRectChanged =            1LLU << 26,
-        FiltersChanged =                1LLU << 27,
-        BackdropFiltersChanged =        1LLU << 28,
-        TilingAreaChanged =             1LLU << 29,
-        TilesAdded =                    1LLU << 30,
-        DebugIndicatorsChanged =        1LLU << 31,
-        CustomAppearanceChanged =       1LLU << 32,
-        BlendModeChanged =              1LLU << 33,
-        ShapeChanged =                  1LLU << 34,
-        WindRuleChanged =               1LLU << 35,
+        CoverageRectChanged =           1LLU << 27,
+        FiltersChanged =                1LLU << 28,
+        BackdropFiltersChanged =        1LLU << 29,
+        TilingAreaChanged =             1LLU << 30,
+        TilesAdded =                    1LLU << 31,
+        DebugIndicatorsChanged =        1LLU << 32,
+        CustomAppearanceChanged =       1LLU << 33,
+        BlendModeChanged =              1LLU << 34,
+        ShapeChanged =                  1LLU << 35,
+        WindRuleChanged =               1LLU << 36,
     };
     typedef uint64_t LayerChangeFlags;
     enum ScheduleFlushOrNot { ScheduleFlush, DontScheduleFlush };
@@ -488,10 +493,13 @@ private:
 #endif
     FloatRect m_visibleRect;
     FloatSize m_sizeAtLastVisibleRectUpdate;
+
+    FloatRect m_coverageRect; // Area for which we should maintain backing store, in the coordinate space of this layer.
     
-    ContentsLayerPurpose m_contentsLayerPurpose;
+    ContentsLayerPurpose m_contentsLayerPurpose { NoContentsLayer };
     bool m_needsFullRepaint : 1;
     bool m_usingBackdropLayerType : 1;
+    bool m_intersectsCoverageRect : 1;
 
     Color m_contentsSolidColor;
 
@@ -542,8 +550,8 @@ private:
 
     FloatSize m_pixelAlignmentOffset;
 
-    LayerChangeFlags m_uncommittedChanges;
-    bool m_isCommittingChanges;
+    LayerChangeFlags m_uncommittedChanges { 0 };
+    bool m_isCommittingChanges { false };
 };
 
 } // namespace WebCore