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);
}