Changeset 74829 in webkit for trunk/JavaScriptCore


Ignore:
Timestamp:
Dec 31, 2010, 4:43:34 AM (14 years ago)
Author:
Patrick Gansterer
Message:

2010-12-31 Patrick Gansterer <Patrick Gansterer>

Reviewed by Darin Adler.

Add a fast case for ASCII strings in HashAndUTF8CharactersTranslator::equal
https://bugs.webkit.org/show_bug.cgi?id=50517

This change shows about 2% performance win on the xml-parser benchmark.

  • wtf/text/AtomicString.cpp: (WTF::HashAndUTF8CharactersTranslator::equal):
Location:
trunk/JavaScriptCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/ChangeLog

    r74815 r74829  
     12010-12-31  Patrick Gansterer  <[email protected]>
     2
     3        Reviewed by Darin Adler.
     4
     5        Add a fast case for ASCII strings in HashAndUTF8CharactersTranslator::equal
     6        https://bugs.webkit.org/show_bug.cgi?id=50517
     7
     8        This change shows about 2% performance win on the xml-parser benchmark.
     9
     10        * wtf/text/AtomicString.cpp:
     11        (WTF::HashAndUTF8CharactersTranslator::equal):
     12
    1132010-12-30  Patrick Gansterer  <[email protected]>
    214
  • trunk/JavaScriptCore/wtf/text/AtomicString.cpp

    r73201 r74829  
    226226    static bool equal(StringImpl* const& string, const HashAndUTF8Characters& buffer)
    227227    {
    228         return equalUTF16WithUTF8(string->characters(), string->characters() + string->length(), buffer.characters, buffer.characters + buffer.length);
     228        if (buffer.utf16Length != string->length())
     229            return false;
     230
     231        const UChar* stringCharacters = string->characters();
     232
     233        // If buffer contains only ASCII characters UTF-8 and UTF16 length are the same.
     234        if (buffer.utf16Length != buffer.length)
     235            return equalUTF16WithUTF8(stringCharacters, stringCharacters + string->length(), buffer.characters, buffer.characters + buffer.length);
     236
     237        for (unsigned i = 0; i < buffer.length; ++i) {
     238            ASSERT(isASCII(buffer.characters[i]));
     239            if (stringCharacters[i] != buffer.characters[i])
     240                return false;
     241        }
     242
     243        return true;
    229244    }
    230245
Note: See TracChangeset for help on using the changeset viewer.