| OLD | NEW | 
|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "config.h" | 5 #include "config.h" | 
| 6 #include "core/inspector/PromiseTracker.h" | 6 #include "core/inspector/PromiseTracker.h" | 
| 7 | 7 | 
| 8 #include "bindings/core/v8/ScriptCallStackFactory.h" | 8 #include "bindings/core/v8/ScriptCallStackFactory.h" | 
| 9 #include "bindings/core/v8/ScriptState.h" | 9 #include "bindings/core/v8/ScriptState.h" | 
| 10 #include "bindings/core/v8/ScriptValue.h" | 10 #include "bindings/core/v8/ScriptValue.h" | 
| 11 #include "core/inspector/ScriptAsyncCallStack.h" | 11 #include "core/inspector/ScriptAsyncCallStack.h" | 
| 12 #include "wtf/CurrentTime.h" | 12 #include "wtf/CurrentTime.h" | 
| 13 #include "wtf/PassOwnPtr.h" | 13 #include "wtf/PassOwnPtr.h" | 
| 14 #include "wtf/WeakPtr.h" | 14 #include "wtf/WeakPtr.h" | 
| 15 | 15 | 
| 16 using blink::TypeBuilder::Array; | 16 using blink::TypeBuilder::Array; | 
| 17 using blink::TypeBuilder::Console::CallFrame; | 17 using blink::TypeBuilder::Console::CallFrame; | 
| 18 using blink::TypeBuilder::Debugger::PromiseDetails; | 18 using blink::TypeBuilder::Debugger::PromiseDetails; | 
| 19 | 19 | 
| 20 namespace blink { | 20 namespace blink { | 
| 21 | 21 | 
| 22 class PromiseTracker::PromiseWeakCallbackData final { | 22 class PromiseTracker::PromiseWeakCallbackData final { | 
| 23     WTF_MAKE_NONCOPYABLE(PromiseWeakCallbackData); | 23     WTF_MAKE_NONCOPYABLE(PromiseWeakCallbackData); | 
| 24 public: | 24 public: | 
| 25     PromiseWeakCallbackData(PromiseTracker* tracker, int id) | 25     PromiseWeakCallbackData(PromiseTracker* tracker, int id) | 
| 26 #if ENABLE(OILPAN) |  | 
| 27         : m_tracker(tracker) |  | 
| 28 #else |  | 
| 29         : m_tracker(tracker->m_weakPtrFactory.createWeakPtr()) | 26         : m_tracker(tracker->m_weakPtrFactory.createWeakPtr()) | 
| 30 #endif |  | 
| 31         , m_id(id) | 27         , m_id(id) | 
| 32     { | 28     { | 
| 33     } | 29     } | 
| 34 | 30 | 
| 35     ~PromiseWeakCallbackData() | 31     ~PromiseWeakCallbackData() | 
| 36     { | 32     { | 
| 37         if (!m_tracker) | 33         if (!m_tracker) | 
| 38             return; | 34             return; | 
| 39         RefPtr<PromiseDetails> promiseDetails = PromiseDetails::create().setId(m
     _id); | 35         RefPtr<PromiseDetails> promiseDetails = PromiseDetails::create().setId(m
     _id); | 
| 40         m_tracker->m_listener->didUpdatePromise(InspectorFrontend::Debugger::Eve
     ntType::Gc, promiseDetails.release()); | 36         m_tracker->m_listener->didUpdatePromise(InspectorFrontend::Debugger::Eve
     ntType::Gc, promiseDetails.release()); | 
| 41     } | 37     } | 
| 42 | 38 | 
| 43     WeakPtrWillBeWeakPersistent<PromiseTracker> m_tracker; | 39     WeakPtr<PromiseTracker> m_tracker; | 
| 44     int m_id; | 40     int m_id; | 
| 45 }; | 41 }; | 
| 46 | 42 | 
| 47 PromiseTracker::IdToPromiseMapTraits::WeakCallbackDataType* PromiseTracker::IdTo
     PromiseMapTraits::WeakCallbackParameter(MapType* map, int key, v8::Local<v8::Obj
     ect>& value) | 43 PromiseTracker::IdToPromiseMapTraits::WeakCallbackDataType* PromiseTracker::IdTo
     PromiseMapTraits::WeakCallbackParameter(MapType* map, int key, v8::Local<v8::Obj
     ect>& value) | 
| 48 { | 44 { | 
| 49     // This method is called when promise is added into the map, hence the map m
     ust be alive at this point. The tracker in turn must be alive too. | 45     // This method is called when promise is added into the map, hence the map m
     ust be alive at this point. The tracker in turn must be alive too. | 
| 50     PromiseTracker* tracker = reinterpret_cast<PromiseTracker*>(reinterpret_cast
     <intptr_t>(map) - offsetof(PromiseTracker, m_idToPromise)); | 46     PromiseTracker* tracker = reinterpret_cast<PromiseTracker*>(reinterpret_cast
     <intptr_t>(map) - offsetof(PromiseTracker, m_idToPromise)); | 
| 51     return new PromiseWeakCallbackData(tracker, key); | 47     return new PromiseWeakCallbackData(tracker, key); | 
| 52 } | 48 } | 
| 53 | 49 | 
| (...skipping 16 matching lines...) Expand all  Loading... | 
| 70 { | 66 { | 
| 71     return info.GetParameter()->m_id; | 67     return info.GetParameter()->m_id; | 
| 72 } | 68 } | 
| 73 | 69 | 
| 74 PromiseTracker::PromiseTracker(Listener* listener, v8::Isolate* isolate) | 70 PromiseTracker::PromiseTracker(Listener* listener, v8::Isolate* isolate) | 
| 75     : m_circularSequentialId(0) | 71     : m_circularSequentialId(0) | 
| 76     , m_isEnabled(false) | 72     , m_isEnabled(false) | 
| 77     , m_captureStacks(false) | 73     , m_captureStacks(false) | 
| 78     , m_listener(listener) | 74     , m_listener(listener) | 
| 79     , m_isolate(isolate) | 75     , m_isolate(isolate) | 
| 80 #if !ENABLE(OILPAN) |  | 
| 81     , m_weakPtrFactory(this) | 76     , m_weakPtrFactory(this) | 
| 82 #endif |  | 
| 83     , m_idToPromise(isolate) | 77     , m_idToPromise(isolate) | 
| 84 { | 78 { | 
| 85     clear(); | 79     clear(); | 
| 86 } | 80 } | 
| 87 | 81 | 
| 88 PromiseTracker::~PromiseTracker() | 82 PromiseTracker::~PromiseTracker() | 
| 89 { | 83 { | 
| 90 } | 84 } | 
| 91 | 85 | 
| 92 DEFINE_TRACE(PromiseTracker) |  | 
| 93 { |  | 
| 94 #if ENABLE(OILPAN) |  | 
| 95     visitor->trace(m_listener); |  | 
| 96 #endif |  | 
| 97 } |  | 
| 98 |  | 
| 99 void PromiseTracker::setEnabled(bool enabled, bool captureStacks) | 86 void PromiseTracker::setEnabled(bool enabled, bool captureStacks) | 
| 100 { | 87 { | 
| 101     m_isEnabled = enabled; | 88     m_isEnabled = enabled; | 
| 102     m_captureStacks = captureStacks; | 89     m_captureStacks = captureStacks; | 
| 103     if (!enabled) | 90     if (!enabled) | 
| 104         clear(); | 91         clear(); | 
| 105 } | 92 } | 
| 106 | 93 | 
| 107 void PromiseTracker::clear() | 94 void PromiseTracker::clear() | 
| 108 { | 95 { | 
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 202 { | 189 { | 
| 203     ASSERT(isEnabled()); | 190     ASSERT(isEnabled()); | 
| 204     v8::HandleScope scope(m_isolate); | 191     v8::HandleScope scope(m_isolate); | 
| 205     v8::Local<v8::Object> value = m_idToPromise.Get(promiseId); | 192     v8::Local<v8::Object> value = m_idToPromise.Get(promiseId); | 
| 206     if (value.IsEmpty()) | 193     if (value.IsEmpty()) | 
| 207         return ScriptValue(); | 194         return ScriptValue(); | 
| 208     return ScriptValue(ScriptState::from(value->CreationContext()) , value); | 195     return ScriptValue(ScriptState::from(value->CreationContext()) , value); | 
| 209 } | 196 } | 
| 210 | 197 | 
| 211 } // namespace blink | 198 } // namespace blink | 
| OLD | NEW | 
|---|