Chromium Code Reviews| Index: Source/core/inspector/PromiseTracker.cpp |
| diff --git a/Source/core/inspector/PromiseTracker.cpp b/Source/core/inspector/PromiseTracker.cpp |
| index 309710b1ac5ec60bbc48722b41b84361adfb51a8..571f27229d0a8605235a0f2b8a28080046b7cf2e 100644 |
| --- a/Source/core/inspector/PromiseTracker.cpp |
| +++ b/Source/core/inspector/PromiseTracker.cpp |
| @@ -27,18 +27,16 @@ public: |
| int promiseHash() const { return m_promiseHash; } |
| ScopedPersistent<v8::Object>& promise() { return m_promise; } |
| - void trace(Visitor* visitor) |
| +#if !ENABLE(OILPAN) |
| + WeakPtr<PromiseData> createWeakPtr() |
| { |
| - visitor->trace(m_callStack); |
| + return m_weakPtrFactory.createWeakPtr(); |
| } |
| +#endif |
| - WeakPtrWillBeRawPtr<PromiseData> createWeakPtr() |
| + void trace(Visitor* visitor) |
| { |
| -#if ENABLE(OILPAN) |
| - return this; |
| -#else |
| - return m_weakPtrFactory.createWeakPtr(); |
| -#endif |
| + visitor->trace(m_callStack); |
| } |
| private: |
| @@ -81,57 +79,68 @@ namespace { |
| class PromiseDataWrapper FINAL : public NoBaseWillBeGarbageCollected<PromiseDataWrapper> { |
| public: |
| - static PassOwnPtrWillBeRawPtr<PromiseDataWrapper> create(PromiseTracker::PromiseData* data, PromiseTracker::PromiseDataMap* map) |
| + static PassOwnPtrWillBeRawPtr<PromiseDataWrapper> create(PromiseTracker::PromiseData* data, PromiseTracker* tracker) |
| { |
| - return adoptPtrWillBeNoop(new PromiseDataWrapper(data->createWeakPtr(), map)); |
| +#if ENABLE(OILPAN) |
| + return new PromiseDataWrapper(data, tracker); |
| +#else |
| + return adoptPtr(new PromiseDataWrapper(data->createWeakPtr(), tracker)); |
| +#endif |
| } |
| +#if ENABLE(OILPAN) |
| + static void didRemovePromise(const v8::WeakCallbackData<v8::Object, Persistent<PromiseDataWrapper> >& data) |
| +#else |
| static void didRemovePromise(const v8::WeakCallbackData<v8::Object, PromiseDataWrapper>& data) |
| +#endif |
| { |
| - OwnPtrWillBeRawPtr<PromiseDataWrapper> wrapper = adoptPtrWillBeNoop(data.GetParameter()); |
| +#if ENABLE(OILPAN) |
| + OwnPtr<Persistent<PromiseDataWrapper> > persistentWrapper = adoptPtr(data.GetParameter()); |
| + RawPtr<PromiseDataWrapper> wrapper = *persistentWrapper; |
| +#else |
| + OwnPtr<PromiseDataWrapper> wrapper = adoptPtr(data.GetParameter()); |
| +#endif |
| WeakPtrWillBeRawPtr<PromiseTracker::PromiseData> promiseData = wrapper->m_data; |
| - if (!promiseData) |
| + if (!promiseData || !wrapper->m_tracker) |
| return; |
| - PromiseTracker::PromiseDataMap* map = wrapper->m_promiseDataMap; |
| + PromiseTracker::PromiseDataMap& map = wrapper->m_tracker->promiseDataMap(); |
| int promiseHash = promiseData->promiseHash(); |
| - PromiseTracker::PromiseDataVector* vector = &map->find(promiseHash)->value; |
| + PromiseTracker::PromiseDataVector* vector = &map.find(promiseHash)->value; |
| int index = indexOf(vector, promiseData->promise()); |
| ASSERT(index >= 0); |
| vector->remove(index); |
| - if (vector->size() == 0) |
| - map->remove(promiseHash); |
| + if (!vector->size()) |
|
aandrey
2014/09/10 14:42:18
if (vector->isEmpty())
sof
2014/09/11 05:20:53
Done.
|
| + map.remove(promiseHash); |
| } |
| void trace(Visitor* visitor) |
| { |
| #if ENABLE(OILPAN) |
| visitor->trace(m_data); |
| - visitor->trace(m_promiseDataMap); |
| + visitor->trace(m_tracker); |
| #endif |
| } |
| private: |
| - PromiseDataWrapper(WeakPtrWillBeRawPtr<PromiseTracker::PromiseData> data, PromiseTracker::PromiseDataMap* map) |
| + PromiseDataWrapper(WeakPtrWillBeRawPtr<PromiseTracker::PromiseData> data, PromiseTracker* tracker) |
|
aandrey
2014/09/10 14:42:18
nit: extra space before PromiseTracker*
sof
2014/09/11 05:20:53
Well spotted :)
|
| : m_data(data) |
| - , m_promiseDataMap(map) |
| + , m_tracker(tracker) |
| { |
| } |
| - WeakPtrWillBeMember<PromiseTracker::PromiseData> m_data; |
| - RawPtrWillBeMember<PromiseTracker::PromiseDataMap> m_promiseDataMap; |
| + WeakPtrWillBeWeakMember<PromiseTracker::PromiseData> m_data; |
| + RawPtrWillBeWeakMember<PromiseTracker> m_tracker; |
| }; |
| } |
| PromiseTracker::PromiseTracker() |
| - : m_isEnabled(false) |
| - , m_circularSequentialId(0) |
| + : m_circularSequentialId(0) |
| + , m_isEnabled(false) |
| { |
| } |
| -PromiseTracker::~PromiseTracker() |
| -{ |
| -} |
| +DEFINE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(PromiseTracker); |
| void PromiseTracker::trace(Visitor* visitor) |
| { |
| @@ -170,16 +179,19 @@ PassRefPtrWillBeRawPtr<PromiseTracker::PromiseData> PromiseTracker::createPromis |
| else |
| vector = &m_promiseDataMap.add(promiseHash, PromiseDataVector()).storedValue->value; |
| - RefPtrWillBeRawPtr<PromiseData> data = nullptr; |
| int index = indexOf(vector, ScopedPersistent<v8::Object>(isolate, promise)); |
| - if (index == -1) { |
| - 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 { |
| - data = vector->at(index); |
| - } |
| + if (index != -1) |
| + return vector->at(index); |
| + |
| + RefPtrWillBeRawPtr<PromiseData> data = PromiseData::create(isolate, promiseHash, circularSequentialId(), promise); |
| + OwnPtrWillBeRawPtr<PromiseDataWrapper> dataWrapper = PromiseDataWrapper::create(data.get(), this); |
| +#if ENABLE(OILPAN) |
| + OwnPtr<Persistent<PromiseDataWrapper> > wrapper = adoptPtr(new Persistent<PromiseDataWrapper>(dataWrapper.leakPtr())); |
| +#else |
| + OwnPtr<PromiseDataWrapper> wrapper = dataWrapper.release(); |
| +#endif |
| + data->m_promise.setWeak(wrapper.leakPtr(), &PromiseDataWrapper::didRemovePromise); |
| + vector->append(data); |
| return data.release(); |
| } |