Title: [137630] trunk
Revision
137630
Author
[email protected]
Date
2012-12-13 11:32:23 -0800 (Thu, 13 Dec 2012)

Log Message

.: Added manual test for canvas setFont speed.
https://bugs.webkit.org/show_bug.cgi?id=104923

Reviewed by James Robinson.

* ManualTests/canvas-font-speed.html: Added.

Source/WebCore: CanvasRenderingContext2D::setFont() is slow.
https://bugs.webkit.org/show_bug.cgi?id=104923

Reviewed by James Robinson.

This spends most of its time in the CSS parser.  As a first step,
early-out if the new value is the same as unparsed string for the current font.
See also http://code.google.com/p/chromium/issues/detail?id=164016.

Covered by existing tests in canvas/ and fast/canvas, and ManualTests/canvas-font-speed.html.

* html/canvas/CanvasRenderingContext2D.cpp:
(WebCore::CanvasRenderingContext2D::setFont):

Modified Paths

Added Paths

Diff

Modified: trunk/ChangeLog (137629 => 137630)


--- trunk/ChangeLog	2012-12-13 19:26:08 UTC (rev 137629)
+++ trunk/ChangeLog	2012-12-13 19:32:23 UTC (rev 137630)
@@ -1,3 +1,12 @@
+2012-12-13  Stephen White  <[email protected]>
+
+        Added manual test for canvas setFont speed.
+        https://bugs.webkit.org/show_bug.cgi?id=104923
+
+        Reviewed by James Robinson.
+
+        * ManualTests/canvas-font-speed.html: Added.
+
 2012-12-13  Jerome Pasion  <[email protected]>
 
         [Qt] Doc: Fixing Qt WebKit reference documentation.

Added: trunk/ManualTests/canvas-font-speed.html (0 => 137630)


--- trunk/ManualTests/canvas-font-speed.html	                        (rev 0)
+++ trunk/ManualTests/canvas-font-speed.html	2012-12-13 19:32:23 UTC (rev 137630)
@@ -0,0 +1,18 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<title>Canvas 2d Context Font Property Speed</title>
+</head>
+<body>
+  <canvas id='thecanvas' height=100 width=100/>
+  <script>
+    var canvas = document.getElementById('thecanvas');
+    var context = canvas.getContext('2d');
+    var t0 = Date.now();
+    for (var i = 0; i < 1000; i++) {
+      context.font = 'bold 13px Arial';
+    }
+    alert('Elapsed for 1000 font settings: ' + (Date.now() - t0));
+  </script>
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (137629 => 137630)


--- trunk/Source/WebCore/ChangeLog	2012-12-13 19:26:08 UTC (rev 137629)
+++ trunk/Source/WebCore/ChangeLog	2012-12-13 19:32:23 UTC (rev 137630)
@@ -1,3 +1,19 @@
+2012-12-13  Stephen White  <[email protected]>
+
+        CanvasRenderingContext2D::setFont() is slow.
+        https://bugs.webkit.org/show_bug.cgi?id=104923
+
+        Reviewed by James Robinson.
+
+        This spends most of its time in the CSS parser.  As a first step,
+        early-out if the new value is the same as unparsed string for the current font.
+        See also http://code.google.com/p/chromium/issues/detail?id=164016.
+
+        Covered by existing tests in canvas/ and fast/canvas, and ManualTests/canvas-font-speed.html.
+
+        * html/canvas/CanvasRenderingContext2D.cpp:
+        (WebCore::CanvasRenderingContext2D::setFont):
+
 2012-12-13  Parth Patel  <[email protected]>, Max Feil <[email protected]>
 
         Allow plugins to be disabled by shared library filename

Modified: trunk/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp (137629 => 137630)


--- trunk/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp	2012-12-13 19:26:08 UTC (rev 137629)
+++ trunk/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp	2012-12-13 19:32:23 UTC (rev 137630)
@@ -2072,6 +2072,9 @@
 
 void CanvasRenderingContext2D::setFont(const String& newFont)
 {
+    if (newFont == state().m_unparsedFont && state().m_realizedFont)
+        return;
+
     RefPtr<StylePropertySet> parsedStyle = StylePropertySet::create();
     CSSParser::parseValue(parsedStyle.get(), CSSPropertyFont, newFont, true, strictToCSSParserMode(!m_usesCSSCompatibilityParseMode), 0);
     if (parsedStyle->isEmpty())
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to