Ignore:
Timestamp:
Aug 2, 2017, 11:03:18 PM (8 years ago)
Author:
Yusuke Suzuki
Message:

Merge WTFThreadData to Thread::current
https://bugs.webkit.org/show_bug.cgi?id=174716

Reviewed by Mark Lam.

Source/JavaScriptCore:

Use Thread::current() instead.

  • API/JSContext.mm:

(+[JSContext currentContext]):
(+[JSContext currentThis]):
(+[JSContext currentCallee]):
(+[JSContext currentArguments]):
(-[JSContext beginCallbackWithData:calleeValue:thisValue:argumentCount:arguments:]):
(-[JSContext endCallbackWithData:]):

  • heap/Heap.cpp:

(JSC::Heap::requestCollection):

  • runtime/Completion.cpp:

(JSC::checkSyntax):
(JSC::checkModuleSyntax):
(JSC::evaluate):
(JSC::loadAndEvaluateModule):
(JSC::loadModule):
(JSC::linkAndEvaluateModule):
(JSC::importModule):

  • runtime/Identifier.cpp:

(JSC::Identifier::checkCurrentAtomicStringTable):

  • runtime/InitializeThreading.cpp:

(JSC::initializeThreading):

  • runtime/JSLock.cpp:

(JSC::JSLock::didAcquireLock):
(JSC::JSLock::willReleaseLock):
(JSC::JSLock::dropAllLocks):
(JSC::JSLock::grabAllLocks):

  • runtime/JSLock.h:
  • runtime/VM.cpp:

(JSC::VM::VM):
(JSC::VM::updateStackLimits):
(JSC::VM::committedStackByteCount):

  • runtime/VM.h:

(JSC::VM::isSafeToRecurse const):

  • runtime/VMEntryScope.cpp:

(JSC::VMEntryScope::VMEntryScope):

  • runtime/VMInlines.h:

(JSC::VM::ensureStackCapacityFor):

  • yarr/YarrPattern.cpp:

(JSC::Yarr::YarrPatternConstructor::isSafeToRecurse const):

Source/WebCore:

Use Thread::current() instead.

  • fileapi/AsyncFileStream.cpp:
  • platform/ThreadGlobalData.cpp:

(WebCore::ThreadGlobalData::ThreadGlobalData):

  • platform/graphics/cocoa/WebCoreDecompressionSession.h:
  • platform/ios/wak/WebCoreThread.mm:

(StartWebThread):

  • workers/WorkerThread.cpp:

(WebCore::WorkerThread::workerThread):

Source/WTF:

We placed thread specific data in WTFThreadData previously. But now, we have a new good place
to put thread specific data: WTF::Thread. Before this patch, WTFThreadData and WTF::Thread
sometimes have the completely same fields (m_stack etc.) due to initialization order limitations.
This patch merges WTFThreadData to WTF::Thread. We apply WTFThreadData's initialization style
to WTF::Thread. So, WTF::Thread's holder now uses fast TLS for darwin environment. Thus,
Thread::current() access is now accelerated. And WTF::Thread::current() can be accessed even
before calling WTF::initializeThreading.

  • WTF.xcodeproj/project.pbxproj:
  • wtf/CMakeLists.txt:
  • wtf/LockAlgorithm.h:
  • wtf/LockAlgorithmInlines.h:
  • wtf/MainThread.h:
  • wtf/ParkingLot.cpp:
  • wtf/StackStats.cpp:

(WTF::StackStats::PerThreadStats::PerThreadStats):
(WTF::StackStats::CheckPoint::CheckPoint):
(WTF::StackStats::CheckPoint::~CheckPoint):
(WTF::StackStats::probe):
(WTF::StackStats::LayoutCheckPoint::LayoutCheckPoint):

  • wtf/ThreadHolder.cpp:

(WTF::ThreadHolder::initializeCurrent):

  • wtf/ThreadHolder.h:

(WTF::ThreadHolder::ThreadHolder):
(WTF::ThreadHolder::currentMayBeNull):
(WTF::ThreadHolder::current):

  • wtf/ThreadHolderPthreads.cpp:

(WTF::ThreadHolder::initializeKey):
(WTF::ThreadHolder::initialize):
(WTF::ThreadHolder::destruct):
(WTF::ThreadHolder::initializeOnce): Deleted.
(WTF::ThreadHolder::current): Deleted.

  • wtf/ThreadHolderWin.cpp:

