Changeset 94640 in webkit for trunk/Source/JavaScriptCore


Ignore:
Timestamp:
Sep 6, 2011, 10:43:09 PM (14 years ago)
Author:
[email protected]
Message:

Replace usages of Vector<UChar> with existing StringBuilder
https://bugs.webkit.org/show_bug.cgi?id=67079

Patch by Xianzhu Wang <[email protected]> on 2011-09-06
Reviewed by Gavin Barraclough.

Source/JavaScriptCore:

This is part of work to support 8-bit string buffers.
Adds StringBuilder::characters() because the original Vector<UChar>::data()
is widely used.
Sets the minimum size of buffer to 16 to prevent possible performance
regression. Further performance investigation should be done in
https://bugs.webkit.org/show_bug.cgi?id=67084.

  • wtf/Forward.h:
  • wtf/text/StringBuilder.cpp:

(WTF::StringBuilder::appendUninitialized): Sets minimum buffer size to 16 bytes.

  • wtf/text/StringBuilder.h:

(WTF::StringBuilder::operator[]):
(WTF::StringBuilder::characters): Added.

Source/WebCore:

No new tests. All existing unit tests and layout tests should run
as before.

  • css/CSSOMUtils.cpp:

(WebCore::appendCharacter):
(WebCore::serializeCharacter):
(WebCore::serializeCharacterAsCodePoint):
(WebCore::serializeIdentifier):
(WebCore::serializeString):

  • css/CSSOMUtils.h:
  • css/CSSPrimitiveValue.cpp:

(WebCore::CSSPrimitiveValue::cssText):

  • css/CSSStyleSelector.cpp:

(WebCore::CSSStyleSelector::SelectorChecker::determineLinkStateSlowCase):

  • css/CSSWrapShapes.cpp:

(WebCore::CSSWrapShapeRect::cssText):
(WebCore::CSSWrapShapeCircle::cssText):
(WebCore::CSSWrapShapeEllipse::cssText):
(WebCore::CSSWrapShapePolygon::cssText):

  • editing/HTMLInterchange.cpp:

(WebCore::convertHTMLTextToInterchangeFormat):

  • editing/MarkupAccumulator.cpp:

(WebCore::appendCharactersReplacingEntities):
(WebCore::MarkupAccumulator::serializeNodes):
(WebCore::MarkupAccumulator::appendStartTag):
(WebCore::MarkupAccumulator::appendEndTag):
(WebCore::MarkupAccumulator::concatenateMarkup):
(WebCore::MarkupAccumulator::appendAttributeValue):
(WebCore::MarkupAccumulator::appendCustomAttributes):
(WebCore::MarkupAccumulator::appendQuotedURLAttributeValue):
(WebCore::MarkupAccumulator::appendNodeValue):
(WebCore::MarkupAccumulator::appendNamespace):
(WebCore::MarkupAccumulator::appendText):
(WebCore::MarkupAccumulator::appendComment):
(WebCore::MarkupAccumulator::appendDocumentType):
(WebCore::MarkupAccumulator::appendProcessingInstruction):
(WebCore::MarkupAccumulator::appendElement):
(WebCore::MarkupAccumulator::appendOpenTag):
(WebCore::MarkupAccumulator::appendCloseTag):
(WebCore::MarkupAccumulator::appendAttribute):
(WebCore::MarkupAccumulator::appendCDATASection):
(WebCore::MarkupAccumulator::appendStartMarkup):
(WebCore::MarkupAccumulator::appendEndMarkup):

  • editing/MarkupAccumulator.h:
  • editing/markup.cpp:

(WebCore::StyledMarkupAccumulator::appendElement):
(WebCore::StyledMarkupAccumulator::wrapWithNode):
(WebCore::StyledMarkupAccumulator::wrapWithStyleNode):
(WebCore::StyledMarkupAccumulator::appendStyleNodeOpenTag):
(WebCore::StyledMarkupAccumulator::takeResults):
(WebCore::StyledMarkupAccumulator::appendText):
(WebCore::urlToMarkup):

  • html/DOMTokenList.cpp:

(WebCore::DOMTokenList::removeToken):

  • html/HTMLFontElement.cpp:

(WebCore::parseFontSize):

  • html/HTMLTextFormControlElement.cpp:

(WebCore::HTMLTextFormControlElement::strippedPlaceholder):

  • html/parser/CSSPreloadScanner.cpp:

(WebCore::CSSPreloadScanner::emitRule):

  • html/parser/CSSPreloadScanner.h:
  • html/parser/HTMLEntityParser.cpp:

