Title: [153331] trunk/Source
Revision
153331
Author
[email protected]
Date
2013-07-25 10:01:56 -0700 (Thu, 25 Jul 2013)

Log Message

Optimize the thread locks for API Shims
https://bugs.webkit.org/show_bug.cgi?id=118573

Patch by Yi Shen <[email protected]> on 2013-07-25
Reviewed by Geoffrey Garen.

Remove the thread lock from API Shims if the VM has an exclusive thread (e.g. the VM
only used by WebCore's main thread).

Source/_javascript_Core:

* API/APIShims.h:
(JSC::APIEntryShim::APIEntryShim):
(JSC::APICallbackShim::APICallbackShim):
* runtime/JSLock.cpp:
(JSC::JSLockHolder::JSLockHolder):
(JSC::JSLockHolder::init):
(JSC::JSLockHolder::~JSLockHolder):
(JSC::JSLock::DropAllLocks::DropAllLocks):
(JSC::JSLock::DropAllLocks::~DropAllLocks):
* runtime/VM.cpp:
(JSC::VM::VM):
* runtime/VM.h:

Source/WebCore:

No new tests required since no functionality changed.

* bindings/js/JSDOMWindowBase.cpp:
(WebCore::JSDOMWindowBase::commonVM):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/API/APIShims.h (153330 => 153331)


--- trunk/Source/_javascript_Core/API/APIShims.h	2013-07-25 16:40:40 UTC (rev 153330)
+++ trunk/Source/_javascript_Core/API/APIShims.h	2013-07-25 17:01:56 UTC (rev 153331)
@@ -59,14 +59,14 @@
     // Normal API entry
     APIEntryShim(ExecState* exec, bool registerThread = true)
         : APIEntryShimWithoutLock(&exec->vm(), registerThread)
-        , m_lockHolder(exec)
+        , m_lockHolder(exec->vm().exclusiveThread ? 0 : exec)
     {
     }
 
     // JSPropertyNameAccumulator only has a vm.
     APIEntryShim(VM* vm, bool registerThread = true)
         : APIEntryShimWithoutLock(vm, registerThread)
-        , m_lockHolder(vm)
+        , m_lockHolder(vm->exclusiveThread ? 0 : vm)
     {
     }
 
@@ -83,7 +83,7 @@
 class APICallbackShim {
 public:
     APICallbackShim(ExecState* exec)
-        : m_dropAllLocks(exec)
+        : m_dropAllLocks(exec->vm().exclusiveThread ? 0 : exec)
         , m_vm(&exec->vm())
     {
         wtfThreadData().resetCurrentIdentifierTable();

Modified: trunk/Source/_javascript_Core/ChangeLog (153330 => 153331)


--- trunk/Source/_javascript_Core/ChangeLog	2013-07-25 16:40:40 UTC (rev 153330)
+++ trunk/Source/_javascript_Core/ChangeLog	2013-07-25 17:01:56 UTC (rev 153331)
@@ -1,3 +1,26 @@
+2013-07-25  Yi Shen  <[email protected]>
+
+        Optimize the thread locks for API Shims
+        https://bugs.webkit.org/show_bug.cgi?id=118573
+
+        Reviewed by Geoffrey Garen.
+
+        Remove the thread lock from API Shims if the VM has an exclusive thread (e.g. the VM 
+        only used by WebCore's main thread).
+
+        * API/APIShims.h:
+        (JSC::APIEntryShim::APIEntryShim):
+        (JSC::APICallbackShim::APICallbackShim):
+        * runtime/JSLock.cpp:
+        (JSC::JSLockHolder::JSLockHolder):
+        (JSC::JSLockHolder::init):
+        (JSC::JSLockHolder::~JSLockHolder):
+        (JSC::JSLock::DropAllLocks::DropAllLocks):
+        (JSC::JSLock::DropAllLocks::~DropAllLocks):
+        * runtime/VM.cpp:
+        (JSC::VM::VM):
+        * runtime/VM.h:
+
 2013-07-25  Christophe Dumez  <[email protected]>
 
         Unreviewed build fix after r153218.

Modified: trunk/Source/_javascript_Core/runtime/JSLock.cpp (153330 => 153331)


--- trunk/Source/_javascript_Core/runtime/JSLock.cpp	2013-07-25 16:40:40 UTC (rev 153330)
+++ trunk/Source/_javascript_Core/runtime/JSLock.cpp	2013-07-25 17:01:56 UTC (rev 153331)
@@ -51,7 +51,7 @@
 }
 
 JSLockHolder::JSLockHolder(ExecState* exec)
-    : m_vm(&exec->vm())
+    : m_vm(exec ? &exec->vm() : 0)
 {
     init();
 }
@@ -70,11 +70,15 @@
 
 void JSLockHolder::init()
 {
-    m_vm->apiLock().lock();
+    if (m_vm)
+        m_vm->apiLock().lock();
 }
 
 JSLockHolder::~JSLockHolder()
 {
+    if (!m_vm)
+        return;
+
     RefPtr<JSLock> apiLock(&m_vm->apiLock());
     m_vm.clear();
     apiLock->unlock();
@@ -215,21 +219,24 @@
 
 JSLock::DropAllLocks::DropAllLocks(ExecState* exec)
     : m_lockCount(0)
-    , m_vm(&exec->vm())
+    , m_vm(exec ? &exec->vm() : 0)
 {
-    m_lockCount = m_vm->apiLock().dropAllLocks();
+    if (m_vm)
+        m_lockCount = m_vm->apiLock().dropAllLocks();
 }
 
 JSLock::DropAllLocks::DropAllLocks(VM* vm)
     : m_lockCount(0)
     , m_vm(vm)
 {
-    m_lockCount = m_vm->apiLock().dropAllLocks();
+    if (m_vm)
+        m_lockCount = m_vm->apiLock().dropAllLocks();
 }
 
 JSLock::DropAllLocks::~DropAllLocks()
 {
-    m_vm->apiLock().grabAllLocks(m_lockCount);
+    if (m_vm)
+        m_vm->apiLock().grabAllLocks(m_lockCount);
 }
 
 } // namespace JSC

Modified: trunk/Source/_javascript_Core/runtime/VM.cpp (153330 => 153331)


--- trunk/Source/_javascript_Core/runtime/VM.cpp	2013-07-25 16:40:40 UTC (rev 153330)
+++ trunk/Source/_javascript_Core/runtime/VM.cpp	2013-07-25 17:01:56 UTC (rev 153331)
@@ -175,9 +175,7 @@
 #if ENABLE(REGEXP_TRACING)
     , m_rtTraceList(new RTTraceList())
 #endif
-#ifndef NDEBUG
     , exclusiveThread(0)
-#endif
     , m_newStringsSinceLastHashCons(0)
 #if ENABLE(ASSEMBLER)
     , m_canUseAssembler(enableAssembler(executableAllocator))

Modified: trunk/Source/_javascript_Core/runtime/VM.h (153330 => 153331)


--- trunk/Source/_javascript_Core/runtime/VM.h	2013-07-25 16:40:40 UTC (rev 153330)
+++ trunk/Source/_javascript_Core/runtime/VM.h	2013-07-25 17:01:56 UTC (rev 153331)
@@ -389,9 +389,7 @@
         RTTraceList* m_rtTraceList;
 #endif
 
-#ifndef NDEBUG
         ThreadIdentifier exclusiveThread;
-#endif
 
         CachedTranscendentalFunction<std::sin> cachedSin;
 

Modified: trunk/Source/WebCore/ChangeLog (153330 => 153331)


--- trunk/Source/WebCore/ChangeLog	2013-07-25 16:40:40 UTC (rev 153330)
+++ trunk/Source/WebCore/ChangeLog	2013-07-25 17:01:56 UTC (rev 153331)
@@ -1,3 +1,18 @@
+2013-07-25  Yi Shen  <[email protected]>
+
+        Optimize the thread locks for API Shims
+        https://bugs.webkit.org/show_bug.cgi?id=118573
+
+        Reviewed by Geoffrey Garen.
+
+        Remove the thread lock from API Shims if the VM has an exclusive thread (e.g. the VM 
+        only used by WebCore's main thread).
+
+        No new tests required since no functionality changed.
+
+        * bindings/js/JSDOMWindowBase.cpp:
+        (WebCore::JSDOMWindowBase::commonVM):
+
 2013-07-25  Bear Travis  <[email protected]>
 
         [CSS Shapes] Shape methods and member variables should be guarded with the CSS_SHAPES flag

Modified: trunk/Source/WebCore/bindings/js/JSDOMWindowBase.cpp (153330 => 153331)


--- trunk/Source/WebCore/bindings/js/JSDOMWindowBase.cpp	2013-07-25 16:40:40 UTC (rev 153330)
+++ trunk/Source/WebCore/bindings/js/JSDOMWindowBase.cpp	2013-07-25 17:01:56 UTC (rev 153331)
@@ -184,9 +184,7 @@
     if (!vm) {
         ScriptController::initializeThreading();
         vm = VM::createLeaked(LargeHeap).leakRef();
-#ifndef NDEBUG
         vm->exclusiveThread = currentThread();
-#endif
         initNormalWorldClientData(vm);
     }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to