From b7d45fe0968c433c01def72b3f74e2334bd1e4e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Wed, 15 Jun 2016 14:17:13 +0200 Subject: [PATCH] canvas: Deallocate WebRender images on canvas Fixes #11062 Depends on: #11744, https://github.com/servo/webrender_traits/pull/57, and https://github.com/servo/webrender/pull/292 --- components/canvas/canvas_paint_thread.rs | 8 ++++++++ components/canvas/webgl_paint_thread.rs | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/components/canvas/canvas_paint_thread.rs b/components/canvas/canvas_paint_thread.rs index 28a1e46e7b6d..23989a45f18d 100644 --- a/components/canvas/canvas_paint_thread.rs +++ b/components/canvas/canvas_paint_thread.rs @@ -706,6 +706,14 @@ impl<'a> CanvasPaintThread<'a> { } } +impl<'a> Drop for CanvasPaintThread<'a> { + fn drop(&mut self) { + if let Some(ref mut wr) = self.webrender_api { + wr.delete_image(self.webrender_image_key.unwrap()); + } + } +} + /// Used by drawImage to get rid of the extra pixels of the image data that /// won't be copied to the canvas /// image_data: Color pixel data of the image diff --git a/components/canvas/webgl_paint_thread.rs b/components/canvas/webgl_paint_thread.rs index 5c71df5cbe51..8b1ff8ff753d 100644 --- a/components/canvas/webgl_paint_thread.rs +++ b/components/canvas/webgl_paint_thread.rs @@ -195,3 +195,11 @@ impl WebGLPaintThread { } } } + +impl Drop for WebGLPaintThread { + fn drop(&mut self) { + if let WebGLPaintTaskData::Readback(_, Some((ref mut wr, image_key))) = self.data { + wr.delete_image(image_key); + } + } +}