(WebCore::consumeHTMLEntity):

  • html/parser/HTMLEntityParser.h:
  • html/parser/HTMLParserIdioms.cpp:

(WebCore::parseHTMLInteger):
(WebCore::parseHTMLNonNegativeInteger):

  • html/parser/HTMLTokenizer.cpp:

(WebCore::HTMLTokenizer::processEntity):
(WebCore::HTMLTokenizer::nextToken):

  • html/parser/HTMLTreeBuilder.cpp:

(WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::giveRemainingTo):
(WebCore::HTMLTreeBuilder::defaultForInTableText):

  • html/parser/HTMLTreeBuilder.h:
  • inspector/InspectorValues.cpp:

(WebCore::InspectorValue::toJSONString):
(WebCore::InspectorValue::writeJSON):
(WebCore::InspectorBasicValue::writeJSON):
(WebCore::InspectorString::writeJSON):
(WebCore::InspectorObject::writeJSON):
(WebCore::InspectorArray::writeJSON):

  • inspector/InspectorValues.h:
  • loader/CrossOriginAccessControl.cpp:

(WebCore::createAccessControlPreflightRequest):

  • loader/appcache/ApplicationCacheStorage.cpp:

(WebCore::ApplicationCacheStorage::store):

  • page/Chrome.cpp:

(WebCore::Chrome::setToolTip):

  • page/PageSerializer.cpp:

(WebCore::SerializerMarkupAccumulator::appendText):
(WebCore::SerializerMarkupAccumulator::appendElement):
(WebCore::SerializerMarkupAccumulator::appendCustomAttributes):

  • page/SecurityOrigin.cpp:

(WebCore::SecurityOrigin::toString):

  • platform/KURL.cpp:

(WebCore::KURL::deprecatedString):
(WebCore::decodeURLEscapeSequences):

  • platform/LinkHash.cpp:

(WebCore::squeezeOutNullCharacters):
(WebCore::cleanSlashDotDotSlashes):
(WebCore::mergeDoubleSlashes):
(WebCore::cleanSlashDotSlashes):
(WebCore::cleanPath):
(WebCore::visitedURLInline):
(WebCore::visitedURL):
(WebCore::visitedLinkHash):

  • platform/LinkHash.h:
  • platform/gtk/DataObjectGtk.cpp:

(WebCore::DataObjectGtk::setURL):

  • platform/network/HTTPParsers.cpp:

(WebCore::extractMIMETypeFromMediaType):

  • platform/text/TextCodecICU.cpp:

(WebCore::TextCodecICU::decode):

  • platform/text/TextStream.cpp:

(WebCore::TextStream::operator<<):
(WebCore::TextStream::release):

  • platform/text/TextStream.h:
  • plugins/PluginStream.cpp:

(WebCore::PluginStream::startStream):

  • rendering/InlineTextBox.cpp:

(WebCore::adjustCharactersAndLengthForHyphen):

  • rendering/InlineTextBox.h:

(WebCore::BufferForAppendingHyphen::BufferForAppendingHyphen):

  • rendering/RenderListItem.cpp:

(WebCore::RenderListItem::markerTextWithSuffix):

  • rendering/RenderListMarker.cpp:

(WebCore::toSymbolic):
(WebCore::RenderListMarker::paint):
(WebCore::RenderListMarker::suffix):

  • rendering/RenderTreeAsText.cpp:

(WebCore::quoteAndEscapeNonPrintables):

  • rendering/mathml/RenderMathMLFenced.cpp:

(WebCore::RenderMathMLFenced::updateFromElement):

  • storage/IDBLevelDBCoding.cpp:

(WebCore::IDBLevelDBCoding::decodeString):

  • xml/XMLHttpRequest.cpp:

(WebCore::XMLHttpRequest::getAllResponseHeaders):

  • xml/XPathFunctions.cpp:

(WebCore::XPath::FunId::evaluate):
(WebCore::XPath::FunConcat::evaluate):

  • xml/XPathUtil.cpp:

(WebCore::XPath::stringValue):

  • xml/XSLTProcessorLibxslt.cpp:

(WebCore::writeToStringBuilder):
(WebCore::saveResultToString):

  • xml/parser/CharacterReferenceParserInlineMethods.h:

(WebCore::unconsumeCharacters):
(WebCore::consumeCharacterReference):

  • xml/parser/XMLCharacterReferenceParser.cpp:

(WebCore::consumeXMLCharacterReference):

  • xml/parser/XMLCharacterReferenceParser.h:
  • xml/parser/XMLTokenizer.cpp:

(WebCore::XMLTokenizer::nextToken):

