Changeset 152611 in webkit


Ignore:
Timestamp:
Jul 13, 2013, 6:11:43 PM (12 years ago)
Author:
rniwa@webkit.org
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):

Location:
trunk/Source/WebCore
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r152610 r152611  
     12013-07-13  Ryosuke Niwa  <rniwa@webkit.org>
     2
     3        Avoid upconverting strings in various places in WebCore
     4        https://bugs.webkit.org/show_bug.cgi?id=118632
     5
     6        Reviewed by Andreas Kling.
     7
     8        Avoid calling String::characters() in various places since it upconverts 8-bit strings to 16-bit strings.
     9
     10        Merge
     11        https://chromium.googlesource.com/chromium/blink/+/a6162e2ad7c7870e22445d3c463d17e7ac871e80
     12        https://chromium.googlesource.com/chromium/blink/+/18095209b3f467758b83894e7b14f813f6953f81
     13        https://chromium.googlesource.com/chromium/blink/+/fefcf2b95d55f24c60fd2e95978cf4544f3c92ca
     14        https://chromium.googlesource.com/chromium/blink/+/8e0527b0fb33998318aedfd74b3511025f7ff294
     15        https://chromium.googlesource.com/chromium/blink/+/feaf798b04597b0849b4000fc305264895d3eac5
     16        https://chromium.googlesource.com/chromium/blink/+/bd1a49103a6e07b1023d2c742d8217769efbffb4
     17
     18        * css/CSSParser.cpp:
     19        (WebCore::CSSParser::setupParser):
     20        (WebCore::CSSParser::parseImageSet):
     21        (WebCore::CSSParser::rewriteSpecifiers):
     22        * css/CSSParserValues.h:
     23        (WebCore::CSSParserString::init):
     24        (WebCore::CSSParserString::clear):
     25        * dom/DatasetDOMStringMap.cpp:
     26        (WebCore::isValidAttributeName):
     27        (WebCore::convertAttributeNameToPropertyName):
     28        (WebCore::propertyNameMatchesAttributeName):
     29        (WebCore::isValidPropertyName):
     30        (WebCore::convertPropertyNameToAttributeName):
     31        * dom/Range.cpp:
     32        (WebCore::Range::toString):
     33        * dom/SecurityContext.cpp:
     34        (WebCore::SecurityContext::parseSandboxPolicy):
     35        * html/canvas/CanvasRenderingContext2D.cpp:
     36        (WebCore::CanvasRenderingContext2D::measureText):
     37        * html/track/TextTrackCue.cpp:
     38        (WebCore::TextTrackCue::markFutureAndPastNodes):
     39
    1402013-07-13  Ryosuke Niwa  <rniwa@webkit.org>
    241
  • trunk/Source/WebCore/css/CSSParser.cpp

    r152479 r152611  
    437437        m_dataStart16[i] = prefix[i];
    438438
    439     memcpy(m_dataStart16.get() + m_parsedTextPrefixLength, string.characters(), stringLength * sizeof(UChar));
     439    ASSERT(stringLength);
     440    memcpy(m_dataStart16.get() + m_parsedTextPrefixLength, string.characters16(), stringLength * sizeof(UChar));
    440441
    441442    unsigned start = m_parsedTextPrefixLength + stringLength;
     
    80608061            parseDouble(start, start + length, 'x', imageScaleFactor);
    80618062        } else {
    8062             const UChar* start = string.characters();
     8063            const UChar* start = string.characters16();
    80638064            parseDouble(start, start + length, 'x', imageScaleFactor);
    80648065        }
     
    1220312204        return CSSPropertyInvalid;
    1220412205   
    12205     return string.is8Bit() ? cssPropertyID(string.characters8(), length) : cssPropertyID(string.characters(), length);
     12206    return string.is8Bit() ? cssPropertyID(string.characters8(), length) : cssPropertyID(string.characters16(), length);
    1220612207}
    1220712208
     
    1230112302    if (string.is8Bit())
    1230212303        return isCSSTokenizerIdentifier(string.characters8(), length);
    12303     return isCSSTokenizerIdentifier(string.characters(), length);
     12304    return isCSSTokenizerIdentifier(string.characters16(), length);
    1230412305}
    1230512306
     
    1234112342    if (string.is8Bit())
    1234212343        return isCSSTokenizerURL(string.characters8(), length);
    12343     return isCSSTokenizerURL(string.characters(), length);
     12344    return isCSSTokenizerURL(string.characters16(), length);
    1234412345}
    1234512346
  • trunk/Source/WebCore/css/CSSParserValues.h

    r151754 r152611  
    5151    {
    5252        m_length = string.length();
    53         if (m_length && string.is8Bit()) {
     53        if (!m_length || string.is8Bit()) {
    5454            m_data.characters8 = const_cast<LChar*>(string.characters8());
    5555            m_is8Bit = true;
    5656        } else {
    57             m_data.characters16 = const_cast<UChar*>(string.characters());
     57            m_data.characters16 = const_cast<UChar*>(string.characters16());
    5858            m_is8Bit = false;
    5959        }
     
    6464        m_data.characters8 = 0;
    6565        m_length = 0;
    66         m_is8Bit = false;
     66        m_is8Bit = true;
    6767    }
    6868
  • trunk/Source/WebCore/dom/DatasetDOMStringMap.cpp

    r123636 r152611  
    4040        return false;
    4141
    42     const UChar* characters = name.characters();
    4342    unsigned length = name.length();
    4443    for (unsigned i = 5; i < length; ++i) {
    45         if (isASCIIUpper(characters[i]))
     44        if (isASCIIUpper(name[i]))
    4645            return false;
    4746    }
     
    5453    StringBuilder stringBuilder;
    5554
    56     const UChar* characters = name.characters();
    5755    unsigned length = name.length();
    5856    for (unsigned i = 5; i < length; ++i) {
    59         UChar character = characters[i];
     57        UChar character = name[i];
    6058        if (character != '-')
    6159            stringBuilder.append(character);
    6260        else {
    63             if ((i + 1 < length) && isASCIILower(characters[i + 1])) {
    64                 stringBuilder.append(toASCIIUpper(characters[i + 1]));
     61            if ((i + 1 < length) && isASCIILower(name[i + 1])) {
     62                stringBuilder.append(toASCIIUpper(name[i + 1]));
    6563                ++i;
    6664            } else
     
    7775        return false;
    7876
    79     const UChar* property = propertyName.characters();
    80     const UChar* attribute = attributeName.characters();
    8177    unsigned propertyLength = propertyName.length();
    8278    unsigned attributeLength = attributeName.length();
    83    
     79
    8480    unsigned a = 5;
    8581    unsigned p = 0;
    8682    bool wordBoundary = false;
    8783    while (a < attributeLength && p < propertyLength) {
    88         if (attribute[a] == '-' && a + 1 < attributeLength && attribute[a + 1] != '-')
     84        const UChar currentAttributeNameChar = attributeName[a];
     85        if (currentAttributeNameChar == '-' && a + 1 < attributeLength && attributeName[a + 1] != '-')
    8986            wordBoundary = true;
    9087        else {
    91             if ((wordBoundary ? toASCIIUpper(attribute[a]) : attribute[a]) != property[p])
     88            if ((wordBoundary ? toASCIIUpper(currentAttributeNameChar) : currentAttributeNameChar) != propertyName[p])
    9289                return false;
    9390            p++;
     
    10299static bool isValidPropertyName(const String& name)
    103100{
    104     const UChar* characters = name.characters();
    105101    unsigned length = name.length();
    106102    for (unsigned i = 0; i < length; ++i) {
    107         if (characters[i] == '-' && (i + 1 < length) && isASCIILower(characters[i + 1]))
     103        if (name[i] == '-' && (i + 1 < length) && isASCIILower(name[i + 1]))
    108104            return false;
    109105    }
     
    116112    builder.append("data-");
    117113
    118     const UChar* characters = name.characters();
    119114    unsigned length = name.length();
    120115    for (unsigned i = 0; i < length; ++i) {
    121         UChar character = characters[i];
     116        UChar character = name[i];
    122117        if (isASCIIUpper(character)) {
    123118            builder.append('-');
  • trunk/Source/WebCore/dom/Range.cpp

    r151627 r152611  
    10671067    for (Node* n = firstNode(); n != pastLast; n = NodeTraversal::next(n)) {
    10681068        if (n->nodeType() == Node::TEXT_NODE || n->nodeType() == Node::CDATA_SECTION_NODE) {
    1069             String data = static_cast<CharacterData*>(n)->data();
     1069            const String& data = static_cast<CharacterData*>(n)->data();
    10701070            int length = data.length();
    10711071            int start = (n == m_start.container()) ? min(max(0, m_start.offset()), length) : 0;
    10721072            int end = (n == m_end.container()) ? min(max(start, m_end.offset()), length) : length;
    1073             builder.append(data.characters() + start, end - start);
     1073            builder.append(data, start, end - start);
    10741074        }
    10751075    }
  • trunk/Source/WebCore/dom/SecurityContext.cpp

    r149865 r152611  
    8383    // Parse the unordered set of unique space-separated tokens.
    8484    SandboxFlags flags = SandboxAll;
    85     const UChar* characters = policy.characters();
    8685    unsigned length = policy.length();
    8786    unsigned start = 0;
     
    8988    StringBuilder tokenErrors;
    9089    while (true) {
    91         while (start < length && isHTMLSpace(characters[start]))
     90        while (start < length && isHTMLSpace(policy[start]))
    9291            ++start;
    9392        if (start >= length)
    9493            break;
    9594        unsigned end = start + 1;
    96         while (end < length && !isHTMLSpace(characters[end]))
     95        while (end < length && !isHTMLSpace(policy[end]))
    9796            ++end;
    9897
  • trunk/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp

    r151947 r152611  
    21142114#endif
    21152115
    2116     metrics->setWidth(accessFont().width(TextRun(text.characters(), text.length())));
     2116    metrics->setWidth(accessFont().width(TextRun(text)));
    21172117
    21182118#if PLATFORM(QT)
  • trunk/Source/WebCore/html/track/TextTrackCue.cpp

    r152459 r152611  
    777777            // Make an elemenet id match a cue id for style matching purposes.
    778778            if (!m_id.isEmpty())
    779                 toElement(child)->setIdAttribute(AtomicString(m_id.characters(), m_id.length()));
     779                toElement(child)->setIdAttribute(m_id);
    780780        }
    781781    }
Note: See TracChangeset for help on using the changeset viewer.