RESOLVED FIXED77063
[Qt][WK2] Child layers appear in wrong position when scrolling
https://bugs.webkit.org/show_bug.cgi?id=77063
Summary [Qt][WK2] Child layers appear in wrong position when scrolling
Noam Rosenthal
Reported 2012-01-25 17:11:26 PST
Since adding the fixedVisibleContentRect to WebKit2, child layers are displaced when scrolling or zooming. This is easily testable by running the http://webkit.org/blog-files/3d-transforms/morphing-cubes.html in touch mode.
Attachments
Patch (3.16 KB, patch)
2012-01-25 17:13 PST, Noam Rosenthal
no flags
Patch (4.41 KB, patch)
2012-01-26 10:29 PST, Noam Rosenthal
no flags
Patch (4.41 KB, patch)
2012-01-26 10:30 PST, Noam Rosenthal
gustavo: commit-queue-
Patch (4.45 KB, patch)
2012-01-26 16:39 PST, Noam Rosenthal
simon.fraser: review+
Patch (4.52 KB, patch)
2012-01-27 06:09 PST, Noam Rosenthal
no flags
Noam Rosenthal
Comment 1 2012-01-25 17:13:37 PST
Kenneth Rohde Christiansen
Comment 2 2012-01-26 02:53:55 PST
Comment on attachment 124037 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=124037&action=review > Source/WebKit2/WebProcess/WebPage/WebPage.cpp:795 > Frame* frame = m_page->mainFrame(); > + m_fixedVisibleContentRect = rect; > > frame->view()->setFixedVisibleContentRect(rect); > } can't you receive it from the FrameView instead? or is that a performance issue?
Jocelyn Turcotte
Comment 3 2012-01-26 04:22:29 PST
The scrolling of the layers seems to be done by a scroll layer. It would probably be better to prevent the use of this layer instead, RenderLayerCompositor::requiresScrollLayer seems to do exactly that.
Noam Rosenthal
Comment 4 2012-01-26 05:59:29 PST
Comment on attachment 124037 [details] Patch Will try another approach based on comments.
Noam Rosenthal
Comment 5 2012-01-26 10:29:10 PST
Noam Rosenthal
Comment 6 2012-01-26 10:30:30 PST
Gustavo Noronha (kov)
Comment 7 2012-01-26 13:54:51 PST
Noam Rosenthal
Comment 8 2012-01-26 16:39:54 PST
Simon Fraser (smfr)
Comment 9 2012-01-26 22:22:46 PST
Comment on attachment 124212 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=124212&action=review > Source/WebCore/platform/ScrollView.h:127 > + virtual void delegatesScrollingDidChange() { } Why is this public?
Noam Rosenthal
Comment 10 2012-01-26 22:34:19 PST
(In reply to comment #9) > (From update of attachment 124212 [details]) > View in context: https://bugs.webkit.org/attachment.cgi?id=124212&action=review > > > Source/WebCore/platform/ScrollView.h:127 > > + virtual void delegatesScrollingDidChange() { } > > Why is this public? Oversight :) Will make protected when committing.
Noam Rosenthal
Comment 11 2012-01-27 06:09:16 PST
WebKit Review Bot
Comment 12 2012-01-27 07:35:57 PST
Comment on attachment 124302 [details] Patch Clearing flags on attachment: 124302 Committed r106121: <http://trac.webkit.org/changeset/106121>
WebKit Review Bot
Comment 13 2012-01-27 07:36:03 PST
All reviewed patches have been landed. Closing bug.
Andras Becsi
Comment 14 2012-01-30 05:49:41 PST
Since this change MiniBrowser does not print the new tiles after the kinetic animation finishes. If I remove: // This applies when the application UI handles scrolling, in which case RenderLayerCompositor doesn't need to manage it. if (m_renderView->frameView()->delegatesScrolling()) return false; from WebCore/rendering/RenderLayerCompositor.cpp: RenderLayerCompositor::requiresScrollLayer, it works again. This might be because !m_renderView->frameView()->platformWidget() is actually true. Since I'm not familiar with this code, I do not know if this is actually a revealed bug somewhere else, or is that return not needed.
Noam Rosenthal
Comment 15 2012-01-30 06:22:46 PST
(In reply to comment #14) > Since this change MiniBrowser does not print the new tiles after the kinetic animation finishes. > > If I remove: > > // This applies when the application UI handles scrolling, in which case RenderLayerCompositor doesn't need to manage it. > if (m_renderView->frameView()->delegatesScrolling()) > return false; > > from WebCore/rendering/RenderLayerCompositor.cpp: RenderLayerCompositor::requiresScrollLayer, it works again. > This might be because !m_renderView->frameView()->platformWidget() is actually true. !m_renderView->frameView()->platformWidget() is always true in WebKit2. > > Since I'm not familiar with this code, I do not know if this is actually a revealed bug somewhere else, or is that return not needed. We delegate scrolling in WebKit2, so we shouldn't have the compositor control these layers... I will investigate, but I have less experience with the scrolling code, so if someone else wants to have a look be my guest.
Andras Becsi
Comment 16 2012-01-30 07:20:00 PST
(In reply to comment #15) Jocelyn helped finding the cause of this issue, I opened a bug for it: https://bugs.webkit.org/show_bug.cgi?id=77338
Note You need to log in before you can comment on or make changes to this bug.