Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changes/runtime-wry-avoid-clones.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"tauri-runtime-wry": "minor:changes"
---

`EventLoopIterationContext` and `UserMessageContext` now takes references to avoid clones
80 changes: 37 additions & 43 deletions crates/tauri-runtime-wry/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -241,8 +241,8 @@ pub(crate) fn send_user_message<T: UserEvent>(
&context.main_thread.window_target,
message,
UserMessageContext {
window_id_map: context.window_id_map.clone(),
windows: context.main_thread.windows.clone(),
window_id_map: &context.window_id_map,
windows: &context.main_thread.windows,
},
);
Ok(())
Expand Down Expand Up @@ -3187,13 +3187,13 @@ impl<T: UserEvent> Runtime<T> for Wry<T> {
#[cfg(desktop)]
fn run_iteration<F: FnMut(RunEvent<T>) + 'static>(&mut self, mut callback: F) {
use tao::platform::run_return::EventLoopExtRunReturn;
let windows = self.context.main_thread.windows.clone();
let window_id_map = self.context.window_id_map.clone();
let windows = &self.context.main_thread.windows;
let window_id_map = &self.context.window_id_map;
let web_context = &self.context.main_thread.web_context;
let plugins = self.context.plugins.clone();
let plugins = &self.context.plugins;

#[cfg(feature = "tracing")]
let active_tracing_spans = self.context.main_thread.active_tracing_spans.clone();
let active_tracing_spans = &self.context.main_thread.active_tracing_spans;

let proxy = self.event_loop.create_proxy();

Expand All @@ -3213,10 +3213,10 @@ impl<T: UserEvent> Runtime<T> for Wry<T> {
control_flow,
EventLoopIterationContext {
callback: &mut callback,
window_id_map: window_id_map.clone(),
windows: windows.clone(),
window_id_map,
windows,
#[cfg(feature = "tracing")]
active_tracing_spans: active_tracing_spans.clone(),
active_tracing_spans,
},
web_context,
);
Expand All @@ -3231,27 +3231,25 @@ impl<T: UserEvent> Runtime<T> for Wry<T> {
control_flow,
EventLoopIterationContext {
callback: &mut callback,
windows: windows.clone(),
window_id_map: window_id_map.clone(),
windows,
window_id_map,
#[cfg(feature = "tracing")]
active_tracing_spans: active_tracing_spans.clone(),
active_tracing_spans,
},
);
});
}

fn run<F: FnMut(RunEvent<T>) + 'static>(self, callback: F) {
let event_handler = make_event_handler(&self, callback);

let event_handler = make_event_handler(self.context, callback);
self.event_loop.run(event_handler)
}

#[cfg(not(target_os = "ios"))]
fn run_return<F: FnMut(RunEvent<T>) + 'static>(mut self, callback: F) -> i32 {
use tao::platform::run_return::EventLoopExtRunReturn;

let event_handler = make_event_handler(&self, callback);

let event_handler = make_event_handler(self.context, callback);
self.event_loop.run_return(event_handler)
}

Expand All @@ -3262,22 +3260,18 @@ impl<T: UserEvent> Runtime<T> for Wry<T> {
}
}

fn make_event_handler<T, F>(
runtime: &Wry<T>,
fn make_event_handler<T: UserEvent, F: FnMut(RunEvent<T>) + 'static>(
context: Context<T>,
mut callback: F,
) -> impl FnMut(Event<'_, Message<T>>, &EventLoopWindowTarget<Message<T>>, &mut ControlFlow)
where
T: UserEvent,
F: FnMut(RunEvent<T>) + 'static,
{
let windows = runtime.context.main_thread.windows.clone();
let window_id_map = runtime.context.window_id_map.clone();
let web_context = runtime.context.main_thread.web_context.clone();
let plugins = runtime.context.plugins.clone();
) -> impl FnMut(Event<'_, Message<T>>, &EventLoopWindowTarget<Message<T>>, &mut ControlFlow) {
let windows = context.main_thread.windows;
let window_id_map = context.window_id_map;
let web_context = context.main_thread.web_context;
let plugins = context.plugins;

#[cfg(feature = "tracing")]
let active_tracing_spans = runtime.context.main_thread.active_tracing_spans.clone();
let proxy = runtime.event_loop.create_proxy();
let active_tracing_spans = context.main_thread.active_tracing_spans;
let proxy = context.proxy;

move |event, event_loop, control_flow| {
for p in plugins.lock().unwrap().iter_mut() {
Expand All @@ -3288,10 +3282,10 @@ where
control_flow,
EventLoopIterationContext {
callback: &mut callback,
window_id_map: window_id_map.clone(),
windows: windows.clone(),
window_id_map: &window_id_map,
windows: &windows,
#[cfg(feature = "tracing")]
active_tracing_spans: active_tracing_spans.clone(),
active_tracing_spans: &active_tracing_spans,
},
&web_context,
);
Expand All @@ -3305,26 +3299,26 @@ where
control_flow,
EventLoopIterationContext {
callback: &mut callback,
window_id_map: window_id_map.clone(),
windows: windows.clone(),
window_id_map: &window_id_map,
windows: &windows,
#[cfg(feature = "tracing")]
active_tracing_spans: active_tracing_spans.clone(),
active_tracing_spans: &active_tracing_spans,
},
);
}
}

pub struct EventLoopIterationContext<'a, T: UserEvent> {
pub callback: &'a mut (dyn FnMut(RunEvent<T>) + 'static),
pub window_id_map: WindowIdStore,
pub windows: Arc<WindowsStore>,
pub window_id_map: &'a WindowIdStore,
pub windows: &'a WindowsStore,
#[cfg(feature = "tracing")]
pub active_tracing_spans: ActiveTraceSpanStore,
pub active_tracing_spans: &'a ActiveTraceSpanStore,
}

struct UserMessageContext {
windows: Arc<WindowsStore>,
window_id_map: WindowIdStore,
struct UserMessageContext<'a> {
windows: &'a WindowsStore,
window_id_map: &'a WindowIdStore,
}

fn handle_user_message<T: UserEvent>(
Expand Down Expand Up @@ -4437,7 +4431,7 @@ fn handle_event_loop<T: UserEvent>(
fn on_close_requested<'a, T: UserEvent>(
callback: &'a mut (dyn FnMut(RunEvent<T>) + 'static),
window_id: WindowId,
windows: Arc<WindowsStore>,
windows: &WindowsStore,
) {
let (tx, rx) = channel();
let windows_ref = windows.0.borrow();
Expand Down Expand Up @@ -4465,7 +4459,7 @@ fn on_close_requested<'a, T: UserEvent>(
}
}

fn on_window_close(window_id: WindowId, windows: Arc<WindowsStore>) {
fn on_window_close(window_id: WindowId, windows: &WindowsStore) {
if let Some(window_wrapper) = windows.0.borrow_mut().get_mut(&window_id) {
window_wrapper.inner = None;
#[cfg(windows)]
Expand Down
Loading