Title: [132852] trunk/Source/WebCore
Revision
132852
Author
m...@apple.com
Date
2012-10-29 15:35:50 -0700 (Mon, 29 Oct 2012)

Log Message

<rdar://problem/12592716> REGRESSION (r132545): With full-page accelerated drawing, a
reproducible hang occurs at <http://www.cbsnews.com/stories/2010/01/24/ftn/main6136386.shtml>.

Reviewed by Anders Carlsson.

Work around <rdar://problem/12584492> by limiting the scope of the fix for <http://webkit.org/b/100413>.

* platform/graphics/cg/GraphicsContextCG.cpp:
(WebCore::GraphicsContext::clipOut): Reverted to using CGContextGetClipBoundingBox() rather
than CGRectInfinite when the context is accelerated and has a transform that is not just
a translation or a scale.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (132851 => 132852)


--- trunk/Source/WebCore/ChangeLog	2012-10-29 21:53:53 UTC (rev 132851)
+++ trunk/Source/WebCore/ChangeLog	2012-10-29 22:35:50 UTC (rev 132852)
@@ -1,3 +1,17 @@
+2012-10-29  Dan Bernstein  <m...@apple.com>
+
+        <rdar://problem/12592716> REGRESSION (r132545): With full-page accelerated drawing, a
+        reproducible hang occurs at <http://www.cbsnews.com/stories/2010/01/24/ftn/main6136386.shtml>.
+
+        Reviewed by Anders Carlsson.
+
+        Work around <rdar://problem/12584492> by limiting the scope of the fix for <http://webkit.org/b/100413>.
+
+        * platform/graphics/cg/GraphicsContextCG.cpp:
+        (WebCore::GraphicsContext::clipOut): Reverted to using CGContextGetClipBoundingBox() rather
+        than CGRectInfinite when the context is accelerated and has a transform that is not just
+        a translation or a scale.
+
 2012-10-29  Rob Buis  <rb...@rim.com>
 
         [BlackBerry] Simplify AuthenticationChallengeManager::instance

Modified: trunk/Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp (132851 => 132852)


--- trunk/Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp	2012-10-29 21:53:53 UTC (rev 132851)
+++ trunk/Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp	2012-10-29 22:35:50 UTC (rev 132852)
@@ -1060,7 +1060,12 @@
     if (paintingDisabled())
         return;
 
-    CGRect rects[2] = { CGRectInfinite, rect };
+    // FIXME: Using CGRectInfinite is much faster than getting the clip bounding box. However, due
+    // to <rdar://problem/12584492>, CGRectInfinite can't be used with an accelerated context that
+    // has certain transforms that aren't just a translation or a scale.
+    const AffineTransform& ctm = getCTM();
+    bool canUseCGRectInfinite = !isAcceleratedContext() || (!ctm.b() && !ctm.c());
+    CGRect rects[2] = { canUseCGRectInfinite ? CGRectInfinite : CGContextGetClipBoundingBox(platformContext()), rect };
     CGContextBeginPath(platformContext());
     CGContextAddRects(platformContext(), rects, 2);
     CGContextEOClip(platformContext());
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to