From 195bb9edcbc76546b9015abedc0c05345e42a02b Mon Sep 17 00:00:00 2001 From: "Nathan.fooo" <86001920+appflowy@users.noreply.github.com> Date: Sun, 30 Jan 2022 09:10:26 +0800 Subject: [PATCH] Revert "feat: use once_cell for perf." --- frontend/rust-lib/dart-ffi/Cargo.toml | 3 ++- frontend/rust-lib/dart-ffi/src/lib.rs | 35 ++++++++++----------------- 2 files changed, 15 insertions(+), 23 deletions(-) diff --git a/frontend/rust-lib/dart-ffi/Cargo.toml b/frontend/rust-lib/dart-ffi/Cargo.toml index 1db8a03325..f2870885a0 100644 --- a/frontend/rust-lib/dart-ffi/Cargo.toml +++ b/frontend/rust-lib/dart-ffi/Cargo.toml @@ -16,12 +16,13 @@ allo-isolate = {version = "^0.1", features = ["catch-unwind",]} byteorder = {version = "1.3.4"} ffi-support = {version = "0.4.2"} protobuf = {version = "2.20.0"} +lazy_static = {version = "1.4.0"} tokio = { version = "1", features = ["rt", "rt-multi-thread"] } log = "0.4.14" serde = { version = "1.0", features = ["derive"] } serde_json = {version = "1.0"} bytes = { version = "1.0" } -once_cell = "1" +parking_lot = "0.11" lib-dispatch = {path = "../lib-dispatch" } flowy-sdk = {path = "../flowy-sdk"} diff --git a/frontend/rust-lib/dart-ffi/src/lib.rs b/frontend/rust-lib/dart-ffi/src/lib.rs index 36cbe64119..4a0cd5a802 100644 --- a/frontend/rust-lib/dart-ffi/src/lib.rs +++ b/frontend/rust-lib/dart-ffi/src/lib.rs @@ -9,10 +9,18 @@ use crate::{ model::{FFIRequest, FFIResponse}, }; use flowy_sdk::*; +use lazy_static::lazy_static; use lib_dispatch::prelude::*; -use std::{ffi::CStr, os::raw::c_char}; +use parking_lot::RwLock; +use std::{ffi::CStr, os::raw::c_char, sync::Arc}; -const FLOWY_SDK: once_cell::sync::OnceCell = once_cell::sync::OnceCell::new(); +lazy_static! { + static ref FLOWY_SDK: RwLock>> = RwLock::new(None); +} + +fn dispatch() -> Arc { + FLOWY_SDK.read().as_ref().unwrap().dispatcher() +} #[no_mangle] pub extern "C" fn init_sdk(path: *mut c_char) -> i64 { @@ -21,7 +29,7 @@ pub extern "C" fn init_sdk(path: *mut c_char) -> i64 { let server_config = get_client_server_configuration().unwrap(); let config = FlowySDKConfig::new(path, server_config, "appflowy").log_filter("debug"); - FLOWY_SDK.get_or_init(|| FlowySDK::new(config)); + *FLOWY_SDK.write() = Some(Arc::new(FlowySDK::new(config))); 0 } @@ -36,15 +44,7 @@ pub extern "C" fn async_event(port: i64, input: *const u8, len: usize) { port ); - let dispatcher = match FLOWY_SDK.get() { - None => { - log::error!("sdk not init yet."); - - return; - } - Some(e) => e.dispatcher.clone(), - }; - let _ = EventDispatcher::async_send_with_callback(dispatcher, request, move |resp: EventResponse| { + let _ = EventDispatcher::async_send_with_callback(dispatch(), request, move |resp: EventResponse| { log::trace!("[FFI]: Post data to dart through {} port", port); Box::pin(post_to_flutter(resp, port)) }); @@ -54,16 +54,7 @@ pub extern "C" fn async_event(port: i64, input: *const u8, len: usize) { pub extern "C" fn sync_event(input: *const u8, len: usize) -> *const u8 { let request: ModuleRequest = FFIRequest::from_u8_pointer(input, len).into(); log::trace!("[FFI]: {} Sync Event: {:?}", &request.id, &request.event,); - - let dispatcher = match FLOWY_SDK.get() { - None => { - log::error!("sdk not init yet."); - - return forget_rust(vec![]); - } - Some(e) => e.dispatcher.clone(), - }; - let _response = EventDispatcher::sync_send(dispatcher, request); + let _response = EventDispatcher::sync_send(dispatch(), request); // FFIResponse { } let response_bytes = vec![];