Title: [152611] trunk/Source/WebCore
Revision
152611
Author
[email protected]
Date
2013-07-13 18:11:43 -0700 (Sat, 13 Jul 2013)

Log Message

Avoid upconverting strings in various places in WebCore
https://bugs.webkit.org/show_bug.cgi?id=118632

Reviewed by Andreas Kling.

Avoid calling String::characters() in various places since it upconverts 8-bit strings to 16-bit strings.

Merge
https://chromium.googlesource.com/chromium/blink/+/a6162e2ad7c7870e22445d3c463d17e7ac871e80
https://chromium.googlesource.com/chromium/blink/+/18095209b3f467758b83894e7b14f813f6953f81
https://chromium.googlesource.com/chromium/blink/+/fefcf2b95d55f24c60fd2e95978cf4544f3c92ca
https://chromium.googlesource.com/chromium/blink/+/8e0527b0fb33998318aedfd74b3511025f7ff294
https://chromium.googlesource.com/chromium/blink/+/feaf798b04597b0849b4000fc305264895d3eac5
https://chromium.googlesource.com/chromium/blink/+/bd1a49103a6e07b1023d2c742d8217769efbffb4

* css/CSSParser.cpp:
(WebCore::CSSParser::setupParser):
(WebCore::CSSParser::parseImageSet):
(WebCore::CSSParser::rewriteSpecifiers):
* css/CSSParserValues.h:
(WebCore::CSSParserString::init):
(WebCore::CSSParserString::clear):
* dom/DatasetDOMStringMap.cpp:
(WebCore::isValidAttributeName):
(WebCore::convertAttributeNameToPropertyName):
(WebCore::propertyNameMatchesAttributeName):
(WebCore::isValidPropertyName):
(WebCore::convertPropertyNameToAttributeName):
* dom/Range.cpp:
(WebCore::Range::toString):
* dom/SecurityContext.cpp:
(WebCore::SecurityContext::parseSandboxPolicy):
* html/canvas/CanvasRenderingContext2D.cpp:
(WebCore::CanvasRenderingContext2D::measureText):
* html/track/TextTrackCue.cpp:
(WebCore::TextTrackCue::markFutureAndPastNodes):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (152610 => 152611)


--- trunk/Source/WebCore/ChangeLog	2013-07-13 15:32:07 UTC (rev 152610)
+++ trunk/Source/WebCore/ChangeLog	2013-07-14 01:11:43 UTC (rev 152611)
@@ -1,5 +1,44 @@
 2013-07-13  Ryosuke Niwa  <[email protected]>
 
+        Avoid upconverting strings in various places in WebCore
+        https://bugs.webkit.org/show_bug.cgi?id=118632
+
+        Reviewed by Andreas Kling.
+
+        Avoid calling String::characters() in various places since it upconverts 8-bit strings to 16-bit strings.
+
+        Merge
+        https://chromium.googlesource.com/chromium/blink/+/a6162e2ad7c7870e22445d3c463d17e7ac871e80
+        https://chromium.googlesource.com/chromium/blink/+/18095209b3f467758b83894e7b14f813f6953f81
+        https://chromium.googlesource.com/chromium/blink/+/fefcf2b95d55f24c60fd2e95978cf4544f3c92ca
+        https://chromium.googlesource.com/chromium/blink/+/8e0527b0fb33998318aedfd74b3511025f7ff294
+        https://chromium.googlesource.com/chromium/blink/+/feaf798b04597b0849b4000fc305264895d3eac5
+        https://chromium.googlesource.com/chromium/blink/+/bd1a49103a6e07b1023d2c742d8217769efbffb4
+
+        * css/CSSParser.cpp:
+        (WebCore::CSSParser::setupParser):
+        (WebCore::CSSParser::parseImageSet):
+        (WebCore::CSSParser::rewriteSpecifiers):
+        * css/CSSParserValues.h:
+        (WebCore::CSSParserString::init):
+        (WebCore::CSSParserString::clear):
+        * dom/DatasetDOMStringMap.cpp:
+        (WebCore::isValidAttributeName):
+        (WebCore::convertAttributeNameToPropertyName):
+        (WebCore::propertyNameMatchesAttributeName):
+        (WebCore::isValidPropertyName):
+        (WebCore::convertPropertyNameToAttributeName):
+        * dom/Range.cpp:
+        (WebCore::Range::toString):
+        * dom/SecurityContext.cpp:
+        (WebCore::SecurityContext::parseSandboxPolicy):
+        * html/canvas/CanvasRenderingContext2D.cpp:
+        (WebCore::CanvasRenderingContext2D::measureText):
+        * html/track/TextTrackCue.cpp:
+        (WebCore::TextTrackCue::markFutureAndPastNodes):
+
+2013-07-13  Ryosuke Niwa  <[email protected]>
+
         parseHTMLInteger shouldn't upconvert 8-bit string
         https://bugs.webkit.org/show_bug.cgi?id=118629
 

Modified: trunk/Source/WebCore/css/CSSParser.cpp (152610 => 152611)


