From 55c2db460e360397644bd40c3292f30abf3decc8 Mon Sep 17 00:00:00 2001 From: "Ngo Iok Ui (Wu Yu Wei)" Date: Tue, 23 Mar 2021 08:07:09 +0800 Subject: [PATCH] refactor(core): reduce usage on arc and mutex (#1361) Co-authored-by: Lucas Nogueira --- tauri/Cargo.toml | 2 +- tauri/src/app.rs | 25 ++-------- tauri/src/app/webview.rs | 2 +- tauri/src/app/webview/wry.rs | 78 ++++---------------------------- tauri/src/app/webview_manager.rs | 8 +--- 5 files changed, 16 insertions(+), 99 deletions(-) diff --git a/tauri/Cargo.toml b/tauri/Cargo.toml index 09a2afcc0..0f92c957e 100644 --- a/tauri/Cargo.toml +++ b/tauri/Cargo.toml @@ -30,7 +30,7 @@ thiserror = "1.0.24" once_cell = "1.7.2" tauri-api = { version = "0.7.5", path = "../tauri-api" } tauri-macros = { version = "0.1", path = "../tauri-macros" } -wry = { git = "https://github.com/tauri-apps/wry", rev = "8dd58eec77d4c89491b1af427d06c4ee6cfa8e58" } +wry = "0.6" rand = "0.8" [build-dependencies] diff --git a/tauri/src/app.rs b/tauri/src/app.rs index c2263c92a..683347ac2 100644 --- a/tauri/src/app.rs +++ b/tauri/src/app.rs @@ -163,19 +163,12 @@ type WebviewContext = ( Option, ); -#[async_trait::async_trait] trait WebviewInitializer { fn init_webview(&self, webview: Webview) -> crate::Result>; - async fn on_webview_created( - &self, - webview_label: String, - dispatcher: A::Dispatcher, - manager: WebviewManager, - ); + fn on_webview_created(&self, webview_label: String, dispatcher: A::Dispatcher); } -#[async_trait::async_trait] impl WebviewInitializer for Arc> { fn init_webview(&self, webview: Webview) -> crate::Result> { let webview_manager = WebviewManager::new( @@ -212,18 +205,11 @@ impl WebviewInitializer for Arc> { )) } - async fn on_webview_created( - &self, - webview_label: String, - dispatcher: A::Dispatcher, - manager: WebviewManager, - ) { + fn on_webview_created(&self, webview_label: String, dispatcher: A::Dispatcher) { self.dispatchers.lock().unwrap().insert( webview_label.to_string(), WebviewDispatcher::new(dispatcher, webview_label), ); - - crate::plugin::created(A::plugin_store(), &manager).await } } @@ -382,11 +368,8 @@ fn run(mut application: App) -> crate::Result<() custom_protocol, file_drop_handler, )?; - crate::async_runtime::block_on(application.on_webview_created( - webview_label, - dispatcher, - webview_manager, - )); + application.on_webview_created(webview_label, dispatcher); + crate::async_runtime::block_on(crate::plugin::created(A::plugin_store(), &webview_manager)); } if let Some(main_webview_manager) = main_webview_manager { diff --git a/tauri/src/app/webview.rs b/tauri/src/app/webview.rs index 4e3433090..41b743613 100644 --- a/tauri/src/app/webview.rs +++ b/tauri/src/app/webview.rs @@ -196,7 +196,7 @@ pub enum FileDropEvent { pub type FileDropHandler = Box bool + Send>; /// Webview dispatcher. A thread-safe handle to the webview API. -pub trait ApplicationDispatcherExt: Clone + Send + Sync + Sized { +pub trait ApplicationDispatcherExt: Clone + Send + Sized { /// The webview builder type. type WebviewBuilder: WebviewBuilderExt + WebviewBuilderExtPrivate diff --git a/tauri/src/app/webview/wry.rs b/tauri/src/app/webview/wry.rs index fad057fa7..886d6fdd6 100644 --- a/tauri/src/app/webview/wry.rs +++ b/tauri/src/app/webview/wry.rs @@ -14,7 +14,6 @@ use tauri_api::path::{resolve_path, BaseDirectory}; use std::{ convert::{TryFrom, TryInto}, path::PathBuf, - sync::{Arc, Mutex}, }; impl TryFrom for wry::Icon { @@ -231,10 +230,7 @@ impl From for FileDropEvent { } #[derive(Clone)] -pub struct WryDispatcher( - Arc>, - Arc>, -); +pub struct WryDispatcher(wry::WindowProxy, wry::ApplicationProxy); impl ApplicationDispatcherExt for WryDispatcher { type WebviewBuilder = wry::Attributes; @@ -252,7 +248,7 @@ impl ApplicationDispatcherExt for WryDispatcher { move |dispatcher: wry::WindowProxy, request: wry::RpcRequest| { if let Some(handler) = &rpc_handler { handler( - WryDispatcher(Arc::new(Mutex::new(dispatcher)), app_dispatcher.clone()), + WryDispatcher(dispatcher, app_dispatcher.clone()), request.into(), ); } @@ -270,8 +266,6 @@ impl ApplicationDispatcherExt for WryDispatcher { let window_dispatcher = self .1 - .lock() - .unwrap() .add_window_with_configs( attributes, Some(wry_rpc_handler), @@ -282,17 +276,12 @@ impl ApplicationDispatcherExt for WryDispatcher { Some(file_drop_handler), ) .map_err(|_| crate::Error::FailedToSendMessage)?; - Ok(Self( - Arc::new(Mutex::new(window_dispatcher)), - self.1.clone(), - )) + Ok(Self(window_dispatcher, self.1.clone())) } fn set_resizable(&self, resizable: bool) -> crate::Result<()> { self .0 - .lock() - .unwrap() .set_resizable(resizable) .map_err(|_| crate::Error::FailedToSendMessage) } @@ -300,8 +289,6 @@ impl ApplicationDispatcherExt for WryDispatcher { fn set_title>(&self, title: S) -> crate::Result<()> { self .0 - .lock() - .unwrap() .set_title(title) .map_err(|_| crate::Error::FailedToSendMessage) } @@ -309,8 +296,6 @@ impl ApplicationDispatcherExt for WryDispatcher { fn maximize(&self) -> crate::Result<()> { self .0 - .lock() - .unwrap() .maximize() .map_err(|_| crate::Error::FailedToSendMessage) } @@ -318,8 +303,6 @@ impl ApplicationDispatcherExt for WryDispatcher { fn unmaximize(&self) -> crate::Result<()> { self .0 - .lock() - .unwrap() .unmaximize() .map_err(|_| crate::Error::FailedToSendMessage) } @@ -327,8 +310,6 @@ impl ApplicationDispatcherExt for WryDispatcher { fn minimize(&self) -> crate::Result<()> { self .0 - .lock() - .unwrap() .minimize() .map_err(|_| crate::Error::FailedToSendMessage) } @@ -336,35 +317,21 @@ impl ApplicationDispatcherExt for WryDispatcher { fn unminimize(&self) -> crate::Result<()> { self .0 - .lock() - .unwrap() .unminimize() .map_err(|_| crate::Error::FailedToSendMessage) } fn show(&self) -> crate::Result<()> { - self - .0 - .lock() - .unwrap() - .show() - .map_err(|_| crate::Error::FailedToSendMessage) + self.0.show().map_err(|_| crate::Error::FailedToSendMessage) } fn hide(&self) -> crate::Result<()> { - self - .0 - .lock() - .unwrap() - .hide() - .map_err(|_| crate::Error::FailedToSendMessage) + self.0.hide().map_err(|_| crate::Error::FailedToSendMessage) } fn close(&self) -> crate::Result<()> { self .0 - .lock() - .unwrap() .close() .map_err(|_| crate::Error::FailedToSendMessage) } @@ -372,8 +339,6 @@ impl ApplicationDispatcherExt for WryDispatcher { fn set_decorations(&self, decorations: bool) -> crate::Result<()> { self .0 - .lock() - .unwrap() .set_decorations(decorations) .map_err(|_| crate::Error::FailedToSendMessage) } @@ -381,8 +346,6 @@ impl ApplicationDispatcherExt for WryDispatcher { fn set_always_on_top(&self, always_on_top: bool) -> crate::Result<()> { self .0 - .lock() - .unwrap() .set_always_on_top(always_on_top) .map_err(|_| crate::Error::FailedToSendMessage) } @@ -390,8 +353,6 @@ impl ApplicationDispatcherExt for WryDispatcher { fn set_width(&self, width: f64) -> crate::Result<()> { self .0 - .lock() - .unwrap() .set_width(width) .map_err(|_| crate::Error::FailedToSendMessage) } @@ -399,8 +360,6 @@ impl ApplicationDispatcherExt for WryDispatcher { fn set_height(&self, height: f64) -> crate::Result<()> { self .0 - .lock() - .unwrap() .set_height(height) .map_err(|_| crate::Error::FailedToSendMessage) } @@ -408,8 +367,6 @@ impl ApplicationDispatcherExt for WryDispatcher { fn resize(&self, width: f64, height: f64) -> crate::Result<()> { self .0 - .lock() - .unwrap() .resize(width, height) .map_err(|_| crate::Error::FailedToSendMessage) } @@ -417,8 +374,6 @@ impl ApplicationDispatcherExt for WryDispatcher { fn set_min_size(&self, min_width: f64, min_height: f64) -> crate::Result<()> { self .0 - .lock() - .unwrap() .set_min_size(min_width, min_height) .map_err(|_| crate::Error::FailedToSendMessage) } @@ -426,8 +381,6 @@ impl ApplicationDispatcherExt for WryDispatcher { fn set_max_size(&self, max_width: f64, max_height: f64) -> crate::Result<()> { self .0 - .lock() - .unwrap() .set_max_size(max_width, max_height) .map_err(|_| crate::Error::FailedToSendMessage) } @@ -435,8 +388,6 @@ impl ApplicationDispatcherExt for WryDispatcher { fn set_x(&self, x: f64) -> crate::Result<()> { self .0 - .lock() - .unwrap() .set_x(x) .map_err(|_| crate::Error::FailedToSendMessage) } @@ -444,8 +395,6 @@ impl ApplicationDispatcherExt for WryDispatcher { fn set_y(&self, y: f64) -> crate::Result<()> { self .0 - .lock() - .unwrap() .set_y(y) .map_err(|_| crate::Error::FailedToSendMessage) } @@ -453,8 +402,6 @@ impl ApplicationDispatcherExt for WryDispatcher { fn set_position(&self, x: f64, y: f64) -> crate::Result<()> { self .0 - .lock() - .unwrap() .set_position(x, y) .map_err(|_| crate::Error::FailedToSendMessage) } @@ -462,8 +409,6 @@ impl ApplicationDispatcherExt for WryDispatcher { fn set_fullscreen(&self, fullscreen: bool) -> crate::Result<()> { self .0 - .lock() - .unwrap() .set_fullscreen(fullscreen) .map_err(|_| crate::Error::FailedToSendMessage) } @@ -471,8 +416,6 @@ impl ApplicationDispatcherExt for WryDispatcher { fn set_icon(&self, icon: Icon) -> crate::Result<()> { self .0 - .lock() - .unwrap() .set_icon(icon.try_into()?) .map_err(|_| crate::Error::FailedToSendMessage) } @@ -480,8 +423,6 @@ impl ApplicationDispatcherExt for WryDispatcher { fn eval_script>(&self, script: S) -> crate::Result<()> { self .0 - .lock() - .unwrap() .evaluate_script(script) .map_err(|_| crate::Error::FailedToSendMessage) } @@ -513,14 +454,14 @@ impl ApplicationExt for WryApplication { custom_protocol: Option, file_drop_handler: Option, ) -> crate::Result { - let app_dispatcher = Arc::new(Mutex::new(self.inner.application_proxy())); + let app_dispatcher = self.inner.application_proxy(); let app_dispatcher_ = app_dispatcher.clone(); let wry_rpc_handler = Box::new( move |dispatcher: wry::WindowProxy, request: wry::RpcRequest| { if let Some(handler) = &rpc_handler { handler( - WryDispatcher(Arc::new(Mutex::new(dispatcher)), app_dispatcher_.clone()), + WryDispatcher(dispatcher, app_dispatcher_.clone()), request.into(), ); } @@ -548,10 +489,7 @@ impl ApplicationExt for WryApplication { Some(file_drop_handler), ) .map_err(|_| crate::Error::CreateWebview)?; - Ok(WryDispatcher( - Arc::new(Mutex::new(dispatcher)), - app_dispatcher, - )) + Ok(WryDispatcher(dispatcher, app_dispatcher)) } fn run(self) { diff --git a/tauri/src/app/webview_manager.rs b/tauri/src/app/webview_manager.rs index 77142b9e7..2ab30be4f 100644 --- a/tauri/src/app/webview_manager.rs +++ b/tauri/src/app/webview_manager.rs @@ -277,12 +277,8 @@ impl WebviewManager { ); self .application - .on_webview_created( - label.to_string(), - window_dispatcher.clone(), - webview_manager, - ) - .await; + .on_webview_created(label.to_string(), window_dispatcher.clone()); + crate::plugin::created(A::plugin_store(), &webview_manager).await; Ok(WebviewDispatcher::new(window_dispatcher, label)) }