aboutsummaryrefslogtreecommitdiffstats
path: root/components/net_traits
diff options
context:
space:
mode:
authorJosh Matthews <josh@joshmatthews.net>2019-11-25 17:18:04 -0500
committerJosh Matthews <josh@joshmatthews.net>2019-11-27 20:47:53 -0500
commit564c16d75499ae45b3945f487e49587c6fd662c7 (patch)
treef650d6eb383e95133a19baec32016a5b122203a3 /components/net_traits
parenta922c497fade0250123b86d7535838c9a8d3b0af (diff)
downloadservo-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.toml2
-rw-r--r--components/net_traits/image_cache.rs3
-rw-r--r--components/net_traits/lib.rs30
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);
+ }
+ }
+}