mirror of
https://github.com/servo/servo.git
synced 2025-08-06 22:15:33 +01:00
Use non-IPC webrender API over explicit IPC channels.
This commit is contained in:
parent
a922c497fa
commit
564c16d754
77 changed files with 494 additions and 360 deletions
|
@ -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" }
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue