mirror of
https://github.com/servo/servo.git
synced 2025-09-27 15:20:09 +01:00
Port StorageThreadMsg to GenericChannel (#38932)
This change includes the following additions to GenericChannel: - Add a GenericSend trait which is meant to replace the `IpcSend` trait over time, as channels are migrated. For the time being this means, that we often need to use `GenericSend::send()` to disambiguate from the `IpcSend::send` function, until all usages of `IpcSend` have been replaced. - Add an OpaqueSender impl for GenericSender - Add a profiled version of GenericChannel. The profiling is 1:1 the same as for the existing profiled IPC channel, namely that only the blocked time during `recv` is measured. Testing: No functional changes, covered by existing tests Part of #38912 --------- Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
This commit is contained in:
parent
c4dcd17214
commit
32aba08be7
12 changed files with 113 additions and 27 deletions
|
@ -14,6 +14,7 @@ use std::sync::{Arc, Mutex, RwLock, Weak};
|
|||
use std::thread;
|
||||
use std::time::Duration;
|
||||
|
||||
use base::generic_channel::GenericSender;
|
||||
use base::id::CookieStoreId;
|
||||
use cookie::Cookie;
|
||||
use crossbeam_channel::Sender;
|
||||
|
@ -112,7 +113,7 @@ pub fn new_resource_threads(
|
|||
protocols,
|
||||
);
|
||||
let idb: IpcSender<IndexedDBThreadMsg> = IndexedDBThreadFactory::new(config_dir.clone());
|
||||
let storage: IpcSender<StorageThreadMsg> =
|
||||
let storage: GenericSender<StorageThreadMsg> =
|
||||
StorageThreadFactory::new(config_dir, mem_profiler_chan);
|
||||
(
|
||||
ResourceThreads::new(public_core, storage.clone(), idb.clone()),
|
||||
|
|
|
@ -7,8 +7,9 @@ use std::collections::{BTreeMap, HashMap};
|
|||
use std::path::PathBuf;
|
||||
use std::thread;
|
||||
|
||||
use base::generic_channel::{self, GenericReceiver, GenericSender};
|
||||
use base::id::WebViewId;
|
||||
use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
|
||||
use ipc_channel::ipc::IpcSender;
|
||||
use malloc_size_of::MallocSizeOf;
|
||||
use net_traits::storage_thread::{StorageThreadMsg, StorageType};
|
||||
use profile_traits::mem::{
|
||||
|
@ -25,13 +26,13 @@ pub trait StorageThreadFactory {
|
|||
fn new(config_dir: Option<PathBuf>, mem_profiler_chan: MemProfilerChan) -> Self;
|
||||
}
|
||||
|
||||
impl StorageThreadFactory for IpcSender<StorageThreadMsg> {
|
||||
impl StorageThreadFactory for GenericSender<StorageThreadMsg> {
|
||||
/// Create a storage thread
|
||||
fn new(
|
||||
config_dir: Option<PathBuf>,
|
||||
mem_profiler_chan: MemProfilerChan,
|
||||
) -> IpcSender<StorageThreadMsg> {
|
||||
let (chan, port) = ipc::channel().unwrap();
|
||||
) -> GenericSender<StorageThreadMsg> {
|
||||
let (chan, port) = generic_channel::channel().unwrap();
|
||||
let chan2 = chan.clone();
|
||||
thread::Builder::new()
|
||||
.name("StorageManager".to_owned())
|
||||
|
@ -51,14 +52,14 @@ impl StorageThreadFactory for IpcSender<StorageThreadMsg> {
|
|||
type OriginEntry = (usize, BTreeMap<String, String>);
|
||||
|
||||
struct StorageManager {
|
||||
port: IpcReceiver<StorageThreadMsg>,
|
||||
port: GenericReceiver<StorageThreadMsg>,
|
||||
session_data: HashMap<WebViewId, HashMap<String, OriginEntry>>,
|
||||
local_data: HashMap<String, OriginEntry>,
|
||||
config_dir: Option<PathBuf>,
|
||||
}
|
||||
|
||||
impl StorageManager {
|
||||
fn new(port: IpcReceiver<StorageThreadMsg>, config_dir: Option<PathBuf>) -> StorageManager {
|
||||
fn new(port: GenericReceiver<StorageThreadMsg>, config_dir: Option<PathBuf>) -> StorageManager {
|
||||
let mut local_data = HashMap::new();
|
||||
if let Some(ref config_dir) = config_dir {
|
||||
resource_thread::read_json_from_file(&mut local_data, config_dir, "local_data.json");
|
||||
|
@ -224,7 +225,7 @@ impl StorageManager {
|
|||
|
||||
fn keys(
|
||||
&self,
|
||||
sender: IpcSender<Vec<String>>,
|
||||
sender: GenericSender<Vec<String>>,
|
||||
storage_type: StorageType,
|
||||
webview_id: WebViewId,
|
||||
url: ServoUrl,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue