Bug 26544

Summary: Transition animation fails to render correctly at http://www.ferretarmy.com/ (singular matrices)
Product: WebKit Reporter: Chris Marrin <cmarrin>
Component: CSSAssignee: Chris Marrin <cmarrin>
Status: RESOLVED FIXED    
Severity: Normal Keywords: InRadar
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: Mac   
OS: OS X 10.5   
URL: http://www.ferretarmy.com/files/css-animation/test1/test1.html
Attachments:
Description Flags
Patch
simon.fraser: review-
Replacement patch simon.fraser: review+

Chris Marrin
Reported 2009-06-19 09:42:58 PDT
Transition animation fails to rendered correctly at http://www.ferretarmy.com/files/css-animation/test1/test1.html. Reproduces on TOT or Webkit nightly ( r44702) under SL 10A386 with a Mac Book Pro ( late 2008 ) * STEPS TO REPRODUCE 1. Launch TOT or Webkit nightly ( r44702) under SL 10A386 2. Go to http://www.ferretarmy.com/files/css-animation/test1/test1.html 3. Click on on page to start the animation. The animation SHOULD display a series of green blocks falling and rotating slightly as they drop to bottom of browser window. Instead, you see the green blocks remain stationery on the page and scale to (0).
Attachments
Patch (2.32 KB, patch)
2009-06-19 09:45 PDT, Chris Marrin
simon.fraser: review-
Replacement patch (8.90 KB, patch)
2009-06-19 13:53 PDT, Chris Marrin
simon.fraser: review+
Chris Marrin
Comment 1 2009-06-19 09:45:59 PDT
Simon Fraser (smfr)
Comment 2 2009-06-19 11:25:00 PDT
Simon Fraser (smfr)
Comment 3 2009-06-19 11:50:26 PDT
Comment on attachment 31547 [details] Patch > Index: WebCore/platform/graphics/mac/GraphicsLayerCA.mm > =================================================================== > --- WebCore/platform/graphics/mac/GraphicsLayerCA.mm (revision 44828) > +++ WebCore/platform/graphics/mac/GraphicsLayerCA.mm (working copy) > @@ -981,6 +981,15 @@ bool GraphicsLayerCA::animateTransform(c > if (isMatrixAnimation) { > TransformationMatrix t; > curValue.value()->apply(size, t); > + > + // If any matrix is singular, CA won't animate it correctly. So fall back to software animation > + if (!t.isInvertible()) { > + [timesArray release]; > + [valArray release]; > + [tfArray release]; > + return false; > + } Maybe use OwnPtrs for those arrays so we don't have to worry about releasing them? Also, you can't return here without END_BLOCK_OBJC_EXCEPTIONS. I'd prefer a 'break' out of the loop, to avoid additional returns from this method. > CATransform3D cat; > copyTransform(cat, t); > [valArray addObject:[NSValue valueWithCATransform3D:cat]]; > @@ -1004,6 +1013,12 @@ bool GraphicsLayerCA::animateTransform(c > TransformationMatrix fromt, tot; > valueList.at(0).value()->apply(size, fromt); > valueList.at(1).value()->apply(size, tot); > + > + // If any matrix is singular, CA won't animate it correctly. So fall back to software animation > + if (!fromt.isInvertible()) > + return false; > + if (!tot.isInvertible()) > + return false; Same issue about returning without END_BLOCK_OBJC_EXCEPTIONS.
Chris Marrin
Comment 4 2009-06-19 13:53:26 PDT
Created attachment 31562 [details] Replacement patch Incorporates changes from review
Chris Marrin
Comment 5 2009-06-19 15:43:49 PDT
Sending WebCore/ChangeLog Sending WebCore/platform/graphics/mac/GraphicsLayerCA.mm Transmitting file data .. Committed revision 44878.
Note You need to log in before you can comment on or make changes to this bug.