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

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

Issue 558673003: Oilpan: move PromiseTracker to the heap (fix build after r181646.) (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Non-oilpan compile fixes Created 6 years, 3 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/PromiseTracker.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/inspector/PromiseTracker.cpp
diff --git a/Source/core/inspector/PromiseTracker.cpp b/Source/core/inspector/PromiseTracker.cpp
index d549b95260e38c2e754f893a5076c1c7729f5646..309710b1ac5ec60bbc48722b41b84361adfb51a8 100644
--- a/Source/core/inspector/PromiseTracker.cpp
+++ b/Source/core/inspector/PromiseTracker.cpp
@@ -17,32 +17,55 @@ using blink::TypeBuilder::Debugger::PromiseDetails;
namespace blink {
-class PromiseTracker::PromiseData : public RefCounted<PromiseData> {
+class PromiseTracker::PromiseData FINAL : public RefCountedWillBeGarbageCollectedFinalized<PromiseData> {
public:
+ static PassRefPtrWillBeRawPtr<PromiseData> create(v8::Isolate* isolate, int promiseHash, int promiseId, v8::Handle<v8::Object> promise)
+ {
+ return adoptRefWillBeNoop(new PromiseData(isolate, promiseHash, promiseId, promise));
+ }
+
+ int promiseHash() const { return m_promiseHash; }
+ ScopedPersistent<v8::Object>& promise() { return m_promise; }
+
+ void trace(Visitor* visitor)
+ {
+ visitor->trace(m_callStack);
+ }
+
+ WeakPtrWillBeRawPtr<PromiseData> createWeakPtr()
+ {
+#if ENABLE(OILPAN)
+ return this;
+#else
+ return m_weakPtrFactory.createWeakPtr();
+#endif
+ }
+
+private:
+ friend class PromiseTracker;
+
PromiseData(v8::Isolate* isolate, int promiseHash, int promiseId, v8::Handle<v8::Object> promise)
: m_promiseHash(promiseHash)
, m_promiseId(promiseId)
, m_promise(isolate, promise)
, m_parentPromiseId(0)
, m_status(0)
+#if !ENABLE(OILPAN)
, m_weakPtrFactory(this)
+#endif
{
}
- int promiseHash() const { return m_promiseHash; }
- ScopedPersistent<v8::Object>& promise() { return m_promise; }
-
-private:
- friend class PromiseTracker;
-
int m_promiseHash;
int m_promiseId;
ScopedPersistent<v8::Object> m_promise;
int m_parentPromiseId;
int m_status;
- WeakPtrFactory<PromiseData> m_weakPtrFactory;
- RefPtr<ScriptCallStack> m_callStack;
+ RefPtrWillBeMember<ScriptCallStack> m_callStack;
ScopedPersistent<v8::Object> m_parentPromise;
+#if !ENABLE(OILPAN)
+ WeakPtrFactory<PromiseData> m_weakPtrFactory;
+#endif
};
static int indexOf(PromiseTracker::PromiseDataVector* vector, const ScopedPersistent<v8::Object>& promise)
@@ -56,18 +79,17 @@ static int indexOf(PromiseTracker::PromiseDataVector* vector, const ScopedPersis
namespace {
-class PromiseDataWrapper {
+class PromiseDataWrapper FINAL : public NoBaseWillBeGarbageCollected<PromiseDataWrapper> {
public:
- PromiseDataWrapper(WeakPtr<PromiseTracker::PromiseData> data, PromiseTracker::PromiseDataMap* map)
- : m_data(data)
- , m_promiseDataMap(map)
+ static PassOwnPtrWillBeRawPtr<PromiseDataWrapper> create(PromiseTracker::PromiseData* data, PromiseTracker::PromiseDataMap* map)
{
+ return adoptPtrWillBeNoop(new PromiseDataWrapper(data->createWeakPtr(), map));
haraken 2014/09/10 01:41:23 I'd write: #if ENABLE(OILPAN) return adoptPtrWill
sof 2014/09/10 13:40:34 Let's do that.
}
static void didRemovePromise(const v8::WeakCallbackData<v8::Object, PromiseDataWrapper>& data)
{
- OwnPtr<PromiseDataWrapper> wrapper = adoptPtr(data.GetParameter());
- WeakPtr<PromiseTracker::PromiseData> promiseData = wrapper->m_data;
+ OwnPtrWillBeRawPtr<PromiseDataWrapper> wrapper = adoptPtrWillBeNoop(data.GetParameter());
+ WeakPtrWillBeRawPtr<PromiseTracker::PromiseData> promiseData = wrapper->m_data;
if (!promiseData)
return;
PromiseTracker::PromiseDataMap* map = wrapper->m_promiseDataMap;
@@ -80,9 +102,23 @@ public:
map->remove(promiseHash);
}
+ void trace(Visitor* visitor)
+ {
+#if ENABLE(OILPAN)
+ visitor->trace(m_data);
+ visitor->trace(m_promiseDataMap);
+#endif
+ }
+
private:
- WeakPtr<PromiseTracker::PromiseData> m_data;
- PromiseTracker::PromiseDataMap* m_promiseDataMap;
+ PromiseDataWrapper(WeakPtrWillBeRawPtr<PromiseTracker::PromiseData> data, PromiseTracker::PromiseDataMap* map)
+ : m_data(data)
+ , m_promiseDataMap(map)
+ {
+ }
+
+ WeakPtrWillBeMember<PromiseTracker::PromiseData> m_data;
haraken 2014/09/10 01:41:23 Just to confirm: Is this WeakPtr just used to brea
sof 2014/09/10 13:40:34 As far as I understand the use, the unfulfilled pr
+ RawPtrWillBeMember<PromiseTracker::PromiseDataMap> m_promiseDataMap;
};
}
@@ -97,6 +133,13 @@ PromiseTracker::~PromiseTracker()
{
}
+void PromiseTracker::trace(Visitor* visitor)
+{
+#if ENABLE(OILPAN)
+ visitor->trace(m_promiseDataMap);
+#endif
+}
+
void PromiseTracker::setEnabled(bool enabled)
{
m_isEnabled = enabled;
@@ -117,21 +160,21 @@ int PromiseTracker::circularSequentialId()
return m_circularSequentialId;
}
-PassRefPtr<PromiseTracker::PromiseData> PromiseTracker::createPromiseDataIfNeeded(v8::Isolate* isolate, v8::Handle<v8::Object> promise)
+PassRefPtrWillBeRawPtr<PromiseTracker::PromiseData> PromiseTracker::createPromiseDataIfNeeded(v8::Isolate* isolate, v8::Handle<v8::Object> promise)
{
int promiseHash = promise->GetIdentityHash();
- PromiseDataVector* vector;
+ RawPtr<PromiseDataVector> vector = nullptr;
haraken 2014/09/10 01:41:23 PromiseDataVector* ? It looks a bit strange that
PromiseDataMap::iterator it = m_promiseDataMap.find(promiseHash);
if (it != m_promiseDataMap.end())
vector = &it->value;
else
vector = &m_promiseDataMap.add(promiseHash, PromiseDataVector()).storedValue->value;
- RefPtr<PromiseData> data;
+ RefPtrWillBeRawPtr<PromiseData> data = nullptr;
int index = indexOf(vector, ScopedPersistent<v8::Object>(isolate, promise));
if (index == -1) {
- data = adoptRef(new PromiseData(isolate, promiseHash, circularSequentialId(), promise));
- OwnPtr<PromiseDataWrapper> wrapper = adoptPtr(new PromiseDataWrapper(data->m_weakPtrFactory.createWeakPtr(), &m_promiseDataMap));
+ data = PromiseData::create(isolate, promiseHash, circularSequentialId(), promise);
+ OwnPtrWillBeRawPtr<PromiseDataWrapper> wrapper = PromiseDataWrapper::create(data.get(), &m_promiseDataMap);
data->m_promise.setWeak(wrapper.leakPtr(), &PromiseDataWrapper::didRemovePromise);
vector->append(data);
} else {
@@ -146,10 +189,10 @@ void PromiseTracker::didReceiveV8PromiseEvent(ScriptState* scriptState, v8::Hand
ASSERT(isEnabled());
v8::Isolate* isolate = scriptState->isolate();
- RefPtr<PromiseData> data = createPromiseDataIfNeeded(isolate, promise);
+ RefPtrWillBeRawPtr<PromiseData> data = createPromiseDataIfNeeded(isolate, promise);
if (!parentPromise.IsEmpty() && parentPromise->IsObject()) {
v8::Handle<v8::Object> handle = parentPromise->ToObject();
- RefPtr<PromiseData> parentData = createPromiseDataIfNeeded(isolate, handle);
+ RefPtrWillBeRawPtr<PromiseData> parentData = createPromiseDataIfNeeded(isolate, handle);
data->m_parentPromiseId = parentData->m_promiseId;
data->m_parentPromise.set(isolate, handle);
} else {
@@ -171,7 +214,7 @@ PassRefPtr<Array<PromiseDetails> > PromiseTracker::promises()
for (PromiseDataMap::iterator it = m_promiseDataMap.begin(); it != m_promiseDataMap.end(); ++it) {
PromiseDataVector* vector = &it->value;
for (size_t index = 0; index < vector->size(); ++index) {
- RefPtr<PromiseData> data = vector->at(index);
+ RefPtrWillBeRawPtr<PromiseData> data = vector->at(index);
PromiseDetails::Status::Enum status;
if (!data->m_status)
status = PromiseDetails::Status::Pending;
« no previous file with comments | « Source/core/inspector/PromiseTracker.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698