未验证 提交 e06875e9 编写于 作者: C Casper Beyer 提交者: GitHub

refactor(cli/coverage): await for inspector message response (#7584)

上级 c4ed3fb7
...@@ -10,8 +10,9 @@ use deno_core::error::AnyError; ...@@ -10,8 +10,9 @@ use deno_core::error::AnyError;
use deno_core::url::Url; use deno_core::url::Url;
use deno_core::v8; use deno_core::v8;
use deno_core::ModuleSpecifier; use deno_core::ModuleSpecifier;
use futures::channel::oneshot;
use serde::Deserialize; use serde::Deserialize;
use std::collections::VecDeque; use std::collections::HashMap;
use std::mem::MaybeUninit; use std::mem::MaybeUninit;
use std::ops::Deref; use std::ops::Deref;
use std::ops::DerefMut; use std::ops::DerefMut;
...@@ -21,8 +22,8 @@ use std::sync::Arc; ...@@ -21,8 +22,8 @@ use std::sync::Arc;
pub struct CoverageCollector { pub struct CoverageCollector {
v8_channel: v8::inspector::ChannelBase, v8_channel: v8::inspector::ChannelBase,
v8_session: v8::UniqueRef<v8::inspector::V8InspectorSession>, v8_session: v8::UniqueRef<v8::inspector::V8InspectorSession>,
response_queue: VecDeque<serde_json::Value>, response_map: HashMap<i32, oneshot::Sender<serde_json::Value>>,
next_message_id: usize, next_message_id: i32,
} }
impl Deref for CoverageCollector { impl Deref for CoverageCollector {
...@@ -49,12 +50,17 @@ impl v8::inspector::ChannelImpl for CoverageCollector { ...@@ -49,12 +50,17 @@ impl v8::inspector::ChannelImpl for CoverageCollector {
fn send_response( fn send_response(
&mut self, &mut self,
_call_id: i32, call_id: i32,
message: v8::UniquePtr<v8::inspector::StringBuffer>, message: v8::UniquePtr<v8::inspector::StringBuffer>,
) { ) {
let raw_message = message.unwrap().string().to_string(); let raw_message = message.unwrap().string().to_string();
let message = serde_json::from_str(&raw_message).unwrap(); let message = serde_json::from_str(&raw_message).unwrap();
self.response_queue.push_back(message); self
.response_map
.remove(&call_id)
.unwrap()
.send(message)
.unwrap();
} }
fn send_notification( fn send_notification(
...@@ -78,13 +84,13 @@ impl CoverageCollector { ...@@ -78,13 +84,13 @@ impl CoverageCollector {
v8::inspector::StringView::empty(), v8::inspector::StringView::empty(),
); );
let response_queue = VecDeque::with_capacity(10); let response_map = HashMap::new();
let next_message_id = 0; let next_message_id = 0;
Self { Self {
v8_channel, v8_channel,
v8_session, v8_session,
response_queue, response_map,
next_message_id, next_message_id,
} }
}) })
...@@ -98,6 +104,9 @@ impl CoverageCollector { ...@@ -98,6 +104,9 @@ impl CoverageCollector {
let id = self.next_message_id; let id = self.next_message_id;
self.next_message_id += 1; self.next_message_id += 1;
let (sender, receiver) = oneshot::channel::<serde_json::Value>();
self.response_map.insert(id, sender);
let message = json!({ let message = json!({
"id": id, "id": id,
"method": method, "method": method,
...@@ -108,7 +117,7 @@ impl CoverageCollector { ...@@ -108,7 +117,7 @@ impl CoverageCollector {
let raw_message = v8::inspector::StringView::from(raw_message.as_bytes()); let raw_message = v8::inspector::StringView::from(raw_message.as_bytes());
self.v8_session.dispatch_protocol_message(raw_message); self.v8_session.dispatch_protocol_message(raw_message);
let response = self.response_queue.pop_back().unwrap(); let response = receiver.await.unwrap();
if let Some(error) = response.get("error") { if let Some(error) = response.get("error") {
return Err(generic_error(format!("{}", error))); return Err(generic_error(format!("{}", error)));
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册