[SCM] WebKit Debian packaging branch, webkit-1.2, updated. upstream/1.1.90-6072-g9a69373

simon.fraser at apple.com simon.fraser at apple.com
Thu Apr 8 00:53:48 UTC 2010


The following commit has been merged in the webkit-1.2 branch:
commit 483e1ecbbf4a928dfad8b1e0f82296d9ce47e4dc
Author: simon.fraser at apple.com <simon.fraser at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Mon Jan 4 21:50:29 2010 +0000

    2010-01-04  Simon Fraser  <simon.fraser at apple.com>
    
            Reviewed by Dan Bernstein.
    
            Repaint issues in text input under a scale transform
            https://bugs.webkit.org/show_bug.cgi?id=32086
    
            When doing a subtree layout we have to look up the container chain to see if there
            are any properties, such as transforms or reflections, that mean that we are unable
            to use layoutState.
    
            Test: fast/repaint/subtree-layoutstate-transform.html
    
            * page/FrameView.cpp:
            (WebCore::FrameView::layout): Call canUseLayoutStateForSubtree() to determine
            whether it's OK to use layoutState.
    
            * rendering/RenderView.h:
            * rendering/RenderView.cpp:
            (WebCore::RenderView::canUseLayoutStateForSubtree): New method that reports whether it's
            OK to use layoutState when doing a subtree layout from the given root.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@52757 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index d2303f2..ed91f93 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,17 @@
+2010-01-04  Simon Fraser  <simon.fraser at apple.com>
+
+        Reviewed by Dan Bernstein.
+
+        Repaint issues in text input under a scale transform
+        https://bugs.webkit.org/show_bug.cgi?id=32086
+        
+        Test for repaint after a subtree layout inside a transformed element.
+
+        * fast/repaint/subtree-layoutstate-transform.html: Added.
+        * platform/mac/fast/repaint/subtree-layoutstate-transform-expected.checksum: Added.
+        * platform/mac/fast/repaint/subtree-layoutstate-transform-expected.png: Added.
+        * platform/mac/fast/repaint/subtree-layoutstate-transform-expected.txt: Added.
+
 2010-01-04  Darin Adler  <darin at apple.com>
 
         Reviewed by Dan Bernstein.
