Skip to content

Commit

Permalink
Use a VecDequeue instead of a vec for bytes (#2246)
Browse files Browse the repository at this point in the history
* Fix: add both the rAF queue and vecdequeue

* Fix: Take before recycle
  • Loading branch information
jkelleyrtp authored Apr 4, 2024
1 parent 633e2a7 commit 0a32910
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 9 deletions.
8 changes: 4 additions & 4 deletions packages/desktop/src/edits.rs
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
use std::{cell::RefCell, rc::Rc};
use std::{cell::RefCell, collections::VecDeque, rc::Rc};

/// This handles communication between the requests that the webview makes and the interpreter. The interpreter constantly makes long running requests to the webview to get any edits that should be made to the DOM almost like server side events.
/// It will hold onto the requests until the interpreter is ready to handle them and hold onto any pending edits until a new request is made.
#[derive(Default, Clone)]
pub(crate) struct EditQueue {
queue: Rc<RefCell<Vec<Vec<u8>>>>,
queue: Rc<RefCell<VecDeque<Vec<u8>>>>,
responder: Rc<RefCell<Option<wry::RequestAsyncResponder>>>,
}

impl EditQueue {
pub fn handle_request(&self, responder: wry::RequestAsyncResponder) {
let mut queue = self.queue.borrow_mut();
if let Some(bytes) = queue.pop() {
if let Some(bytes) = queue.pop_back() {
responder.respond(wry::http::Response::new(bytes));
} else {
*self.responder.borrow_mut() = Some(responder);
Expand All @@ -23,7 +23,7 @@ impl EditQueue {
if let Some(responder) = responder.take() {
responder.respond(wry::http::Response::new(edits));
} else {
self.queue.borrow_mut().push(edits);
self.queue.borrow_mut().push_front(edits);
}
}
}
3 changes: 2 additions & 1 deletion packages/generational-box/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -201,8 +201,9 @@ impl<T, S: Storage<T>> GenerationalBox<T, S> {
/// Drop the value out of the generational box and invalidate the generational box. This will return the value if the value was taken.
pub fn manually_drop(&self) -> Option<T> {
if self.validate() {
let o = Storage::take(&self.raw.0.data);
<S as AnyStorage>::recycle(&self.raw);
Storage::take(&self.raw.0.data)
o
} else {
None
}
Expand Down
2 changes: 1 addition & 1 deletion packages/interpreter/src/js/hash.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
13636418089
14148301494
Loading

0 comments on commit 0a32910

Please sign in to comment.