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

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

Issue 707273003: Refactor AsyncCallStackTracker to hide private implementation inner class. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 1 month 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
Index: Source/core/inspector/AsyncCallStackTracker.cpp
diff --git a/Source/core/inspector/AsyncCallStackTracker.cpp b/Source/core/inspector/AsyncCallStackTracker.cpp
index 5f06f3f431222271a8835d2cda81e3a51ed7b667..07d80ef7057d5e9416d60ee95efec29ec695fccf 100644
--- a/Source/core/inspector/AsyncCallStackTracker.cpp
+++ b/Source/core/inspector/AsyncCallStackTracker.cpp
@@ -33,6 +33,7 @@
#include "bindings/core/v8/V8Binding.h"
#include "bindings/core/v8/V8RecursionScope.h"
+#include "core/dom/ContextLifecycleObserver.h"
#include "core/dom/ExecutionContext.h"
#include "core/dom/ExecutionContextTask.h"
#include "core/dom/Microtask.h"
@@ -56,36 +57,62 @@ static const char enqueueMutationRecordName[] = "Mutation";
namespace blink {
-void AsyncCallStackTracker::ExecutionContextData::contextDestroyed()
-{
- ASSERT(executionContext());
- OwnPtrWillBeRawPtr<ExecutionContextData> self = m_tracker->m_executionContextDataMap.take(executionContext());
- ASSERT_UNUSED(self, self == this);
- ContextLifecycleObserver::contextDestroyed();
-}
+class AsyncCallStackTracker::ExecutionContextData final : public NoBaseWillBeGarbageCollectedFinalized<ExecutionContextData>, public ContextLifecycleObserver {
+ WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED;
+public:
+ ExecutionContextData(AsyncCallStackTracker* tracker, ExecutionContext* executionContext)
+ : ContextLifecycleObserver(executionContext)
+ , m_circularSequentialID(0)
+ , m_tracker(tracker)
+ {
+ }
-int AsyncCallStackTracker::ExecutionContextData::circularSequentialID()
-{
- ++m_circularSequentialID;
- if (m_circularSequentialID <= 0)
- m_circularSequentialID = 1;
- return m_circularSequentialID;
-}
+ virtual void contextDestroyed() override
+ {
+ ASSERT(executionContext());
+ OwnPtrWillBeRawPtr<ExecutionContextData> self = adoptPtrWillBeNoop(m_tracker->m_executionContextDataMap.take(executionContext()));
+ ASSERT_UNUSED(self, self == this);
+ ContextLifecycleObserver::contextDestroyed();
+ }
-void AsyncCallStackTracker::ExecutionContextData::trace(Visitor* visitor)
-{
- visitor->trace(m_tracker);
+ int circularSequentialID()
+ {
+ ++m_circularSequentialID;
+ if (m_circularSequentialID <= 0)
+ m_circularSequentialID = 1;
+ return m_circularSequentialID;
+ }
+
+ void trace(Visitor* visitor)
+ {
+ visitor->trace(m_tracker);
#if ENABLE(OILPAN)
- visitor->trace(m_timerCallChains);
- visitor->trace(m_animationFrameCallChains);
- visitor->trace(m_eventCallChains);
- visitor->trace(m_xhrCallChains);
- visitor->trace(m_mutationObserverCallChains);
- visitor->trace(m_executionContextTaskCallChains);
- visitor->trace(m_v8AsyncTaskCallChains);
- visitor->trace(m_asyncOperationCallChains);
+ visitor->trace(m_timerCallChains);
+ visitor->trace(m_animationFrameCallChains);
+ visitor->trace(m_eventCallChains);
+ visitor->trace(m_xhrCallChains);
+ visitor->trace(m_mutationObserverCallChains);
+ visitor->trace(m_executionContextTaskCallChains);
+ visitor->trace(m_v8AsyncTaskCallChains);
+ visitor->trace(m_asyncOperationCallChains);
#endif
-}
+ }
+
+private:
+ int m_circularSequentialID;
+
+public:
yurys 2014/11/11 12:31:37 Just move these fields above the private: section
+ RawPtrWillBeMember<AsyncCallStackTracker> m_tracker;
+ HashSet<int> m_intervalTimerIds;
+ WillBeHeapHashMap<int, RefPtrWillBeMember<AsyncCallChain> > m_timerCallChains;
+ WillBeHeapHashMap<int, RefPtrWillBeMember<AsyncCallChain> > m_animationFrameCallChains;
+ WillBeHeapHashMap<RawPtrWillBeMember<Event>, RefPtrWillBeMember<AsyncCallChain> > m_eventCallChains;
+ WillBeHeapHashMap<RawPtrWillBeMember<EventTarget>, RefPtrWillBeMember<AsyncCallChain> > m_xhrCallChains;
+ WillBeHeapHashMap<RawPtrWillBeMember<MutationObserver>, RefPtrWillBeMember<AsyncCallChain> > m_mutationObserverCallChains;
+ WillBeHeapHashMap<ExecutionContextTask*, RefPtrWillBeMember<AsyncCallChain> > m_executionContextTaskCallChains;
+ WillBeHeapHashMap<String, RefPtrWillBeMember<AsyncCallChain> > m_v8AsyncTaskCallChains;
+ WillBeHeapHashMap<int, RefPtrWillBeMember<AsyncCallChain> > m_asyncOperationCallChains;
+};
static XMLHttpRequest* toXmlHttpRequest(EventTarget* eventTarget)
{
@@ -454,8 +481,8 @@ AsyncCallStackTracker::ExecutionContextData* AsyncCallStackTracker::createContex
{
ExecutionContextData* data = m_executionContextDataMap.get(context);
if (!data) {
- data = m_executionContextDataMap.set(context, adoptPtrWillBeNoop(new AsyncCallStackTracker::ExecutionContextData(this, context)))
yurys 2014/11/11 12:31:37 Please revert this. The code before your change fo
- .storedValue->value.get();
+ data = new AsyncCallStackTracker::ExecutionContextData(this, context);
+ m_executionContextDataMap.set(context, data);
}
return data;
}
@@ -464,7 +491,14 @@ void AsyncCallStackTracker::clear()
{
m_currentAsyncCallChain.clear();
m_nestedAsyncCallCount = 0;
+#if ENABLE(OILPAN)
m_executionContextDataMap.clear();
+#else
+ ExecutionContextDataMap copy;
+ m_executionContextDataMap.swap(copy);
+ for (ExecutionContextDataMap::const_iterator it = copy.begin(); it != copy.end(); ++it)
+ delete it->value;
+#endif
}
void AsyncCallStackTracker::trace(Visitor* visitor)

Powered by Google App Engine
This is Rietveld 408576698