--- trunk/Source/WebCore/css/CSSParser.cpp	2013-07-13 15:32:07 UTC (rev 152610)
+++ trunk/Source/WebCore/css/CSSParser.cpp	2013-07-14 01:11:43 UTC (rev 152611)
@@ -436,7 +436,8 @@
     for (unsigned i = 0; i < m_parsedTextPrefixLength; i++)
         m_dataStart16[i] = prefix[i];
 
-    memcpy(m_dataStart16.get() + m_parsedTextPrefixLength, string.characters(), stringLength * sizeof(UChar));
+    ASSERT(stringLength);
+    memcpy(m_dataStart16.get() + m_parsedTextPrefixLength, string.characters16(), stringLength * sizeof(UChar));
 
     unsigned start = m_parsedTextPrefixLength + stringLength;
     unsigned end = start + suffixLength;
@@ -8059,7 +8060,7 @@
             const LChar* start = string.characters8();
             parseDouble(start, start + length, 'x', imageScaleFactor);
         } else {
-            const UChar* start = string.characters();
+            const UChar* start = string.characters16();
             parseDouble(start, start + length, 'x', imageScaleFactor);
         }
         if (imageScaleFactor <= 0)
@@ -12202,7 +12203,7 @@
     if (length > maxCSSPropertyNameLength)
         return CSSPropertyInvalid;
     
-    return string.is8Bit() ? cssPropertyID(string.characters8(), length) : cssPropertyID(string.characters(), length);
+    return string.is8Bit() ? cssPropertyID(string.characters8(), length) : cssPropertyID(string.characters16(), length);
 }
 
 CSSPropertyID cssPropertyID(const CSSParserString& string)
@@ -12300,7 +12301,7 @@
 
     if (string.is8Bit())
         return isCSSTokenizerIdentifier(string.characters8(), length);
-    return isCSSTokenizerIdentifier(string.characters(), length);
+    return isCSSTokenizerIdentifier(string.characters16(), length);
 }
 
 template <typename CharacterType>
@@ -12340,7 +12341,7 @@
 
     if (string.is8Bit())
         return isCSSTokenizerURL(string.characters8(), length);
-    return isCSSTokenizerURL(string.characters(), length);
+    return isCSSTokenizerURL(string.characters16(), length);
 }
 
 

Modified: trunk/Source/WebCore/css/CSSParserValues.h (152610 => 152611)


