From e5e52ca2471eb0cf0a8bc5ffdd1e25a05324cee5 Mon Sep 17 00:00:00 2001 From: Nicolas Silva Date: Mon, 31 May 2021 08:38:27 +0000 Subject: [PATCH] Bug 1695016 - Go back to 32 bits rendder task ids. r=gw This is to work around fuzzers repeatedly finding test cases with 2^16 clip masks or other type of render tasks. Not something we would see in real pages nor something that we would handle well at all even with 32 bits ids but at least it won't get in the way of fuzzing. Differential Revision: https://phabricator.services.mozilla.com/D116214 --- gfx/wr/webrender/src/prim_store/borders.rs | 2 +- gfx/wr/webrender/src/prim_store/gradient/mod.rs | 6 +++--- gfx/wr/webrender/src/prim_store/image.rs | 2 +- gfx/wr/webrender/src/render_task_graph.rs | 12 ++++++------ 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/gfx/wr/webrender/src/prim_store/borders.rs b/gfx/wr/webrender/src/prim_store/borders.rs index 4be7d72b46d4..183c7b9d907d 100644 --- a/gfx/wr/webrender/src/prim_store/borders.rs +++ b/gfx/wr/webrender/src/prim_store/borders.rs @@ -383,6 +383,6 @@ fn test_struct_sizes() { assert_eq!(mem::size_of::(), 216, "NormalBorderTemplate size changed"); assert_eq!(mem::size_of::(), 104, "NormalBorderKey size changed"); assert_eq!(mem::size_of::(), 84, "ImageBorder size changed"); - assert_eq!(mem::size_of::(), 96, "ImageBorderTemplate size changed"); + assert_eq!(mem::size_of::(), 104, "ImageBorderTemplate size changed"); assert_eq!(mem::size_of::(), 104, "ImageBorderKey size changed"); } diff --git a/gfx/wr/webrender/src/prim_store/gradient/mod.rs b/gfx/wr/webrender/src/prim_store/gradient/mod.rs index 3fea0bb543fc..be501bfd4721 100644 --- a/gfx/wr/webrender/src/prim_store/gradient/mod.rs +++ b/gfx/wr/webrender/src/prim_store/gradient/mod.rs @@ -375,14 +375,14 @@ fn test_struct_sizes() { // (b) You made a structure larger. This is not necessarily a problem, but should only // be done with care, and after checking if talos performance regresses badly. assert_eq!(mem::size_of::(), 72, "LinearGradient size changed"); - assert_eq!(mem::size_of::(), 144, "LinearGradientTemplate size changed"); + assert_eq!(mem::size_of::(), 152, "LinearGradientTemplate size changed"); assert_eq!(mem::size_of::(), 88, "LinearGradientKey size changed"); assert_eq!(mem::size_of::(), 72, "RadialGradient size changed"); - assert_eq!(mem::size_of::(), 144, "RadialGradientTemplate size changed"); + assert_eq!(mem::size_of::(), 152, "RadialGradientTemplate size changed"); assert_eq!(mem::size_of::(), 96, "RadialGradientKey size changed"); assert_eq!(mem::size_of::(), 72, "ConicGradient size changed"); - assert_eq!(mem::size_of::(), 144, "ConicGradientTemplate size changed"); + assert_eq!(mem::size_of::(), 152, "ConicGradientTemplate size changed"); assert_eq!(mem::size_of::(), 96, "ConicGradientKey size changed"); } diff --git a/gfx/wr/webrender/src/prim_store/image.rs b/gfx/wr/webrender/src/prim_store/image.rs index 3e4ed4a896fc..451e01236b71 100644 --- a/gfx/wr/webrender/src/prim_store/image.rs +++ b/gfx/wr/webrender/src/prim_store/image.rs @@ -676,6 +676,6 @@ fn test_struct_sizes() { assert_eq!(mem::size_of::(), 72, "ImageTemplate size changed"); assert_eq!(mem::size_of::(), 52, "ImageKey size changed"); assert_eq!(mem::size_of::(), 32, "YuvImage size changed"); - assert_eq!(mem::size_of::(), 72, "YuvImageTemplate size changed"); + assert_eq!(mem::size_of::(), 84, "YuvImageTemplate size changed"); assert_eq!(mem::size_of::(), 52, "YuvImageKey size changed"); } diff --git a/gfx/wr/webrender/src/render_task_graph.rs b/gfx/wr/webrender/src/render_task_graph.rs index aa089a15d3a3..c76c925a4072 100644 --- a/gfx/wr/webrender/src/render_task_graph.rs +++ b/gfx/wr/webrender/src/render_task_graph.rs @@ -51,7 +51,7 @@ impl<'l> RenderTaskAllocation<'l> { #[inline(always)] pub fn init(self, value: RenderTask) -> RenderTaskId { RenderTaskId { - index: self.alloc.init(value) as u16, + index: self.alloc.init(value) as u32, } } } @@ -61,12 +61,12 @@ impl<'l> RenderTaskAllocation<'l> { #[cfg_attr(feature = "capture", derive(Serialize))] #[cfg_attr(feature = "replay", derive(Deserialize))] pub struct RenderTaskId { - pub index: u16, + pub index: u32, } impl RenderTaskId { pub const INVALID: RenderTaskId = RenderTaskId { - index: u16::MAX, + index: u32::MAX, }; } @@ -264,7 +264,7 @@ impl RenderTaskGraphBuilder { pub fn add(&mut self) -> RenderTaskAllocation { // Assume every task is a root to start with self.roots.insert( - RenderTaskId { index: self.tasks.len() as u16 } + RenderTaskId { index: self.tasks.len() as u32 } ); RenderTaskAllocation { @@ -385,7 +385,7 @@ impl RenderTaskGraphBuilder { // Determine which pass each task can be freed on, which depends on which is // the last task that has this as an input. for i in 0 .. graph.tasks.len() { - let task_id = RenderTaskId { index: i as u16 }; + let task_id = RenderTaskId { index: i as u32 }; assign_free_pass( task_id, &mut self.child_task_buffer, @@ -405,7 +405,7 @@ impl RenderTaskGraphBuilder { // Assign tasks to each pass based on their `render_on` attribute for (index, task) in graph.tasks.iter().enumerate() { if task.kind.is_a_rendering_operation() { - let id = RenderTaskId { index: index as u16 }; + let id = RenderTaskId { index: index as u32 }; graph.passes[task.render_on.0].task_ids.push(id); } }