diff --git a/LayoutTests/fast/repaint/subtree-layoutstate-transform.html b/LayoutTests/fast/repaint/subtree-layoutstate-transform.html
new file mode 100644
index 0000000..4a2ffa9
--- /dev/null
+++ b/LayoutTests/fast/repaint/subtree-layoutstate-transform.html
@@ -0,0 +1,37 @@
+<html>
+<head>
+  <style type="text/css" media="screen">
+    .transformed {
+      height: 100px;
+      width: 100px;
+      margin: 20px;
+      -webkit-transform: scale(2);
+      -webkit-transform-origin: top left;
+    }
+  
+    .layoutroot {
+      height: 100px;
+      width: 100px;
+      overflow: hidden;
+      background-color: red;
+    }
+  </style>
+    <script src="resources/repaint.js"></script>
+    <script>
+        function repaintTest()
+        {
+            document.getElementById("target").style.width = "100px";
+        }
+    </script>
+</head>
+<body onload="runRepaintTest()">
+
+  <p>Tests repaint after layout of a subtree, inside a transformed element. You should see a large green square below.</p>
+  <div class="transformed">
+    <div class="layoutroot">
+      <div id="target" style="height: 100px; width: 50px; background-color: green;"></div>
+    </div>
+  </div>
+
+</body>
+</html>
diff --git a/LayoutTests/platform/mac/fast/repaint/subtree-layoutstate-transform-expected.checksum b/LayoutTests/platform/mac/fast/repaint/subtree-layoutstate-transform-expected.checksum
new file mode 100644
index 0000000..58442cd
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/repaint/subtree-layoutstate-transform-expected.checksum
@@ -0,0 +1 @@
+3c1bb146ef720ca8b9a052ac584e5c67
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/repaint/subtree-layoutstate-transform-expected.png b/LayoutTests/platform/mac/fast/repaint/subtree-layoutstate-transform-expected.png
new file mode 100644
index 0000000..fece987
Binary files /dev/null and b/LayoutTests/platform/mac/fast/repaint/subtree-layoutstate-transform-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/repaint/subtree-layoutstate-transform-expected.txt b/LayoutTests/platform/mac/fast/repaint/subtree-layoutstate-transform-expected.txt
new file mode 100644
index 0000000..91c2c53
--- /dev/null
+++ b/LayoutTests/platform/mac/fast/repaint/subtree-layoutstate-transform-expected.txt
@@ -0,0 +1,13 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x572
+      RenderBlock {P} at (0,0) size 784x18
+        RenderText {#text} at (0,0) size 703x18
+          text run at (0,0) width 703: "Tests repaint after layout of a subtree, inside a transformed element. You should see a large green square below."
+layer at (28,46) size 100x100
+  RenderBlock {DIV} at (20,38) size 100x100
+layer at (28,46) size 100x100
+  RenderBlock {DIV} at (0,0) size 100x100 [bgcolor=#FF0000]
+    RenderBlock {DIV} at (0,0) size 100x100 [bgcolor=#008000]
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index b652ca9..3a03b73 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,25 @@
+2010-01-04  Simon Fraser  <simon.fraser at apple.com>
+
+        Reviewed by Dan Bernstein.
+
+        Repaint issues in text input under a scale transform
+        https://bugs.webkit.org/show_bug.cgi?id=32086
+        
+        When doing a subtree layout we have to look up the container chain to see if there
+        are any properties, such as transforms or reflections, that mean that we are unable
+        to use layoutState.
+
+        Test: fast/repaint/subtree-layoutstate-transform.html
+
+        * page/FrameView.cpp:
+        (WebCore::FrameView::layout): Call canUseLayoutStateForSubtree() to determine
+        whether it's OK to use layoutState.
+        
+        * rendering/RenderView.h:
+        * rendering/RenderView.cpp:
+        (WebCore::RenderView::canUseLayoutStateForSubtree): New method that reports whether it's
+        OK to use layoutState when doing a subtree layout from the given root.
+
 2010-01-04  Darin Adler  <darin at apple.com>
 
         Reviewed by Dan Bernstein.
diff --git a/WebCore/page/FrameView.cpp b/WebCore/page/FrameView.cpp
index 59c5a12..7d0935e 100644
--- a/WebCore/page/FrameView.cpp
+++ b/WebCore/page/FrameView.cpp
@@ -658,8 +658,14 @@ void FrameView::layout(bool allowSubtree)
 
     pauseScheduledEvents();
 
-    if (subtree)
-        root->view()->pushLayoutState(root);
+    bool disableLayoutState;
+    if (subtree) {
+        RenderView* view = root->view();
+        disableLayoutState = view->shouldDisableLayoutStateForSubtree(root);
+        view->pushLayoutState(root);
+        if (disableLayoutState)
+            view->disableLayoutState();
+    }
         
     m_midLayout = true;
     beginDeferredRepaints();
@@ -667,8 +673,12 @@ void FrameView::layout(bool allowSubtree)
     endDeferredRepaints();
     m_midLayout = false;
 
-    if (subtree)
-        root->view()->popLayoutState();
+    if (subtree) {
+        RenderView* view = root->view();
+        view->popLayoutState();
+        if (disableLayoutState)
+            view->enableLayoutState();
+    }
     m_layoutRoot = 0;
 
     m_frame->selection()->setNeedsLayout();
diff --git a/WebCore/rendering/RenderView.cpp b/WebCore/rendering/RenderView.cpp
index 8e7b97a..69a1173 100644
--- a/WebCore/rendering/RenderView.cpp
+++ b/WebCore/rendering/RenderView.cpp
@@ -652,6 +652,17 @@ void RenderView::pushLayoutState(RenderObject* root)
     m_layoutState = new (renderArena()) LayoutState(root);
 }
 
+bool RenderView::shouldDisableLayoutStateForSubtree(RenderObject* renderer) const
+{
+    RenderObject* o = renderer;
+    while (o) {
+        if (o->hasColumns() || o->hasTransform() || o->hasReflection())
+            return true;
+        o = o->container();
+    }
+    return false;
+}
+
 void RenderView::updateHitTestResult(HitTestResult& result, const IntPoint& point)
 {
     if (result.innerNode())
diff --git a/WebCore/rendering/RenderView.h b/WebCore/rendering/RenderView.h
index f601e91..1e007e8 100644
--- a/WebCore/rendering/RenderView.h
+++ b/WebCore/rendering/RenderView.h
@@ -140,6 +140,8 @@ public:
         state->destroy(renderArena());
     }
 
+    bool shouldDisableLayoutStateForSubtree(RenderObject*) const;
+
     // Returns true if layoutState should be used for its cached offset and clip.
     bool layoutStateEnabled() const { return m_layoutStateDisableCount == 0 && m_layoutState; }
     LayoutState* layoutState() const { return m_layoutState; }

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list