Ignore:
Timestamp:
Mar 13, 2015, 1:04:29 PM (10 years ago)
Author:
[email protected]
Message:

Replace TCSpinLock with a new WTF::SpinLock based on WTF::Atomic.
<https://webkit.org/b/142674>

Reviewed by Filip Pizlo.

Source/JavaScriptCore:

  • API/JSValue.mm:

(handerForStructTag):

  • API/JSWrapperMap.mm:
  • dfg/DFGCommon.cpp:

(JSC::DFG::startCrashing):
(JSC::DFG::isCrashing):

  • Changed to use a StaticSpinLock since that's what this code was trying to do anyway.
  • heap/CopiedBlock.h:

(JSC::CopiedBlock::CopiedBlock):

  • heap/CopiedSpace.cpp:

(JSC::CopiedSpace::CopiedSpace):

  • heap/CopiedSpace.h:
  • heap/GCThreadSharedData.cpp:

(JSC::GCThreadSharedData::GCThreadSharedData):

  • heap/GCThreadSharedData.h:
  • heap/ListableHandler.h:

(JSC::ListableHandler::List::List):

  • parser/SourceProvider.cpp:
  • profiler/ProfilerDatabase.cpp:

(JSC::Profiler::Database::addDatabaseToAtExit):
(JSC::Profiler::Database::removeDatabaseFromAtExit):
(JSC::Profiler::Database::removeFirstAtExitDatabase):

Source/WebCore:

No new tests because there is no new functionality. This is a refactoring effort.

  • bindings/objc/WebScriptObject.mm:
  • platform/ios/wak/WAKWindow.mm:

(-[WAKWindow initWithLayer:]):
(-[WAKWindow initWithFrame:]):

Source/WebKit2:

  • WebProcess/WebPage/EventDispatcher.cpp:

(WebKit::EventDispatcher::EventDispatcher):

  • WebProcess/WebPage/EventDispatcher.h:
  • WebProcess/WebPage/ViewUpdateDispatcher.cpp:

(WebKit::ViewUpdateDispatcher::ViewUpdateDispatcher):

  • WebProcess/WebPage/ViewUpdateDispatcher.h:

Source/WTF:

We no longer use TCMalloc in our code, and we now have C++11. This replaces the
TCMalloc_SpinLock with a new WTF::SpinLock based on WTF::Atomic (which is a
wrapper around std::atomic).

Note that there is a StaticSpinLock and a SpinLock:

  1. StaticSpinLock is an alias for SpinLockBase, and its initialization relies on static / global std:atomic being automatically initialized to 0 at compile time. Hence, StaticSpinLock should only be used for statics / globals (including static members of classes / structs).
  1. SpinLock is derived from SpinLockBase, and adds a default constructor to initialize its internal atomic value to 0. Because SpinLock has a constructor, it cannot be used for statics / globals. Objects that want to embed a spin lock as an instance field should use SpinLock so that it is initialized properly. std::atomic will not automatically initialize instance fields to 0. Hence, StaticSpinLock will not work correctly as instance fields of a class / struct.
  • WTF.vcxproj/WTF.vcxproj:
  • WTF.vcxproj/WTF.vcxproj.filters:
  • WTF.xcodeproj/project.pbxproj:
  • wtf/CMakeLists.txt:
  • wtf/MetaAllocator.cpp:

(WTF::MetaAllocator::~MetaAllocator):
(WTF::MetaAllocator::MetaAllocator):

  • wtf/MetaAllocator.h:
  • wtf/SpinLock.h: Added.

(WTF::SpinLockBase::lock):
(WTF::SpinLockBase::unlock):
(WTF::SpinLockBase::isLocked):
(WTF::SpinLockBase::slowLock):
(WTF::SpinLock::SpinLock):

  • wtf/TCSpinLock.h: Removed.
  • wtf/text/AtomicString.cpp:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/API/JSValue.mm

    r173141 r181485  
    4242#import <wtf/HashSet.h>
    4343#import <wtf/ObjcRuntimeExtras.h>
     44#import <wtf/SpinLock.h>
    4445#import <wtf/Vector.h>
    45 #import <wtf/TCSpinLock.h>
    4646#import <wtf/text/WTFString.h>
    4747#import <wtf/text/StringHash.h>
     
    11031103static StructTagHandler* handerForStructTag(const char* encodedType)
    11041104{
    1105     static SpinLock handerForStructTagLock = SPINLOCK_INITIALIZER;
     1105    static StaticSpinLock handerForStructTagLock;
    11061106    SpinLockHolder lockHolder(&handerForStructTagLock);
    11071107
Note: See TracChangeset for help on using the changeset viewer.