From 70e12ae8a8f818582b172d69b9bd18a895ad04ec Mon Sep 17 00:00:00 2001 From: Kartikaya Gupta Date: Fri, 14 Dec 2018 10:19:32 -0500 Subject: [PATCH] Clear clip_node_instances on new frame builds. The clip node instances are rebuilt for each frame built from a given scene, but are not cleared until a new scene is built. So if a given scene builds many frames, the clip node instances just accumulate and eat up memory. Fixes #3416. --- webrender/src/clip.rs | 5 +++++ webrender/src/frame_builder.rs | 1 + 2 files changed, 6 insertions(+) diff --git a/webrender/src/clip.rs b/webrender/src/clip.rs index 25ff86c759..87c46a8cf9 100644 --- a/webrender/src/clip.rs +++ b/webrender/src/clip.rs @@ -696,6 +696,11 @@ impl ClipStore { }) } + pub fn clear_old_instances(&mut self) { + self.clip_node_instances.clear(); + } + + /// Walk the clip chain of a primitive, and calculate a minimal /// local clip rect for the primitive. #[allow(dead_code)] diff --git a/webrender/src/frame_builder.rs b/webrender/src/frame_builder.rs index 6b41bf7cb6..d5ac824024 100644 --- a/webrender/src/frame_builder.rs +++ b/webrender/src/frame_builder.rs @@ -407,6 +407,7 @@ impl FrameBuilder { scene_properties, Some(&mut transform_palette), ); + self.clip_store.clear_old_instances(); let mut render_tasks = RenderTaskTree::new(stamp.frame_id()); let mut surfaces = Vec::new();