diff options
Diffstat (limited to 'components/canvas/canvas_paint_thread.rs')
-rw-r--r-- | components/canvas/canvas_paint_thread.rs | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/components/canvas/canvas_paint_thread.rs b/components/canvas/canvas_paint_thread.rs index b3433e62b50..b7e21777001 100644 --- a/components/canvas/canvas_paint_thread.rs +++ b/components/canvas/canvas_paint_thread.rs @@ -585,28 +585,32 @@ impl<'a> CanvasPaintThread<'a> { }; let data = webrender_api::ImageData::Raw(Arc::new(element.into())); + let mut updates = webrender_api::ResourceUpdates::new(); + match self.image_key { Some(image_key) => { debug!("Updating image {:?}.", image_key); - self.webrender_api.update_image(image_key, - descriptor, - data, - None); + updates.update_image(image_key, + descriptor, + data, + None); } None => { self.image_key = Some(self.webrender_api.generate_image_key()); debug!("New image {:?}.", self.image_key); - self.webrender_api.add_image(self.image_key.unwrap(), - descriptor, - data, - None); + updates.add_image(self.image_key.unwrap(), + descriptor, + data, + None); } } if let Some(image_key) = mem::replace(&mut self.very_old_image_key, self.old_image_key.take()) { - self.webrender_api.delete_image(image_key); + updates.delete_image(image_key); } + self.webrender_api.update_resources(updates); + let data = CanvasImageData { image_key: self.image_key.unwrap(), }; @@ -764,12 +768,16 @@ impl<'a> CanvasPaintThread<'a> { impl<'a> Drop for CanvasPaintThread<'a> { fn drop(&mut self) { + let mut updates = webrender_api::ResourceUpdates::new(); + if let Some(image_key) = self.old_image_key.take() { - self.webrender_api.delete_image(image_key); + updates.delete_image(image_key); } if let Some(image_key) = self.very_old_image_key.take() { - self.webrender_api.delete_image(image_key); + updates.delete_image(image_key); } + + self.webrender_api.update_resources(updates); } } |