(WTF::ThreadHolder::initializeKey):
(WTF::ThreadHolder::currentDying):
(WTF::ThreadHolder::initialize):
(WTF::ThreadHolder::initializeOnce): Deleted.
(WTF::ThreadHolder::current): Deleted.

  • wtf/Threading.cpp:

(WTF::Thread::initializeInThread):
(WTF::Thread::entryPoint):
(WTF::Thread::create):
(WTF::Thread::didExit):
(WTF::initializeThreading):
(WTF::Thread::currentMayBeNull): Deleted.

  • wtf/Threading.h:

(WTF::Thread::current):
(WTF::Thread::atomicStringTable):
(WTF::Thread::setCurrentAtomicStringTable):
(WTF::Thread::stackStats):
(WTF::Thread::savedStackPointerAtVMEntry):
(WTF::Thread::setSavedStackPointerAtVMEntry):
(WTF::Thread::savedLastStackTop):
(WTF::Thread::setSavedLastStackTop):

  • wtf/ThreadingPrimitives.h:
  • wtf/ThreadingPthreads.cpp:

(WTF::Thread::createCurrentThread):
(WTF::Thread::current): Deleted.

  • wtf/ThreadingWin.cpp:

(WTF::Thread::createCurrentThread):
(WTF::Thread::current): Deleted.

  • wtf/WTFThreadData.cpp: Removed.
  • wtf/WTFThreadData.h: Removed.
  • wtf/text/AtomicString.cpp:
  • wtf/text/AtomicStringImpl.cpp:

(WTF::stringTable):

  • wtf/text/AtomicStringTable.cpp:

(WTF::AtomicStringTable::create):

  • wtf/text/AtomicStringTable.h:
File:
1 edited

Legend:

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

    r220069 r220186  
    142142+ (JSContext *)currentContext
    143143{
    144     WTFThreadData& threadData = wtfThreadData();
    145     CallbackData *entry = (CallbackData *)threadData.m_apiData;
     144    Thread& thread = Thread::current();
     145    CallbackData *entry = (CallbackData *)thread.m_apiData;
    146146    return entry ? entry->context : nil;
    147147}
     
    149149+ (JSValue *)currentThis
    150150{
    151     WTFThreadData& threadData = wtfThreadData();
    152     CallbackData *entry = (CallbackData *)threadData.m_apiData;
     151    Thread& thread = Thread::current();
     152    CallbackData *entry = (CallbackData *)thread.m_apiData;
    153153    if (!entry)
    154154        return nil;
     
    158158+ (JSValue *)currentCallee
    159159{
    160     WTFThreadData& threadData = wtfThreadData();
    161     CallbackData *entry = (CallbackData *)threadData.m_apiData;
     160    Thread& thread = Thread::current();
     161    CallbackData *entry = (CallbackData *)thread.m_apiData;
    162162    if (!entry)
    163163        return nil;
     
    167167+ (NSArray *)currentArguments
    168168{
    169     WTFThreadData& threadData = wtfThreadData();
    170     CallbackData *entry = (CallbackData *)threadData.m_apiData;
     169    Thread& thread = Thread::current();
     170    CallbackData *entry = (CallbackData *)thread.m_apiData;
    171171
    172172    if (!entry)
     
    295295- (void)beginCallbackWithData:(CallbackData *)callbackData calleeValue:(JSValueRef)calleeValue thisValue:(JSValueRef)thisValue argumentCount:(size_t)argumentCount arguments:(const JSValueRef *)arguments
    296296{
    297     WTFThreadData& threadData = wtfThreadData();
     297    Thread& thread = Thread::current();
    298298    [self retain];
    299     CallbackData *prevStack = (CallbackData *)threadData.m_apiData;
     299    CallbackData *prevStack = (CallbackData *)thread.m_apiData;
    300300    *callbackData = (CallbackData){ prevStack, self, [self.exception retain], calleeValue, thisValue, argumentCount, arguments, nil };
    301     threadData.m_apiData = callbackData;
     301    thread.m_apiData = callbackData;
    302302    self.exception = nil;
    303303}
     
    305305- (void)endCallbackWithData:(CallbackData *)callbackData
    306306{
    307     WTFThreadData& threadData = wtfThreadData();
     307    Thread& thread = Thread::current();
    308308    self.exception = callbackData->preservedException;
    309309    [callbackData->preservedException release];
    310310    [callbackData->currentArguments release];
    311     threadData.m_apiData = callbackData->next;
     311    thread.m_apiData = callbackData->next;
    312312    [self release];
    313313}
Note: See TracChangeset for help on using the changeset viewer.