RESOLVED FIXED Bug 75780
[Qt][WK2] Accelerated and non-accelerated animations need to be synchronized
https://bugs.webkit.org/show_bug.cgi?id=75780
Summary [Qt][WK2] Accelerated and non-accelerated animations need to be synchronized
Noam Rosenthal
Reported 2012-01-07 09:44:54 PST
In order to avoid an overload of IPC messages during each animation frame, we've moved the animation logic to the UI process. However, this makes the animation go out of sync when there's both an accelerated and a non-accelerated animation running at the same time. The solution may include keeping the animation logic in the UI process, but moving the frame timers to the web-process, sending timed frame events to the UI process without the rest of the animation info.
Attachments
Test (689 bytes, text/html)
2012-02-29 14:58 PST, Noam Rosenthal
no flags
Patch (43.65 KB, patch)
2012-03-28 10:39 PDT, Noam Rosenthal
no flags
Patch (12.79 KB, patch)
2012-03-28 15:12 PDT, Noam Rosenthal
no flags
Patch for landing (12.80 KB, patch)
2012-04-09 10:52 PDT, Noam Rosenthal
no flags
Noam Rosenthal
Comment 1 2012-02-29 14:58:33 PST
Noam Rosenthal
Comment 2 2012-03-28 10:39:32 PDT
Jocelyn Turcotte
Comment 3 2012-03-28 12:22:17 PDT
Comment on attachment 134331 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=134331&action=review > Source/WebKit2/Shared/WebLayerTreeInfo.cpp:35 > + SimpleArgumentCoder<WebLayerInfo>::encode(encoder, *this); Could you add a comment somewhere that this requires WebLayerInfo to be a POD type? > Source/WebKit2/UIProcess/WebLayerTreeRenderer.cpp:-128 > -void WebLayerTreeRenderer::syncAnimations() It would be very nice if the animation removal was a separate patch, or the other way around. > Source/WebKit2/UIProcess/WebLayerTreeRenderer.cpp:-176 > - bool needsToUpdateImageTiles = layerInfo.imageIsUpdated || (layerInfo.contentsRect != layer->contentsRect() && layerInfo.imageBackingStoreID); You could remove the imageIsUpdated flag from WebLayerInfo if you don't use it anymore. > Source/WebKit2/UIProcess/WebLayerTreeRenderer.cpp:169 > + child = createLayer(childID).leakPtr(); Is this layer deleted anywhere on destruction? Anyway this looks like moved code. > Source/WebKit2/UIProcess/WebLayerTreeRenderer.cpp:279 > + QImage image = bitmap->createQImage(); Is this intentional? > Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:79 > + m_shouldUpdateVisibleRect = true; I don't see this used anywhere, am I missing something? > Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:464 > + float scale = shouldUseTiledBackingStore() ? m_contentsScale : 1; The way this function is used here is misleading, its name could be improved or a comment might help. This could also go in a different patch. > Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:556 > void WebGraphicsLayer::updateContentBuffers() > { > + if (m_image) { > + if (!m_layerInfo.imageBackingStoreID) > + m_layerInfo.imageBackingStoreID = m_webGraphicsLayerClient->adoptImageBackingStore(m_image.get()); > + } > + Is it voluntary to move it back there? > Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:645 > +bool WebGraphicsLayer::selfOrAncestorMightHaveNonAffineTransforms() I would remove "Might". > Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:650 > - if (!m_transformAnimations.isEmpty()) > + if (!m_layerTransform.combined().isAffine()) > return true; > > - if (parent()) > - return toWebGraphicsLayer(parent())->selfOrAncestorHasActiveTransformAnimations(); > - > return false; return !m_layerTranform.combined().isAffine()
Noam Rosenthal
Comment 4 2012-03-28 12:55:40 PDT
Comment on attachment 134331 [details] Patch Separating to a few patches.
Noam Rosenthal
Comment 5 2012-03-28 15:12:32 PDT
Jocelyn Turcotte
Comment 6 2012-03-29 04:32:40 PDT
Comment on attachment 134418 [details] Patch Much softer on the brain, thanks :) This one LGTM.
Jocelyn Turcotte
Comment 7 2012-03-29 05:07:13 PDT
Comment on attachment 134418 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=134418&action=review Sorry, forgot a small nitpick. > Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:642 > - if (!m_transformAnimations.isEmpty()) > - return true; > - > if (!m_layerTransform.combined().isAffine()) > return true; return !m_layerTransform.combined().isAffine(); would look better here. Same comment as before, so just tell me if you think it doesn't make sense.
Noam Rosenthal
Comment 8 2012-03-29 06:42:48 PDT
(In reply to comment #7) > (From update of attachment 134418 [details]) > View in context: https://bugs.webkit.org/attachment.cgi?id=134418&action=review > > Sorry, forgot a small nitpick. > > > Source/WebKit2/WebProcess/WebCoreSupport/WebGraphicsLayer.cpp:642 > > - if (!m_transformAnimations.isEmpty()) > > - return true; > > - > > if (!m_layerTransform.combined().isAffine()) > > return true; > > return !m_layerTransform.combined().isAffine(); would look better here. Same comment as before, so just tell me if you think it doesn't make sense. I agree, just missed that.
Kenneth Rohde Christiansen
Comment 9 2012-04-03 07:09:01 PDT
Comment on attachment 134418 [details] Patch dont land before we have the whole feature reviewed :)
Noam Rosenthal
Comment 10 2012-04-09 10:52:55 PDT
Created attachment 136266 [details] Patch for landing
WebKit Review Bot
Comment 11 2012-04-09 14:59:29 PDT
Comment on attachment 136266 [details] Patch for landing Clearing flags on attachment: 136266 Committed r113628: <http://trac.webkit.org/changeset/113628>
WebKit Review Bot
Comment 12 2012-04-09 14:59:35 PDT
All reviewed patches have been landed. Closing bug.
Note You need to log in before you can comment on or make changes to this bug.