Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1200)

Unified Diff: Source/core/inspector/WorkerDebuggerAgent.cpp

Issue 306053010: Tried using CrossThreadPersistent for workerDebuggerAgents (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/inspector/WorkerDebuggerAgent.h ('k') | Source/core/inspector/WorkerInspectorController.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/inspector/WorkerDebuggerAgent.cpp
diff --git a/Source/core/inspector/WorkerDebuggerAgent.cpp b/Source/core/inspector/WorkerDebuggerAgent.cpp
index 52d2b4d4f5c01e4badba956ba1125f152e94843d..f7ea601bb728527319d3b81070c10129d3822691 100644
--- a/Source/core/inspector/WorkerDebuggerAgent.cpp
+++ b/Source/core/inspector/WorkerDebuggerAgent.cpp
@@ -46,14 +46,40 @@ Mutex& workerDebuggerAgentsMutex()
return mutex;
}
-typedef HashMap<WorkerThread*, WorkerDebuggerAgent*> WorkerDebuggerAgents;
+typedef CrossThreadPersistent<HeapHashMap<WorkerThread*, Member<WorkerDebuggerAgent> > > WorkerDebuggerAgents;
WorkerDebuggerAgents& workerDebuggerAgents()
{
- DEFINE_STATIC_LOCAL(WorkerDebuggerAgents, agents, ());
+ DEFINE_STATIC_LOCAL(WorkerDebuggerAgents, agents, (new HeapHashMap<WorkerThread*, Member<WorkerDebuggerAgent> >()));
return agents;
}
+#if ENABLE(OILPAN)
+class WorkerDebuggerAgentRemover {
+public:
+ WorkerDebuggerAgentRemover(WorkerThread* thread)
+ {printf("WorkerDebuggerAgentRemover %p\n", this);
+ m_thread = thread;
+ }
+ ~WorkerDebuggerAgentRemover()
+ {printf("~WorkerDebuggerAgentRemover %p\n", this);
+ MutexLocker lock(workerDebuggerAgentsMutex());
+ ASSERT(workerDebuggerAgents()->contains(m_thread));
+ workerDebuggerAgents()->remove(m_thread);
+ }
+
+private:
+ WorkerThread* m_thread;
+};
+
+typedef CrossThreadPersistent<HeapHashMap<WeakMember<WorkerDebuggerAgent>, OwnPtr<WorkerDebuggerAgentRemover> > > WorkerDebuggerAgentRemovers;
+
+WorkerDebuggerAgentRemovers& workerDebuggerAgentRemovers()
+{
+ DEFINE_STATIC_LOCAL(WorkerDebuggerAgentRemovers, removers, (new HeapHashMap<WeakMember<WorkerDebuggerAgent>, OwnPtr<WorkerDebuggerAgentRemover> >()));
+ return removers;
+}
+#endif
class RunInspectorCommandsTask FINAL : public ScriptDebugServer::Task {
public:
@@ -73,31 +99,43 @@ private:
} // namespace
-PassOwnPtr<WorkerDebuggerAgent> WorkerDebuggerAgent::create(WorkerScriptDebugServer* scriptDebugServer, WorkerGlobalScope* inspectedWorkerGlobalScope, InjectedScriptManager* injectedScriptManager)
+PassOwnPtrWillBeRawPtr<WorkerDebuggerAgent> WorkerDebuggerAgent::create(WorkerScriptDebugServer* scriptDebugServer, WorkerGlobalScope* inspectedWorkerGlobalScope, InjectedScriptManager* injectedScriptManager)
{
- return adoptPtr(new WorkerDebuggerAgent(scriptDebugServer, inspectedWorkerGlobalScope, injectedScriptManager));
+ return adoptPtrWillBeNoop(new WorkerDebuggerAgent(scriptDebugServer, inspectedWorkerGlobalScope, injectedScriptManager));
}
WorkerDebuggerAgent::WorkerDebuggerAgent(WorkerScriptDebugServer* scriptDebugServer, WorkerGlobalScope* inspectedWorkerGlobalScope, InjectedScriptManager* injectedScriptManager)
: InspectorDebuggerAgent(injectedScriptManager)
, m_scriptDebugServer(scriptDebugServer)
, m_inspectedWorkerGlobalScope(inspectedWorkerGlobalScope)
-{
+{printf("WorkerDebuggerAgent::WorkerDebuggerAgent %p\n", this);
MutexLocker lock(workerDebuggerAgentsMutex());
- workerDebuggerAgents().set(inspectedWorkerGlobalScope->thread(), this);
+ WorkerThread* thread = inspectedWorkerGlobalScope->thread();
+ ASSERT(!workerDebuggerAgents()->contains(thread));
+ ASSERT(!workerDebuggerAgentRemovers()->contains(this));
+ workerDebuggerAgents()->add(thread, this);
+ // workerDebuggerAgentRemovers()->add(this, adoptPtr(new WorkerDebuggerAgentRemover(thread)));
}
WorkerDebuggerAgent::~WorkerDebuggerAgent()
-{
+{printf("WorkerDebuggerAgent::~WorkerDebuggerAgent %p\n", this);
+#if !ENABLE(OILPAN)
MutexLocker lock(workerDebuggerAgentsMutex());
- ASSERT(workerDebuggerAgents().contains(m_inspectedWorkerGlobalScope->thread()));
- workerDebuggerAgents().remove(m_inspectedWorkerGlobalScope->thread());
+ ASSERT(workerDebuggerAgents()->contains(m_inspectedWorkerGlobalScope->thread()));
+ workerDebuggerAgents()->remove(m_inspectedWorkerGlobalScope->thread());
+#endif
+}
+
+void WorkerDebuggerAgent::trace(Visitor* visitor)
+{
+ visitor->trace(m_inspectedWorkerGlobalScope);
+ InspectorDebuggerAgent::trace(visitor);
}
void WorkerDebuggerAgent::interruptAndDispatchInspectorCommands(WorkerThread* thread)
{
MutexLocker lock(workerDebuggerAgentsMutex());
- WorkerDebuggerAgent* agent = workerDebuggerAgents().get(thread);
+ WorkerDebuggerAgent* agent = workerDebuggerAgents()->get(thread);
if (agent)
agent->m_scriptDebugServer->interruptAndRunTask(adoptPtr(new RunInspectorCommandsTask(thread)));
}
« no previous file with comments | « Source/core/inspector/WorkerDebuggerAgent.h ('k') | Source/core/inspector/WorkerInspectorController.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698