Try ripping out inferred types because it might be a performance improvement
[WebKit-https.git] / Source / JavaScriptCore / inspector / JSGlobalObjectScriptDebugServer.cpp
index 254a2c7..667438b 100644 (file)
 #include "config.h"
 #include "JSGlobalObjectScriptDebugServer.h"
 
-#if ENABLE(INSPECTOR)
-#if ENABLE(JAVASCRIPT_DEBUGGER)
-
 #include "EventLoop.h"
+#include "JSCInlines.h"
+#include "JSLock.h"
 
 using namespace JSC;
 
 namespace Inspector {
 
 JSGlobalObjectScriptDebugServer::JSGlobalObjectScriptDebugServer(JSGlobalObject& globalObject)
-    : ScriptDebugServer(false)
+    : ScriptDebugServer(globalObject.vm())
     , m_globalObject(globalObject)
 {
 }
 
-void JSGlobalObjectScriptDebugServer::addListener(ScriptDebugListener* listener)
-{
-    if (!listener)
-        return;
-
-    bool wasEmpty = m_listeners.isEmpty();
-    m_listeners.add(listener);
-
-    // First listener. Attach the debugger to the JSGlobalObject.
-    if (wasEmpty) {
-        attach(&m_globalObject);
-        recompileAllJSFunctions();
-    }
-}
-
-void JSGlobalObjectScriptDebugServer::removeListener(ScriptDebugListener* listener, bool isBeingDestroyed)
+void JSGlobalObjectScriptDebugServer::attachDebugger()
 {
-    if (!listener)
-        return;
-
-    m_listeners.remove(listener);
-
-    // Last listener. Detach the debugger from the JSGlobalObject.
-    if (m_listeners.isEmpty()) {
-        detach(&m_globalObject, isBeingDestroyed ? Debugger::GlobalObjectIsDestructing : Debugger::TerminatingDebuggingSession);
-        if (!isBeingDestroyed)
-            recompileAllJSFunctions();
-    }
+    attach(&m_globalObject);
 }
 
-void JSGlobalObjectScriptDebugServer::recompileAllJSFunctions()
+void JSGlobalObjectScriptDebugServer::detachDebugger(bool isBeingDestroyed)
 {
-    JSC::Debugger::recompileAllJSFunctions(&m_globalObject.vm());
+    detach(&m_globalObject, isBeingDestroyed ? Debugger::GlobalObjectIsDestructing : Debugger::TerminatingDebuggingSession);
+    if (!isBeingDestroyed)
+        recompileAllJSFunctions();
 }
 
 void JSGlobalObjectScriptDebugServer::runEventLoopWhilePaused()
 {
+    // Drop all locks so another thread can work in the VM while we are nested.
+    JSC::JSLock::DropAllLocks dropAllLocks(&m_globalObject.vm());
+
     EventLoop loop;
     while (!m_doneProcessingDebuggerEvents && !loop.ended())
         loop.cycle();
 }
 
 } // namespace Inspector
-
-#endif // ENABLE(JAVASCRIPT_DEBUGGER)
-#endif // ENABLE(INSPECTOR)