|
1 | 1 | #include"main_thread_interface.h" |
2 | 2 |
|
| 3 | +#include"env-inl.h" |
3 | 4 | #include"node_mutex.h" |
4 | 5 | #include"v8-inspector.h" |
5 | 6 | #include"util-inl.h" |
@@ -85,19 +86,6 @@ class CallRequest : public Request{ |
85 | 86 | Fn fn_; |
86 | 87 | }; |
87 | 88 |
|
88 | | -classDispatchMessagesTask : publicv8::Task{ |
89 | | -public: |
90 | | -explicitDispatchMessagesTask(std::weak_ptr<MainThreadInterface> thread) |
91 | | - : thread_(thread){} |
92 | | - |
93 | | -voidRun() override{ |
94 | | -if (auto thread = thread_.lock()) thread->DispatchMessages(); |
95 | | - } |
96 | | - |
97 | | -private: |
98 | | - std::weak_ptr<MainThreadInterface> thread_; |
99 | | -}; |
100 | | - |
101 | 89 | template <typename T> |
102 | 90 | classAnotherThreadObjectReference{ |
103 | 91 | public: |
@@ -212,36 +200,23 @@ class ThreadSafeDelegate : public InspectorSessionDelegate{ |
212 | 200 | } // namespace |
213 | 201 |
|
214 | 202 |
|
215 | | -MainThreadInterface::MainThreadInterface(Agent* agent, uv_loop_t* loop, |
216 | | - v8::Isolate* isolate, |
217 | | - v8::Platform* platform) |
218 | | - : agent_(agent), isolate_(isolate), |
219 | | - platform_(platform){ |
220 | | -} |
| 203 | +MainThreadInterface::MainThreadInterface(Agent* agent) : agent_(agent){} |
221 | 204 |
|
222 | 205 | MainThreadInterface::~MainThreadInterface(){ |
223 | 206 | if (handle_) |
224 | 207 | handle_->Reset(); |
225 | 208 | } |
226 | 209 |
|
227 | 210 | voidMainThreadInterface::Post(std::unique_ptr<Request> request){ |
| 211 | +CHECK_NOT_NULL(agent_); |
228 | 212 | Mutex::ScopedLock scoped_lock(requests_lock_); |
229 | 213 | bool needs_notify = requests_.empty(); |
230 | 214 | requests_.push_back(std::move(request)); |
231 | 215 | if (needs_notify){ |
232 | | -if (isolate_ != nullptr && platform_ != nullptr){ |
233 | | - std::shared_ptr<v8::TaskRunner> taskrunner = |
234 | | - platform_->GetForegroundTaskRunner(isolate_); |
235 | | - std::weak_ptr<MainThreadInterface>* interface_ptr = |
236 | | -new std::weak_ptr<MainThreadInterface>(shared_from_this()); |
237 | | - taskrunner->PostTask( |
238 | | - std::make_unique<DispatchMessagesTask>(*interface_ptr)); |
239 | | - isolate_->RequestInterrupt([](v8::Isolate* isolate, void* opaque){ |
240 | | - std::unique_ptr<std::weak_ptr<MainThreadInterface>> interface_ptr{ |
241 | | -static_cast<std::weak_ptr<MainThreadInterface>*>(opaque) }; |
242 | | -if (auto iface = interface_ptr->lock()) iface->DispatchMessages(); |
243 | | - }, static_cast<void*>(interface_ptr)); |
244 | | - } |
| 216 | + std::weak_ptr<MainThreadInterface> weak_self{shared_from_this()}; |
| 217 | + agent_->env()->RequestInterrupt([weak_self](Environment*){ |
| 218 | +if (auto iface = weak_self.lock()) iface->DispatchMessages(); |
| 219 | + }); |
245 | 220 | } |
246 | 221 | incoming_message_cond_.Broadcast(scoped_lock); |
247 | 222 | } |
@@ -274,7 +249,7 @@ void MainThreadInterface::DispatchMessages(){ |
274 | 249 | std::swap(dispatching_message_queue_.front(), task); |
275 | 250 | dispatching_message_queue_.pop_front(); |
276 | 251 |
|
277 | | - v8::SealHandleScope seal_handle_scope(isolate_); |
| 252 | + v8::SealHandleScope seal_handle_scope(agent_->env()->isolate()); |
278 | 253 | task->Call(this); |
279 | 254 | } |
280 | 255 | } while (had_messages); |
|
0 commit comments