|
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 | | -class DispatchMessagesTask : public v8::Task { |
89 | | - public: |
90 | | - explicit DispatchMessagesTask(std::weak_ptr<MainThreadInterface> thread) |
91 | | - : thread_(thread) {} |
92 | | - |
93 | | - void Run() 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 | class AnotherThreadObjectReference { |
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 | void MainThreadInterface::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