Location:
trunk/Source/JavaScriptCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r94632 r94640  
     12011-09-06  Xianzhu Wang  <[email protected]>
     2
     3        Replace usages of Vector<UChar> with existing StringBuilder
     4        https://bugs.webkit.org/show_bug.cgi?id=67079
     5
     6        Reviewed by Gavin Barraclough.
     7
     8        This is part of work to support 8-bit string buffers.
     9        Adds StringBuilder::characters() because the original Vector<UChar>::data()
     10        is widely used.
     11        Sets the minimum size of buffer to 16 to prevent possible performance
     12        regression. Further performance investigation should be done in
     13        https://bugs.webkit.org/show_bug.cgi?id=67084.
     14
     15        * wtf/Forward.h:
     16        * wtf/text/StringBuilder.cpp:
     17        (WTF::StringBuilder::appendUninitialized): Sets minimum buffer size to 16 bytes.
     18        * wtf/text/StringBuilder.h:
     19        (WTF::StringBuilder::operator[]):
     20        (WTF::StringBuilder::characters): Added.
     21
    1222011-09-06  Mark Hahnenberg  <[email protected]>
    223
  • trunk/Source/JavaScriptCore/runtime/NumberPrototype.cpp

    r94627 r94640  
    3636
    3737using namespace WTF::double_conversion;
     38
     39// To avoid conflict with WTF::StringBuilder.
     40typedef WTF::double_conversion::StringBuilder DoubleConversionStringBuilder;
    3841
    3942namespace JSC {
     
    349352    // Round if the argument is not undefined, always format as exponential.
    350353    char buffer[WTF::NumberToStringBufferLength];
    351     StringBuilder builder(buffer, WTF::NumberToStringBufferLength);
     354    DoubleConversionStringBuilder builder(buffer, WTF::NumberToStringBufferLength);
    352355    const DoubleToStringConverter& converter = DoubleToStringConverter::EcmaScriptConverter();
    353356    builder.Reset();
     
    388391
    389392    char buffer[WTF::NumberToStringBufferLength];
    390     StringBuilder builder(buffer, WTF::NumberToStringBufferLength);
     393    DoubleConversionStringBuilder builder(buffer, WTF::NumberToStringBufferLength);
    391394    const DoubleToStringConverter& converter = DoubleToStringConverter::EcmaScriptConverter();
    392395    builder.Reset();
     
    426429
    427430    char buffer[WTF::NumberToStringBufferLength];
    428     StringBuilder builder(buffer, WTF::NumberToStringBufferLength);
     431    DoubleConversionStringBuilder builder(buffer, WTF::NumberToStringBufferLength);
    429432    const DoubleToStringConverter& converter = DoubleToStringConverter::EcmaScriptConverter();
    430433    builder.Reset();
  • trunk/Source/JavaScriptCore/wtf/Forward.h

    r74936 r94640  
    4141    class String;
    4242    class StringBuffer;
     43    class StringBuilder;
    4344    class StringImpl;
    4445}
     
    6061using WTF::String;
    6162using WTF::StringBuffer;
     63using WTF::StringBuilder;
    6264using WTF::StringImpl;
    6365
  • trunk/Source/JavaScriptCore/wtf/text/StringBuilder.cpp

    r69683 r94640  
    3030
    3131namespace WTF {
     32
     33static const unsigned minimumCapacity = 16;
    3234
    3335void StringBuilder::reifyString()
     
    127129
    128130        // We need to realloc the buffer.
    129         allocateBuffer(m_buffer->characters(), std::max(requiredLength, m_buffer->length() * 2));
     131        allocateBuffer(m_buffer->characters(), std::max(requiredLength, std::max(minimumCapacity, m_buffer->length() * 2)));
    130132    } else {
    131133        ASSERT(m_string.length() == m_length);
    132         allocateBuffer(m_string.characters(), std::max(requiredLength, requiredLength * 2));
     134        allocateBuffer(m_string.characters(), std::max(requiredLength, std::max(minimumCapacity, m_length * 2)));
    133135    }
    134136
  • trunk/Source/JavaScriptCore/wtf/text/StringBuilder.h

    r94336 r94640  
    109109    {
    110110        ASSERT(i < m_length);
     111        return characters()[i];
     112    }
     113
     114    const UChar* characters() const
     115    {
     116        if (!m_length)
     117            return 0;
    111118        if (!m_string.isNull())
    112             return m_string[i];
     119            return m_string.characters();
    113120        ASSERT(m_buffer);
    114         return (*m_buffer)[i];
     121        return m_buffer->characters();
    115122    }
    116123
Note: See TracChangeset for help on using the changeset viewer.