Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(100)

Side by Side Diff: Source/core/html/parser/HTMLParserIdioms.cpp

Issue 178803006: Turn MQ classes into thread safe (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebased after MediaFeature generation landed Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2010 Apple Inc. All rights reserved. 2 * Copyright (C) 2010 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 bool threadSafeMatch(const QualifiedName& a, const QualifiedName& b) 367 bool threadSafeMatch(const QualifiedName& a, const QualifiedName& b)
368 { 368 {
369 return threadSafeEqual(a.localName().impl(), b.localName().impl()); 369 return threadSafeEqual(a.localName().impl(), b.localName().impl());
370 } 370 }
371 371
372 bool threadSafeMatch(const String& localName, const QualifiedName& qName) 372 bool threadSafeMatch(const String& localName, const QualifiedName& qName)
373 { 373 {
374 return threadSafeEqual(localName.impl(), qName.localName().impl()); 374 return threadSafeEqual(localName.impl(), qName.localName().impl());
375 } 375 }
376 376
377 StringImpl* findStringIfStatic(const UChar* characters, unsigned length) 377 template<typename CharType>
378 inline StringImpl* findStringIfStatic(const CharType* characters, unsigned lengt h)
378 { 379 {
379 // We don't need to try hashing if we know the string is too long. 380 // We don't need to try hashing if we know the string is too long.
380 if (length > StringImpl::highestStaticStringLength()) 381 if (length > StringImpl::highestStaticStringLength())
381 return 0; 382 return 0;
382 // computeHashAndMaskTop8Bits is the function StringImpl::hash() uses. 383 // computeHashAndMaskTop8Bits is the function StringImpl::hash() uses.
383 unsigned hash = StringHasher::computeHashAndMaskTop8Bits(characters, length) ; 384 unsigned hash = StringHasher::computeHashAndMaskTop8Bits(characters, length) ;
384 const WTF::StaticStringsTable& table = StringImpl::allStaticStrings(); 385 const WTF::StaticStringsTable& table = StringImpl::allStaticStrings();
385 ASSERT(!table.isEmpty()); 386 ASSERT(!table.isEmpty());
386 387
387 WTF::StaticStringsTable::const_iterator it = table.find(hash); 388 WTF::StaticStringsTable::const_iterator it = table.find(hash);
388 if (it == table.end()) 389 if (it == table.end())
389 return 0; 390 return 0;
390 // It's possible to have hash collisions between arbitrary strings and 391 // It's possible to have hash collisions between arbitrary strings and
391 // known identifiers (e.g. "bvvfg" collides with "script"). 392 // known identifiers (e.g. "bvvfg" collides with "script").
392 // However ASSERTs in StringImpl::createStatic guard against there ever bein g collisions 393 // However ASSERTs in StringImpl::createStatic guard against there ever bein g collisions
393 // between static strings. 394 // between static strings.
394 if (!equal(it->value, characters, length)) 395 if (!equal(it->value, characters, length))
395 return 0; 396 return 0;
396 return it->value; 397 return it->value;
397 } 398 }
398 399
400 String attemptStaticStringCreation(const LChar* characters, size_t size)
401 {
402 String string(findStringIfStatic(characters, size));
403 if (string.impl())
404 return string;
405 return String(characters, size);
399 } 406 }
407
408 String attemptStaticStringCreation(const UChar* characters, size_t size, Charact erWidth width)
409 {
410 String string(findStringIfStatic(characters, size));
411 if (string.impl())
412 return string;
413 if (width == Likely8Bit)
414 string = StringImpl::create8BitIfPossible(characters, size);
415 else if (width == Force8Bit)
416 string = String::make8BitFrom16BitSource(characters, size);
417 else
418 string = String(characters, size);
419
420 return string;
421 }
422
423 }
OLDNEW
« Source/core/css/MediaQueryExp.cpp ('K') | « Source/core/html/parser/HTMLParserIdioms.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698