[SCM] WebKit Debian packaging branch, debian/experimental, updated. debian/1.3.8-1-1049-g2e11a8e

alex at webkit.org alex at webkit.org
Fri Jan 21 15:14:47 UTC 2011


The following commit has been merged in the debian/experimental branch:
commit 2a7a4c9880d8debfd1aa9ae71294c7df06dbbce8
Author: alex at webkit.org <alex at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Mon Jan 10 17:56:29 2011 +0000

    2011-01-10  Alejandro G. Castro  <alex at igalia.com>
    
            Reviewed by Martin Robinson.
    
            [cairo] Rendering a lot of arcs on top of each other causes time
            outs in some tests
            https://bugs.webkit.org/show_bug.cgi?id=50869
    
            We avoid the situation where we have to render the same arc
            multiple times over itself. Now it renders just one oval and
            moves to the end angle.
    
            * platform/graphics/cairo/PathCairo.cpp:
            (WebCore::Path::addArc):
    
    2011-01-10  Alejandro G. Castro  <alex at igalia.com>
    
            Reviewed by Martin Robinson.
    
            [cairo] Rendering a lot of arcs on top of each other causes time
            outs in some tests
            https://bugs.webkit.org/show_bug.cgi?id=50869
    
            Unskip canvas-largedraws.html after improving the performance for
            big angles.
    
            * platform/gtk/Skipped:
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@75381 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 6115740..a9084f8 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,16 @@
+2011-01-10  Alejandro G. Castro  <alex at igalia.com>
+
+        Reviewed by Martin Robinson.
+
+        [cairo] Rendering a lot of arcs on top of each other causes time
+        outs in some tests
+        https://bugs.webkit.org/show_bug.cgi?id=50869
+
+        Unskip canvas-largedraws.html after improving the performance for
+        big angles.
+
+        * platform/gtk/Skipped:
+
 2011-01-10  Adam Roben  <aroben at apple.com>
 
         Add some new tests to the Windows Skipped file
diff --git a/LayoutTests/platform/gtk/Skipped b/LayoutTests/platform/gtk/Skipped
index ff91ac8..a08f80f 100644
--- a/LayoutTests/platform/gtk/Skipped
+++ b/LayoutTests/platform/gtk/Skipped
@@ -5581,11 +5581,6 @@ fast/dom/StyleSheet/detached-style-pi-2.xhtml
 fast/dom/StyleSheet/detached-style-pi.xhtml
 fast/dom/StyleSheet/detached-style.html
 
-# The test times out, we have to improve the performance of the
-# rendering in these situations to
-# https://bugs.webkit.org/show_bug.cgi?id=50869
-fast/canvas/canvas-largedraws.html
-
 # https://bugs.webkit.org/show_bug.cgi?id=50886
 fast/dom/Window/timer-resume-on-navigation-back.html
 
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index a1cd5e7..60465e7 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,18 @@
+2011-01-10  Alejandro G. Castro  <alex at igalia.com>
+
+        Reviewed by Martin Robinson.
+
+        [cairo] Rendering a lot of arcs on top of each other causes time
+        outs in some tests
+        https://bugs.webkit.org/show_bug.cgi?id=50869
+
+        We avoid the situation where we have to render the same arc
+        multiple times over itself. Now it renders just one oval and
+        moves to the end angle.
+
+        * platform/graphics/cairo/PathCairo.cpp:
+        (WebCore::Path::addArc):
+
 2011-01-10  Carlos Garcia Campos  <cgarcia at igalia.com>
 
         Reviewed by Martin Robinson.
diff --git a/Source/WebCore/platform/graphics/cairo/PathCairo.cpp b/Source/WebCore/platform/graphics/cairo/PathCairo.cpp
index 03f1d10..981fdcd 100644
--- a/Source/WebCore/platform/graphics/cairo/PathCairo.cpp
+++ b/Source/WebCore/platform/graphics/cairo/PathCairo.cpp
@@ -5,6 +5,7 @@
                   2005, 2007 Apple Inc. All Rights reserved.
                   2007 Alp Toker <alp at atoker.com>
                   2008 Dirk Schulze <krit at webkit.org>
+                  2011 Igalia S.L.
 
     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Library General Public
@@ -143,18 +144,30 @@ void Path::addBezierCurveTo(const FloatPoint& controlPoint1, const FloatPoint& c
                    controlPoint3.x(), controlPoint3.y());
 }
 
-void Path::addArc(const FloatPoint& p, float r, float sa, float ea, bool anticlockwise)
+void Path::addArc(const FloatPoint& p, float r, float startAngle, float endAngle, bool anticlockwise)
 {
     // http://bugs.webkit.org/show_bug.cgi?id=16449
     // cairo_arc() functions hang or crash when passed inf as radius or start/end angle
-    if (!isfinite(r) || !isfinite(sa) || !isfinite(ea))
+    if (!isfinite(r) || !isfinite(startAngle) || !isfinite(endAngle))
         return;
 
     cairo_t* cr = platformPath()->context();
-    if (anticlockwise)
-        cairo_arc_negative(cr, p.x(), p.y(), r, sa, ea);
-    else
-        cairo_arc(cr, p.x(), p.y(), r, sa, ea);
+    float sweep = endAngle - startAngle;
+    const float twoPI = 2 * M_PI;
+    if ((sweep <= -twoPI || sweep >= twoPI)
+        && ((anticlockwise && (endAngle < startAngle)) || (!anticlockwise && (startAngle < endAngle)))) {
+        if (anticlockwise)
+            cairo_arc_negative(cr, p.x(), p.y(), r, startAngle, startAngle - twoPI);
+        else
+            cairo_arc(cr, p.x(), p.y(), r, startAngle, startAngle + twoPI);
+        cairo_new_sub_path(cr);
+        cairo_arc(cr, p.x(), p.y(), r, endAngle, endAngle);
+    } else {
+        if (anticlockwise)
+            cairo_arc_negative(cr, p.x(), p.y(), r, startAngle, endAngle);
+        else
+            cairo_arc(cr, p.x(), p.y(), r, startAngle, endAngle);
+    }
 }
 
 void Path::addArcTo(const FloatPoint& p1, const FloatPoint& p2, float radius)

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list