Bug 1642629 - Recycle dirty_region_stack in FrameBuilder. r=gw

Differential Revision: https://phabricator.services.mozilla.com/D79858
This commit is contained in:
Nicolas Silva 2020-06-24 12:40:41 +00:00
parent bbc46b7620
commit 9cac8b72d6

View File

@ -30,7 +30,7 @@ use crate::resource_cache::{ResourceCache};
use crate::scene::{BuiltScene, SceneProperties};
use crate::segment::SegmentBuilder;
use std::{f32, mem};
use crate::util::MaxRect;
use crate::util::{MaxRect, VecHelper};
use crate::visibility::{update_primitive_visibility, FrameVisibilityState, FrameVisibilityContext};
use crate::visibility::{PrimitiveVisibilityMask};
@ -130,6 +130,8 @@ pub struct FrameBuilder {
#[cfg_attr(any(feature = "capture", feature = "replay"), serde(skip))]
surfaces: Vec<SurfaceInfo>,
#[cfg_attr(any(feature = "capture", feature = "replay"), serde(skip))]
dirty_region_stack: Vec<DirtyRegion>,
#[cfg_attr(any(feature = "capture", feature = "replay"), serde(skip))]
picture_update_buffers: PictureUpdateStateBuffers,
}
@ -205,6 +207,7 @@ impl FrameBuilder {
pending_retained_tiles: RetainedTiles::new(),
globals: FrameGlobalResources::empty(),
surfaces: Vec::new(),
dirty_region_stack: Vec::new(),
picture_update_buffers: PictureUpdateStateBuffers::default(),
}
}
@ -402,7 +405,7 @@ impl FrameBuilder {
transforms: transform_palette,
segment_builder: SegmentBuilder::new(),
surfaces: &mut self.surfaces,
dirty_region_stack: Vec::new(),
dirty_region_stack: self.dirty_region_stack.take().cleared(),
composite_state,
};
@ -471,6 +474,8 @@ impl FrameBuilder {
frame_state.pop_dirty_region();
self.dirty_region_stack = frame_state.dirty_region_stack.take();
{
profile_marker!("BlockOnResources");