diff options
author | Josh Matthews <josh@joshmatthews.net> | 2019-11-25 17:18:04 -0500 |
---|---|---|
committer | Josh Matthews <josh@joshmatthews.net> | 2019-11-27 20:47:53 -0500 |
commit | 564c16d75499ae45b3945f487e49587c6fd662c7 (patch) | |
tree | f650d6eb383e95133a19baec32016a5b122203a3 /components/net_traits | |
parent | a922c497fade0250123b86d7535838c9a8d3b0af (diff) | |
download | servo-564c16d75499ae45b3945f487e49587c6fd662c7.tar.gz servo-564c16d75499ae45b3945f487e49587c6fd662c7.zip |
Use non-IPC webrender API over explicit IPC channels.
Diffstat (limited to 'components/net_traits')
-rw-r--r-- | components/net_traits/Cargo.toml | 2 | ||||
-rw-r--r-- | components/net_traits/image_cache.rs | 3 | ||||
-rw-r--r-- | components/net_traits/lib.rs | 30 |
3 files changed, 33 insertions, 2 deletions
diff --git a/components/net_traits/Cargo.toml b/components/net_traits/Cargo.toml index 5a75b523165..9fcd39fd5e5 100644 --- a/components/net_traits/Cargo.toml +++ b/components/net_traits/Cargo.toml @@ -37,7 +37,7 @@ servo_url = {path = "../url"} time = "0.1" url = "2.0" uuid = {version = "0.8", features = ["v4", "serde"]} -webrender_api = {git = "https://github.com/servo/webrender", features = ["ipc"]} +webrender_api = {git = "https://github.com/servo/webrender"} [dev-dependencies] std_test_override = { path = "../std_test_override" } diff --git a/components/net_traits/image_cache.rs b/components/net_traits/image_cache.rs index 203941227d0..e640ca5b292 100644 --- a/components/net_traits/image_cache.rs +++ b/components/net_traits/image_cache.rs @@ -5,6 +5,7 @@ use crate::image::base::{Image, ImageMetadata}; use crate::request::CorsSettings; use crate::FetchResponseMsg; +use crate::WebrenderIpcSender; use ipc_channel::ipc::IpcSender; use servo_url::{ImmutableOrigin, ServoUrl}; use std::sync::Arc; @@ -101,7 +102,7 @@ pub enum UsePlaceholder { // ====================================================================== pub trait ImageCache: Sync + Send { - fn new(webrender_api: webrender_api::RenderApi) -> Self + fn new(webrender_api: WebrenderIpcSender) -> Self where Self: Sized; diff --git a/components/net_traits/lib.rs b/components/net_traits/lib.rs index cdba4f2066d..a25a804ce01 100644 --- a/components/net_traits/lib.rs +++ b/components/net_traits/lib.rs @@ -33,6 +33,7 @@ use msg::constellation_msg::HistoryStateId; use servo_url::ServoUrl; use std::error::Error; use time::precise_time_ns; +use webrender_api::ImageKey; pub mod blob_url_store; pub mod filemanager_thread; @@ -755,3 +756,32 @@ pub fn http_percent_encode(bytes: &[u8]) -> String { percent_encoding::percent_encode(bytes, HTTP_VALUE).to_string() } + +#[derive(Deserialize, Serialize)] +pub enum WebrenderImageMsg { + UpdateResources(Vec<webrender_api::ResourceUpdate>), + GenerateImageKey(IpcSender<ImageKey>), +} + +#[derive(Clone, Deserialize, Serialize)] +pub struct WebrenderIpcSender(IpcSender<WebrenderImageMsg>); + +impl WebrenderIpcSender { + pub fn new(sender: IpcSender<WebrenderImageMsg>) -> Self { + Self(sender) + } + + pub fn generate_image_key(&self) -> ImageKey { + let (sender, receiver) = ipc::channel().unwrap(); + self.0 + .send(WebrenderImageMsg::GenerateImageKey(sender)) + .expect("error sending image key generation"); + receiver.recv().expect("error receiving image key result") + } + + pub fn update_resources(&self, updates: Vec<webrender_api::ResourceUpdate>) { + if let Err(e) = self.0.send(WebrenderImageMsg::UpdateResources(updates)) { + warn!("Error sending image update: {}", e); + } + } +} |