Bug 109033

Summary: [Qt][EFL] Coordinated Graphics: scroll animation makes fixed element shake.
Product: WebKit Reporter: Dongseong Hwang <dongseong.hwang>
Component: Layout and RenderingAssignee: Dongseong Hwang <dongseong.hwang>
Status: RESOLVED WONTFIX    
Severity: Normal CC: abecsi, allan.jensen, benjamin, cmarcelo, dev, gyuyoung.kim, jturcotte, kenneth, luiz, mcatanzaro, menard, mikhail.pozdnyakov, noam, rakuco, webkit.review.bot, zeno
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: Unspecified   
OS: Unspecified   
Bug Depends on: 110847, 111829    
Bug Blocks: 103105, 110066    
Attachments:
Description Flags
WIP: need more tests
none
Patch
none
Patch
none
Patch
none
Patch andersca: review-

Dongseong Hwang
Reported 2013-02-06 02:47:27 PST
When panning using touch, we can see shaking fixed element in ManualTests/fixed-position.html Strangely, if you early return in TextureMapperLayer::setScrollPositionDeltaIfNeeded, this shaking disappears. void TextureMapperLayer::setScrollPositionDeltaIfNeeded(const FloatSize& delta) { + return; ... } But when you drag using touch, we can see shaking with 'early return'.
Attachments
WIP: need more tests (13.12 KB, patch)
2013-02-26 03:05 PST, Dongseong Hwang
no flags
Patch (13.69 KB, patch)
2013-03-03 18:26 PST, Dongseong Hwang
no flags
Patch (13.82 KB, patch)
2013-03-05 00:40 PST, Dongseong Hwang
no flags
Patch (12.81 KB, patch)
2013-03-06 00:23 PST, Dongseong Hwang
no flags
Patch (12.90 KB, patch)
2013-03-08 00:09 PST, Dongseong Hwang
andersca: review-
Mikhail Pozdnyakov
Comment 1 2013-02-06 02:58:47 PST
Dongseong Hwang
Comment 2 2013-02-06 03:07:41 PST
(In reply to comment #1) > might be relevant to https://bugs.webkit.org/show_bug.cgi?id=106656 Yes, I think so. I suspect it is the timing issue in PageViewportController.
Allan Sandfeld Jensen
Comment 3 2013-02-14 02:14:26 PST
If I test on real web pages, it doesn't as much shake as just lack behind. When panning down the fixed elements will be slightly to high moving to catch up. The fast the pan, the more the fixed elements will be behind. Similarly if you pan up the fixed elements will be too low on the page. This is most easy to see with fixed elements fixed to the top or bottom of the page.
Dongseong Hwang
Comment 4 2013-02-19 21:54:18 PST
I think Bug 110080 is also related. I suspect there is a bug in PageViewportController related to pending and commit.
Dongseong Hwang
Comment 5 2013-02-26 03:05:54 PST
Created attachment 190252 [details] WIP: need more tests
Kenneth Rohde Christiansen
Comment 6 2013-02-26 06:40:01 PST
Comment on attachment 190252 [details] WIP: need more tests View in context: https://bugs.webkit.org/attachment.cgi?id=190252&action=review > Source/WebKit2/UIProcess/qt/QtWebPageSGNode.cpp:65 > - coordinatedGraphicsScene()->paintToCurrentGLContext(renderMatrix, inheritedOpacity(), clipRect(), mirrored ? TextureMapper::PaintingMirrored : 0); > + coordinatedGraphicsScene()->paintToCurrentGLContext(renderMatrix, inheritedOpacity(), clipRect(), pageNode()->scrollPosition(), mirrored ? TextureMapper::PaintingMirrored : 0); isnt the scroll pos part of the renderMatrix?
Dongseong Hwang
Comment 7 2013-02-26 15:04:02 PST
(In reply to comment #6) > (From update of attachment 190252 [details]) > View in context: https://bugs.webkit.org/attachment.cgi?id=190252&action=review > > > Source/WebKit2/UIProcess/qt/QtWebPageSGNode.cpp:65 > > - coordinatedGraphicsScene()->paintToCurrentGLContext(renderMatrix, inheritedOpacity(), clipRect(), mirrored ? TextureMapper::PaintingMirrored : 0); > > + coordinatedGraphicsScene()->paintToCurrentGLContext(renderMatrix, inheritedOpacity(), clipRect(), pageNode()->scrollPosition(), mirrored ? TextureMapper::PaintingMirrored : 0); > > isnt the scroll pos part of the renderMatrix? good question! we make renderMatrix using scrollposition, native window position, page scale and device scale, so it is hard to extract css position from renderMatrix. And I think it is natural that the clients that call paintToCurrentGLContext() prepare css position because they already prepare renderMatrix.
Jocelyn Turcotte
Comment 8 2013-02-27 05:21:42 PST
(In reply to comment #7) > good question! we make renderMatrix using scrollposition, native window position, page scale and device scale, so it is hard to extract css position from renderMatrix. And I think it is natural that the clients that call paintToCurrentGLContext() prepare css position because they already prepare renderMatrix. The position is already in the matrix and I think it would be better if you use it instead of duplicating this information in a separate parameter. That's how OpenGL represents a position: with a matrix, because it's unusual in this world to have all your objects on a single plane.
Dongseong Hwang
Comment 9 2013-02-27 23:18:52 PST
(In reply to comment #8) > The position is already in the matrix and I think it would be better if you use it instead of duplicating this information in a separate parameter. > > That's how OpenGL represents a position: with a matrix, because it's unusual in this world to have all your objects on a single plane. Ok, Jocelyn and kenneth. I'll survey more :)
Dongseong Hwang
Comment 10 2013-03-03 18:12:06 PST
(In reply to comment #9) > (In reply to comment #8) > > The position is already in the matrix and I think it would be better if you use it instead of duplicating this information in a separate parameter. > > > > That's how OpenGL represents a position: with a matrix, because it's unusual in this world to have all your objects on a single plane. > > Ok, Jocelyn and kenneth. I'll survey more :) I think it is very hard to extract scroll position from the matrix. In Qt case, QSGRenderNode generates the matrix using scroll position, page scale, device scale and node position. Scene can not get node position. In EFL case, WebView generates the matrix using scroll position, page scale, device scale and userViewportTransform. Scene can not get userViewportTransform. I think this nasty situation (Scene should know scroll position) is originated from fixed element positioned in contents coordinates, not viewport coordinates. I think we need to go with this not good code until we change WebCore to assign fixed element's position in viewport coordinates.
Dongseong Hwang
Comment 11 2013-03-03 18:26:12 PST
Allan Sandfeld Jensen
Comment 12 2013-03-04 02:46:46 PST
Comment on attachment 191158 [details] Patch Patch doesn't apply in UIProcess/efl/WebView.cpp.
Dongseong Hwang
Comment 13 2013-03-04 02:51:38 PST
(In reply to comment #12) > (From update of attachment 191158 [details]) > Patch doesn't apply in UIProcess/efl/WebView.cpp. Yes, because this patch depends on Bug 110847. After resolving Bug 110847, I'll re-post. :)
Jocelyn Turcotte
Comment 14 2013-03-04 03:32:07 PST
Comment on attachment 191158 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=191158&action=review I agree that with the current situation, with fixed layers expecting a delta, it won't be pretty solving this only with matrices. > Source/WebKit2/UIProcess/API/qt/raw/qrawwebview.cpp:208 > void QRawWebViewPrivate::pageDidRequestScroll(const WebCore::IntPoint& pos) > { > m_client->viewRequestedScroll(pos); > - > + m_position = QPointF(pos.x(), pos.y()); I doubt that adding this line fixes everything. From my understanding there is poor support for fixed elements in QRawWebView, if so please just make sure it builds and avoid adding more complexity to it.
Dongseong Hwang
Comment 15 2013-03-04 15:04:12 PST
Comment on attachment 191158 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=191158&action=review >> Source/WebKit2/UIProcess/API/qt/raw/qrawwebview.cpp:208 >> + m_position = QPointF(pos.x(), pos.y()); > > I doubt that adding this line fixes everything. From my understanding there is poor support for fixed elements in QRawWebView, if so please just make sure it builds and avoid adding more complexity to it. Thank you for review! Do you mean that there is another point to change scroll position in QRawWebView? I introduced m_position to trace scroll position to make Scene know that. In my understanding, QRawWebView does not have flickering or pinch event handling like QQuickWebView, so I think QRawWebViewPrivate::pageDidRequestScroll is only point changing scroll position. On the other hands, IMO supporting for fixed element is the role of Coordinated Graphics, not QRawWebView or QQuickWebView. When it comes to fixed element, what is different between QRawWebView and QQuickWebView? What I need from QRawWebView or QQuickWebView is just to query scroll position.
Dongseong Hwang
Comment 16 2013-03-05 00:40:17 PST
Kenneth Rohde Christiansen
Comment 17 2013-03-05 01:04:36 PST
Comment on attachment 191424 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=191424&action=review > Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:87 > > - adjustPositionForFixedLayers(); > + adjustPositionForFixedLayers(scrollPosition); why not just call setScrollPosition before this? That would be a minimal change to the code
Dongseong Hwang
Comment 18 2013-03-05 01:44:34 PST
Comment on attachment 191424 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=191424&action=review >> Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:87 >> + adjustPositionForFixedLayers(scrollPosition); > > why not just call setScrollPosition before this? That would be a minimal change to the code That is a way! What we have to do is to decide to remove either one parameter or one member :) do you think that it is better to remain setScrollPosition() and m_scrollPosition?
Jocelyn Turcotte
Comment 19 2013-03-05 05:16:15 PST
(In reply to comment #15) > Do you mean that there is another point to change scroll position in QRawWebView? I introduced m_position to trace scroll position to make Scene know that. > In my understanding, QRawWebView does not have flickering or pinch event handling like QQuickWebView, so I think QRawWebViewPrivate::pageDidRequestScroll is only point changing scroll position. QRawWebView is not completely implemented, we'll reuse it or get rid of it soon, so please just make sure that it compiles. In this case please just pass (0,0) for the new parameter in paintToCurrentGLContext.
Dongseong Hwang
Comment 20 2013-03-06 00:23:08 PST
Dongseong Hwang
Comment 21 2013-03-06 00:23:37 PST
(In reply to comment #19) > QRawWebView is not completely implemented, we'll reuse it or get rid of it soon, so please just make sure that it compiles. In this case please just pass (0,0) for the new parameter in paintToCurrentGLContext. aha, I see. :-)
Dongseong Hwang
Comment 22 2013-03-08 00:09:59 PST
Dongseong Hwang
Comment 23 2013-03-08 00:11:52 PST
now ews can run this patch. could you review? :)
Dongseong Hwang
Comment 24 2013-03-08 00:35:23 PST
Recently, regression related to scroll occurs. I filed Bug 111829. Bug 111829 should be fixed before this bug.
Dongseong Hwang
Comment 25 2013-03-08 02:10:09 PST
Comment on attachment 192165 [details] Patch After landing 111829, this bug will be valid again.
Gyuyoung Kim
Comment 26 2013-07-16 18:45:18 PDT
(In reply to comment #25) > (From update of attachment 192165 [details]) > After landing 111829, this bug will be valid again. Dongseong, Bug 111829 was landed. Any update ?
Anders Carlsson
Comment 27 2013-10-02 21:24:39 PDT
Comment on attachment 192165 [details] Patch Marking this patch r- for now since it touches Qt code and Qt has been removed.
Michael Catanzaro
Comment 28 2017-03-11 10:42:31 PST
Closing this bug because the EFL port has been removed from trunk. If you feel this bug applies to a different upstream WebKit port and was closed in error, please either update the title and reopen the bug, or leave a comment to request this.
Note You need to log in before you can comment on or make changes to this bug.