Use non-IPC webrender API over explicit IPC channels.

This commit is contained in:
Josh Matthews 2019-11-25 17:18:04 -05:00
parent a922c497fa
commit 564c16d754
77 changed files with 494 additions and 360 deletions

View file

@ -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);
}
}
}