|
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