--- trunk/Source/WebCore/css/CSSParserValues.h	2013-07-13 15:32:07 UTC (rev 152610)
+++ trunk/Source/WebCore/css/CSSParserValues.h	2013-07-14 01:11:43 UTC (rev 152611)
@@ -50,11 +50,11 @@
     void init(const String& string)
     {
         m_length = string.length();
-        if (m_length && string.is8Bit()) {
+        if (!m_length || string.is8Bit()) {
             m_data.characters8 = const_cast<LChar*>(string.characters8());
             m_is8Bit = true;
         } else {
-            m_data.characters16 = const_cast<UChar*>(string.characters());
+            m_data.characters16 = const_cast<UChar*>(string.characters16());
             m_is8Bit = false;
         }
     }
@@ -63,7 +63,7 @@
     {
         m_data.characters8 = 0;
         m_length = 0;
-        m_is8Bit = false;
+        m_is8Bit = true;
     }
 
     bool is8Bit() const { return m_is8Bit; }

Modified: trunk/Source/WebCore/dom/DatasetDOMStringMap.cpp (152610 => 152611)


--- trunk/Source/WebCore/dom/DatasetDOMStringMap.cpp	2013-07-13 15:32:07 UTC (rev 152610)
+++ trunk/Source/WebCore/dom/DatasetDOMStringMap.cpp	2013-07-14 01:11:43 UTC (rev 152611)
@@ -39,10 +39,9 @@
     if (!name.startsWith("data-"))
         return false;
 
-    const UChar* characters = name.characters();
     unsigned length = name.length();
     for (unsigned i = 5; i < length; ++i) {
-        if (isASCIIUpper(characters[i]))
+        if (isASCIIUpper(name[i]))
             return false;
     }
 
@@ -53,15 +52,14 @@
 {
     StringBuilder stringBuilder;
 
-    const UChar* characters = name.characters();
     unsigned length = name.length();
     for (unsigned i = 5; i < length; ++i) {
-        UChar character = characters[i];
+        UChar character = name[i];
         if (character != '-')
             stringBuilder.append(character);
         else {
-            if ((i + 1 < length) && isASCIILower(characters[i + 1])) {
-                stringBuilder.append(toASCIIUpper(characters[i + 1]));
+            if ((i + 1 < length) && isASCIILower(name[i + 1])) {
+                stringBuilder.append(toASCIIUpper(name[i + 1]));
                 ++i;
             } else
                 stringBuilder.append(character);
@@ -76,19 +74,18 @@
     if (!attributeName.startsWith("data-"))
         return false;
 
-    const UChar* property = propertyName.characters();
-    const UChar* attribute = attributeName.characters();
     unsigned propertyLength = propertyName.length();
     unsigned attributeLength = attributeName.length();
-   
+
     unsigned a = 5;
     unsigned p = 0;
     bool wordBoundary = false;
     while (a < attributeLength && p < propertyLength) {
-        if (attribute[a] == '-' && a + 1 < attributeLength && attribute[a + 1] != '-')
+        const UChar currentAttributeNameChar = attributeName[a];
+        if (currentAttributeNameChar == '-' && a + 1 < attributeLength && attributeName[a + 1] != '-')
             wordBoundary = true;
         else {
-            if ((wordBoundary ? toASCIIUpper(attribute[a]) : attribute[a]) != property[p])
+            if ((wordBoundary ? toASCIIUpper(currentAttributeNameChar) : currentAttributeNameChar) != propertyName[p])
                 return false;
             p++;
             wordBoundary = false;
@@ -101,10 +98,9 @@
 
 static bool isValidPropertyName(const String& name)
 {
-    const UChar* characters = name.characters();
     unsigned length = name.length();
     for (unsigned i = 0; i < length; ++i) {
-        if (characters[i] == '-' && (i + 1 < length) && isASCIILower(characters[i + 1]))
+        if (name[i] == '-' && (i + 1 < length) && isASCIILower(name[i + 1]))
             return false;
     }
     return true;
@@ -115,10 +111,9 @@
     StringBuilder builder;
     builder.append("data-");
 
-    const UChar* characters = name.characters();
     unsigned length = name.length();
     for (unsigned i = 0; i < length; ++i) {
-        UChar character = characters[i];
+        UChar character = name[i];
         if (isASCIIUpper(character)) {
             builder.append('-');
             builder.append(toASCIILower(character));

Modified: trunk/Source/WebCore/dom/Range.cpp (152610 => 152611)


--- trunk/Source/WebCore/dom/Range.cpp	2013-07-13 15:32:07 UTC (rev 152610)
+++ trunk/Source/WebCore/dom/Range.cpp	2013-07-14 01:11:43 UTC (rev 152611)
@@ -1066,11 +1066,11 @@
     Node* pastLast = pastLastNode();
     for (Node* n = firstNode(); n != pastLast; n = NodeTraversal::next(n)) {
         if (n->nodeType() == Node::TEXT_NODE || n->nodeType() == Node::CDATA_SECTION_NODE) {
-            String data = ""
+            const String& data = ""
             int length = data.length();
             int start = (n == m_start.container()) ? min(max(0, m_start.offset()), length) : 0;
             int end = (n == m_end.container()) ? min(max(start, m_end.offset()), length) : length;
-            builder.append(data.characters() + start, end - start);
+            builder.append(data, start, end - start);
         }
     }
 

Modified: trunk/Source/WebCore/dom/SecurityContext.cpp (152610 => 152611)


--- trunk/Source/WebCore/dom/SecurityContext.cpp	2013-07-13 15:32:07 UTC (rev 152610)
+++ trunk/Source/WebCore/dom/SecurityContext.cpp	2013-07-14 01:11:43 UTC (rev 152611)
@@ -82,18 +82,17 @@
     // http://www.w3.org/TR/html5/the-iframe-element.html#attr-iframe-sandbox
     // Parse the unordered set of unique space-separated tokens.
     SandboxFlags flags = SandboxAll;
-    const UChar* characters = policy.characters();
     unsigned length = policy.length();
     unsigned start = 0;
     unsigned numberOfTokenErrors = 0;
     StringBuilder tokenErrors;
     while (true) {
-        while (start < length && isHTMLSpace(characters[start]))
+        while (start < length && isHTMLSpace(policy[start]))
             ++start;
         if (start >= length)
             break;
         unsigned end = start + 1;
-        while (end < length && !isHTMLSpace(characters[end]))
+        while (end < length && !isHTMLSpace(policy[end]))
             ++end;
 
         // Turn off the corresponding sandbox flag if it's set as "allowed".

Modified: trunk/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp (152610 => 152611)


--- trunk/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp	2013-07-13 15:32:07 UTC (rev 152610)
+++ trunk/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp	2013-07-14 01:11:43 UTC (rev 152611)
@@ -2113,7 +2113,7 @@
     Font::setCodePath(Font::Complex);
 #endif
 
-    metrics->setWidth(accessFont().width(TextRun(text.characters(), text.length())));
+    metrics->setWidth(accessFont().width(TextRun(text)));
 
 #if PLATFORM(QT)
     Font::setCodePath(oldCodePath);

Modified: trunk/Source/WebCore/html/track/TextTrackCue.cpp (152610 => 152611)


--- trunk/Source/WebCore/html/track/TextTrackCue.cpp	2013-07-13 15:32:07 UTC (rev 152610)
+++ trunk/Source/WebCore/html/track/TextTrackCue.cpp	2013-07-14 01:11:43 UTC (rev 152611)
@@ -776,7 +776,7 @@
             toWebVTTElement(child)->setIsPastNode(isPastNode);
             // Make an elemenet id match a cue id for style matching purposes.
             if (!m_id.isEmpty())
-                toElement(child)->setIdAttribute(AtomicString(m_id.characters(), m_id.length()));
+                toElement(child)->setIdAttribute(m_id);
         }
     }
 }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to