diff options
author | jchaffraix@webkit.org <jchaffraix@webkit.org@bbb929c8-8fbe-4397-9dbb-9b2b20218538> | 2011-12-29 14:06:18 +0000 |
---|---|---|
committer | jchaffraix@webkit.org <jchaffraix@webkit.org@bbb929c8-8fbe-4397-9dbb-9b2b20218538> | 2011-12-29 14:06:18 +0000 |
commit | fc7d8fd48e0acfcc95724213f6312ffbbb5c1bf4 (patch) | |
tree | 3469771e94edf31c3aac28acfad7c29f54f21b7d | |
parent | 330ebce625475619467a0f6207fcb5c3c3bbbe38 (diff) | |
download | chromium_src-fc7d8fd48e0acfcc95724213f6312ffbbb5c1bf4.zip chromium_src-fc7d8fd48e0acfcc95724213f6312ffbbb5c1bf4.tar.gz chromium_src-fc7d8fd48e0acfcc95724213f6312ffbbb5c1bf4.tar.bz2 |
REGRESSION (r93614): Safari Reader doesn't repaint correctly when scrolling
https://bugs.webkit.org/show_bug.cgi?id=67100
Reviewed by Dan Bernstein.
Source/WebCore:
Tests: fast/layers/scroll-with-transform-composited-layer-expected.html
fast/layers/scroll-with-transform-composited-layer.html
fast/layers/scroll-with-transform-layer-expected.html
fast/layers/scroll-with-transform-layer.html
The regression came from a previous optimization that was wrongly kept after r93614.
* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::updateLayerPositionsAfterScroll):
Remove the early return for transformed layer. This change worked as we used
to call updateLayerPositions from scrollTo which would call updateLayerPosition on
all our descendants. After r93614, this is no longer the case and we explicitely need
to call updateLayerPosition on our descendants from updateLayerPositionsAfterScroll.
LayoutTests:
Added 2 ref tests for scrolling inside a transformed layers (either composited
or not).
* fast/layers/scroll-with-transform-composited-layer-expected.html: Added.
* fast/layers/scroll-with-transform-composited-layer.html: Added.
* fast/layers/scroll-with-transform-layer-expected.html: Added.
* fast/layers/scroll-with-transform-layer.html: Added.
git-svn-id: svn://svn.chromium.org/blink/trunk@103798 bbb929c8-8fbe-4397-9dbb-9b2b20218538
7 files changed, 264 insertions, 5 deletions
diff --git a/third_party/WebKit/LayoutTests/ChangeLog b/third_party/WebKit/LayoutTests/ChangeLog index db08f8b..fb66241 100644 --- a/third_party/WebKit/LayoutTests/ChangeLog +++ b/third_party/WebKit/LayoutTests/ChangeLog @@ -1,3 +1,18 @@ +2011-12-29 Julien Chaffraix <jchaffraix@webkit.org> + + REGRESSION (r93614): Safari Reader doesn't repaint correctly when scrolling + https://bugs.webkit.org/show_bug.cgi?id=67100 + + Reviewed by Dan Bernstein. + + Added 2 ref tests for scrolling inside a transformed layers (either composited + or not). + + * fast/layers/scroll-with-transform-composited-layer-expected.html: Added. + * fast/layers/scroll-with-transform-composited-layer.html: Added. + * fast/layers/scroll-with-transform-layer-expected.html: Added. + * fast/layers/scroll-with-transform-layer.html: Added. + 2011-12-28 Pavel Podivilov <podivilov@chromium.org> Web Inspector: add "enable source maps" checkbox setting. diff --git a/third_party/WebKit/LayoutTests/fast/layers/scroll-with-transform-composited-layer-expected.html b/third_party/WebKit/LayoutTests/fast/layers/scroll-with-transform-composited-layer-expected.html new file mode 100644 index 0000000..3ad5cb6 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/layers/scroll-with-transform-composited-layer-expected.html @@ -0,0 +1,50 @@ +<!DOCTYPE html> +<html> +<head> +<style> + p { height: 300px; width: 100px; margin: 0px; } + p.green { background-color: green; } + div { height: 100px; width: 100px; } + div.relative { position: relative } + div.composited + { + -webkit-transform: translateZ(0); + -moz-transform: translateZ(0); + transform: translateZ(0); + } +</style> +</head> +<body> + <span>http://webkit.org/b/67100: REGRESSION (r93614): Safari Reader doesn't repaint correctly when scrolling</span> + <span>All the boxes should only contain green content.</span> + <div class="scrollMe composited" style="overflow: hidden;"> + <div class="relative"> + <p class="green"></p> + </div> + </div> + <br> + <div class="scrollMe composited" style="overflow: scroll;"> + <div class="relative"> + <p class="green"></p> + </div> + </div> + <br> + <div class="scrollMe composited" style="overflow: hidden;"> + <div class="relative"> + <p class="green"></p> + </div> + </div> + <br> + <div class="scrollMe composited" style="overflow: scroll;"> + <div class="relative"> + <p class="green"></p> + </div> + </div> + <br> + <script> + var scrollMes = document.getElementsByClassName("scrollMe"); + for (var i = 0; i < scrollMes.length; ++i) + scrollMes[i].scrollTop = 100; + </script> +</body> +</html> diff --git a/third_party/WebKit/LayoutTests/fast/layers/scroll-with-transform-composited-layer.html b/third_party/WebKit/LayoutTests/fast/layers/scroll-with-transform-composited-layer.html new file mode 100644 index 0000000..e2bf5a7 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/layers/scroll-with-transform-composited-layer.html @@ -0,0 +1,67 @@ +<!DOCTYPE html> +<html> +<head> +<style> + p { height: 100px; width: 100px; margin: 0px; } + p.red { background-color: red; } + p.green { background-color: green; } + div { height: 100px; width: 100px; } + div.relative { position: relative } + div.composited + { + -webkit-transform: translateZ(0); + -moz-transform: translateZ(0); + transform: translateZ(0); + } + div.translated + { + -webkit-transform: translate(0); + -moz-transform: translate(0); + transform: translate(0); + } +</style> +</head> +<body> + <span>http://webkit.org/b/67100: REGRESSION (r93614): Safari Reader doesn't repaint correctly when scrolling</span> + <span>All the boxes should only contain green content.</span> + <!-- Use a translation. --> + <div class="scrollMe composited" style="overflow: hidden;"> + <div class="relative"> + <p class="red"></p> + <p class="green"></p> + <p class="red"></p> + </div> + </div> + <br> + <div class="scrollMe composited" style="overflow: scroll;"> + <div class="relative"> + <p class="red"></p> + <p class="green"></p> + <p class="red"></p> + </div> + </div> + <br> + <!-- Nest composited and non-composited. --> + <div class="scrollMe composited" style="overflow: hidden;"> + <div class="relative translated"> + <p class="red"></p> + <p class="green"></p> + <p class="red"></p> + </div> + </div> + <br> + <div class="scrollMe translated" style="overflow: scroll;"> + <div class="relative composited"> + <p class="red"></p> + <p class="green"></p> + <p class="red"></p> + </div> + </div> + <br> + <script> + var scrollMes = document.getElementsByClassName("scrollMe"); + for (var i = 0; i < scrollMes.length; ++i) + scrollMes[i].scrollTop = 100; + </script> +</body> +</html> diff --git a/third_party/WebKit/LayoutTests/fast/layers/scroll-with-transform-layer-expected.html b/third_party/WebKit/LayoutTests/fast/layers/scroll-with-transform-layer-expected.html new file mode 100644 index 0000000..aaa978a --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/layers/scroll-with-transform-layer-expected.html @@ -0,0 +1,44 @@ +<!DOCTYPE html> +<html> +<head> +<style> + p { height: 300px; width: 100px; margin: 0px; } + p.green { background-color: green; } + div { height: 100px; width: 100px; } + div.relative { position: relative } +</style> +</head> +<body> + <span>http://webkit.org/b/67100: REGRESSION (r93614): Safari Reader doesn't repaint correctly when scrolling</span> + <span>All the boxes should only contain green content.</span> + <div class="scrollMe" style="overflow: hidden;"> + <div class="relative"> + <p class="green"></p> + </div> + </div> + <br> + <div class="scrollMe" style="overflow: scroll;"> + <div class="relative"> + <p class="green"></p> + </div> + </div> + <br> + <div class="scrollMe" style="overflow: hidden;"> + <div class="relative"> + <p class="green"></p> + </div> + </div> + <br> + <div class="scrollMe" style="overflow: scroll;"> + <div class="relative"> + <p class="green"></p> + </div> + </div> + <br> + <script> + var scrollMes = document.getElementsByClassName("scrollMe"); + for (var i = 0; i < scrollMes.length; ++i) + scrollMes[i].scrollTop = 100; + </script> +</body> +</html> diff --git a/third_party/WebKit/LayoutTests/fast/layers/scroll-with-transform-layer.html b/third_party/WebKit/LayoutTests/fast/layers/scroll-with-transform-layer.html new file mode 100644 index 0000000..41975d4 --- /dev/null +++ b/third_party/WebKit/LayoutTests/fast/layers/scroll-with-transform-layer.html @@ -0,0 +1,67 @@ +<!DOCTYPE html> +<html> +<head> +<style> + p { height: 100px; width: 100px; margin: 0px; } + p.red { background-color: red; } + p.green { background-color: green; } + div { height: 100px; width: 100px; } + div.relative { position: relative } + div.rotated + { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + transform: rotate(360deg); + } + div.translated + { + -webkit-transform: translate(0); + -moz-transform: translate(0); + transform: translate(0); + } +</style> +</head> +<body> + <span>http://webkit.org/b/67100: REGRESSION (r93614): Safari Reader doesn't repaint correctly when scrolling</span> + <span>All the boxes should only contain green content.</span> + <!-- Use a translation. --> + <div class="scrollMe translated" style="overflow: hidden;"> + <div class="relative"> + <p class="red"></p> + <p class="green"></p> + <p class="red"></p> + </div> + </div> + <br> + <div class="scrollMe translated" style="overflow: scroll;"> + <div class="relative"> + <p class="red"></p> + <p class="green"></p> + <p class="red"></p> + </div> + </div> + <br> + <!-- Use a rotation. --> + <div class="scrollMe rotated" style="overflow: hidden;"> + <div class="relative"> + <p class="red"></p> + <p class="green"></p> + <p class="red"></p> + </div> + </div> + <br> + <div class="scrollMe rotated" style="overflow: scroll;"> + <div class="relative"> + <p class="red"></p> + <p class="green"></p> + <p class="red"></p> + </div> + </div> + <br> + <script> + var scrollMes = document.getElementsByClassName("scrollMe"); + for (var i = 0; i < scrollMes.length; ++i) + scrollMes[i].scrollTop = 100; + </script> +</body> +</html> diff --git a/third_party/WebKit/Source/WebCore/ChangeLog b/third_party/WebKit/Source/WebCore/ChangeLog index 7327da7..74e1b4b 100644 --- a/third_party/WebKit/Source/WebCore/ChangeLog +++ b/third_party/WebKit/Source/WebCore/ChangeLog @@ -1,3 +1,24 @@ +2011-12-29 Julien Chaffraix <jchaffraix@webkit.org> + + REGRESSION (r93614): Safari Reader doesn't repaint correctly when scrolling + https://bugs.webkit.org/show_bug.cgi?id=67100 + + Reviewed by Dan Bernstein. + + Tests: fast/layers/scroll-with-transform-composited-layer-expected.html + fast/layers/scroll-with-transform-composited-layer.html + fast/layers/scroll-with-transform-layer-expected.html + fast/layers/scroll-with-transform-layer.html + + The regression came from a previous optimization that was wrongly kept after r93614. + + * rendering/RenderLayer.cpp: + (WebCore::RenderLayer::updateLayerPositionsAfterScroll): + Remove the early return for transformed layer. This change worked as we used + to call updateLayerPositions from scrollTo which would call updateLayerPosition on + all our descendants. After r93614, this is no longer the case and we explicitely need + to call updateLayerPosition on our descendants from updateLayerPositionsAfterScroll. + 2011-12-29 Alexander Pavlov <apavlov@chromium.org> Web Inspector: Tree views can be collapsed/hidden using the keyboard arrows diff --git a/third_party/WebKit/Source/WebCore/rendering/RenderLayer.cpp b/third_party/WebKit/Source/WebCore/rendering/RenderLayer.cpp index 5727771..c579499 100644 --- a/third_party/WebKit/Source/WebCore/rendering/RenderLayer.cpp +++ b/third_party/WebKit/Source/WebCore/rendering/RenderLayer.cpp @@ -465,11 +465,6 @@ void RenderLayer::updateLayerPositionsAfterScroll(UpdateLayerPositionsAfterScrol // FIXME: Is it worth passing the offsetFromRoot around like in updateLayerPositions? computeRepaintRects(); flags |= HasSeenFixedPositionedAncestor; - } else if (renderer()->hasTransform() && !renderer()->isRenderView()) { - // Transforms act as fixed position containers, so nothing inside a - // transformed element can be fixed relative to the viewport if the - // transformed element is not fixed itself or child of a fixed element. - return; } else if ((flags & HasSeenAncestorWithOverflowClip) && !m_canSkipRepaintRectsUpdateOnScroll) { // If we have seen an overflow clip, we should update our repaint rects as clippedOverflowRectForRepaint // intersects it with our ancestor overflow clip that may have moved. |