From 55fee1fb356222b46cb989aa4dce7cacf65b9c6f Mon Sep 17 00:00:00 2001 From: Josh Matthews Date: Wed, 10 Jun 2020 10:39:52 -0400 Subject: [PATCH] canvas: Don't panic if webrender isn't reachable. --- components/canvas/canvas_data.rs | 5 ++++- components/canvas/canvas_paint_thread.rs | 2 +- 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; fn update_images(&self, updates: Vec); fn clone(&self) -> Box; } 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 { 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) { let _ = self.0.send(Msg::Webrender(WebrenderMsg::Canvas(