diff options
author | Josh Matthews <josh@joshmatthews.net> | 2020-06-10 10:39:52 -0400 |
---|---|---|
committer | Josh Matthews <josh@joshmatthews.net> | 2020-06-10 10:40:28 -0400 |
commit | 55fee1fb356222b46cb989aa4dce7cacf65b9c6f (patch) | |
tree | 2d15a649681b55477e44dd4cf1a6d18b40fba5d0 | |
parent | 04fae2fdca97bac1e16635ac6eb1a3ef939ea0fa (diff) | |
download | servo-55fee1fb356222b46cb989aa4dce7cacf65b9c6f.tar.gz servo-55fee1fb356222b46cb989aa4dce7cacf65b9c6f.zip |
canvas: Don't panic if webrender isn't reachable.
-rw-r--r-- | components/canvas/canvas_data.rs | 5 | ||||
-rw-r--r-- | components/canvas/canvas_paint_thread.rs | 2 | ||||
-rw-r--r-- | components/servo/lib.rs | 4 |
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( |