aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Matthews <josh@joshmatthews.net>2020-06-10 10:39:52 -0400
committerJosh Matthews <josh@joshmatthews.net>2020-06-10 10:40:28 -0400
commit55fee1fb356222b46cb989aa4dce7cacf65b9c6f (patch)
tree2d15a649681b55477e44dd4cf1a6d18b40fba5d0
parent04fae2fdca97bac1e16635ac6eb1a3ef939ea0fa (diff)
downloadservo-55fee1fb356222b46cb989aa4dce7cacf65b9c6f.tar.gz
servo-55fee1fb356222b46cb989aa4dce7cacf65b9c6f.zip
canvas: Don't panic if webrender isn't reachable.
-rw-r--r--components/canvas/canvas_data.rs5
-rw-r--r--components/canvas/canvas_paint_thread.rs2
-rw-r--r--components/servo/lib.rs4
3 files changed, 7 insertions, 4 deletions
diff --git a/components/canvas/canvas_data.rs b/components/canvas/canvas_data.rs
index 1a4d1ccfc98..33da592c235 100644
--- a/components/canvas/canvas_data.rs
+++ b/components/canvas/canvas_data.rs
@@ -982,7 +982,10 @@ impl<'a> CanvasData<'a> {
updates.push(ImageUpdate::Update(image_key, descriptor, data));
},
None => {
- let key = self.webrender_api.generate_key();
+ let key = match self.webrender_api.generate_key() {
+ Ok(key) => key,
+ Err(()) => return,
+ };
updates.push(ImageUpdate::Add(key, descriptor, data));
self.image_key = Some(key);
debug!("New image {:?}.", self.image_key);
diff --git a/components/canvas/canvas_paint_thread.rs b/components/canvas/canvas_paint_thread.rs
index 6832a5cddc8..3c6bbfb53a8 100644
--- a/components/canvas/canvas_paint_thread.rs
+++ b/components/canvas/canvas_paint_thread.rs
@@ -26,7 +26,7 @@ pub enum ImageUpdate {
}
pub trait WebrenderApi {
- fn generate_key(&self) -> webrender_api::ImageKey;
+ fn generate_key(&self) -> Result<webrender_api::ImageKey, ()>;
fn update_images(&self, updates: Vec<ImageUpdate>);
fn clone(&self) -> Box<dyn WebrenderApi>;
}
diff --git a/components/servo/lib.rs b/components/servo/lib.rs
index 25fdd2261b4..6dda30ed6ea 100644
--- a/components/servo/lib.rs
+++ b/components/servo/lib.rs
@@ -949,12 +949,12 @@ impl gfx_traits::WebrenderApi for FontCacheWR {
struct CanvasWebrenderApi(CompositorProxy);
impl canvas_paint_thread::WebrenderApi for CanvasWebrenderApi {
- fn generate_key(&self) -> webrender_api::ImageKey {
+ fn generate_key(&self) -> Result<webrender_api::ImageKey, ()> {
let (sender, receiver) = unbounded();
let _ = self.0.send(Msg::Webrender(WebrenderMsg::Canvas(
WebrenderCanvasMsg::GenerateKey(sender),
)));
- receiver.recv().unwrap()
+ receiver.recv().map_err(|_| ())
}
fn update_images(&self, updates: Vec<canvas_paint_thread::ImageUpdate>) {
let _ = self.0.send(Msg::Webrender(WebrenderMsg::Canvas(