Changeset 77297 in webkit
- Timestamp:
- Feb 1, 2011, 2:03:04 PM (15 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r77287 r77297 1 2011-02-01 Patrick Gansterer <[email protected]> 2 3 Reviewed by Darin Adler. 4 5 Avoid strlen() in AtomicString::fromUTF8 6 https://bugs.webkit.org/show_bug.cgi?id=50516 7 8 Add an overload to calculateStringHashFromUTF8 to get 9 strlen() of the input data with only one call. 10 11 This change shows about 3% performance win on the xml-parser benchmark. 12 13 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: 14 * wtf/text/AtomicString.cpp: 15 (WTF::AtomicString::fromUTF8): 16 * wtf/unicode/UTF8.cpp: 17 (WTF::Unicode::calculateStringHashAndLengthFromUTF8Internal): 18 (WTF::Unicode::calculateStringHashFromUTF8): 19 (WTF::Unicode::calculateStringHashAndLengthFromUTF8): 20 * wtf/unicode/UTF8.h: 21 1 22 2011-02-01 Sam Weinig <[email protected]> 2 23 -
trunk/Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def
r77269 r77297 65 65 ?calculateDSTOffset@WTF@@YANNN@Z 66 66 ?calculateStringHashFromUTF8@Unicode@WTF@@YAIPBD0AAI@Z 67 ?calculateStringHashAndLengthFromUTF8@Unicode@WTF@@YAIPBDAAI1@Z 67 68 ?calculateUTCOffset@WTF@@YAHXZ 68 69 ?calculatedFunctionName@DebuggerCallFrame@JSC@@QBE?AVUString@2@XZ -
trunk/Source/JavaScriptCore/wtf/text/AtomicString.cpp
r75343 r77297 377 377 if (!characters) 378 378 return AtomicString(); 379 return fromUTF8(characters, strlen(characters)); 379 380 HashAndUTF8Characters buffer; 381 buffer.characters = characters; 382 buffer.hash = calculateStringHashAndLengthFromUTF8(characters, buffer.length, buffer.utf16Length); 383 384 if (!buffer.hash) 385 return AtomicString(); 386 387 AtomicString atomicString; 388 atomicString.m_string = addToStringTable<HashAndUTF8Characters, HashAndUTF8CharactersTranslator>(buffer); 389 return atomicString; 380 390 } 381 391 -
trunk/Source/JavaScriptCore/wtf/unicode/UTF8.cpp
r77062 r77297 315 315 } 316 316 317 unsigned calculateStringHashFromUTF8(const char* data, const char* dataEnd, unsigned& utf16Length)317 static inline unsigned calculateStringHashAndLengthFromUTF8Internal(const char* data, const char* dataEnd, unsigned& dataLength, unsigned& utf16Length) 318 318 { 319 319 if (!data) … … 321 321 322 322 WTF::StringHasher stringHasher; 323 dataLength = 0; 323 324 utf16Length = 0; 324 325 325 while (data < dataEnd ) {326 while (data < dataEnd || (!dataEnd && *data)) { 326 327 if (isASCII(*data)) { 327 328 stringHasher.addCharacter(*data++); 329 dataLength++; 328 330 utf16Length++; 329 331 continue; … … 331 333 332 334 int utf8SequenceLength = inlineUTF8SequenceLengthNonASCII(*data); 333 334 if (dataEnd - data < utf8SequenceLength) 335 return false; 335 dataLength += utf8SequenceLength; 336 337 if (!dataEnd) { 338 for (int i = 1; i < utf8SequenceLength; ++i) { 339 if (!data[i]) 340 return 0; 341 } 342 } else if (dataEnd - data < utf8SequenceLength) 343 return 0; 336 344 337 345 if (!isLegalUTF8(reinterpret_cast<const unsigned char*>(data), utf8SequenceLength)) … … 356 364 357 365 return stringHasher.hash(); 366 } 367 368 unsigned calculateStringHashFromUTF8(const char* data, const char* dataEnd, unsigned& utf16Length) 369 { 370 unsigned dataLength; 371 return calculateStringHashAndLengthFromUTF8Internal(data, dataEnd, dataLength, utf16Length); 372 } 373 374 unsigned calculateStringHashAndLengthFromUTF8(const char* data, unsigned& dataLength, unsigned& utf16Length) 375 { 376 return calculateStringHashAndLengthFromUTF8Internal(data, 0, dataLength, utf16Length); 358 377 } 359 378 -
trunk/Source/JavaScriptCore/wtf/unicode/UTF8.h
r73201 r77297 72 72 73 73 unsigned calculateStringHashFromUTF8(const char* data, const char* dataEnd, unsigned& utf16Length); 74 unsigned calculateStringHashAndLengthFromUTF8(const char* data, unsigned& dataLength, unsigned& utf16Length); 74 75 75 76 bool equalUTF16WithUTF8(const UChar* a, const UChar* aEnd, const char* b, const char* bEnd);
Note:
See TracChangeset
for help on using the changeset viewer.