From 7c6c7c1a0203ea4ce3bfcd6b5a1c517281957f79 Mon Sep 17 00:00:00 2001 From: Jim Blandy Date: Thu, 9 Apr 2020 10:03:42 +0000 Subject: [PATCH] Bug 1628130: Delete webrender::prim_store::PrimitiveSceneData. r=gw Most `Internable` implementations give `PrimitiveSceneData` as their `InternData` associated type, the type of data associated with the handle in the scene builder thread. However, nothing in the scene builder code, or anywhere in WebRender, actually uses the contents of `PrimitiveSceneData`, so it can be replaced with `()` with no effect on the code other than memory savings. Differential Revision: https://phabricator.services.mozilla.com/D70121 [ghsync] From https://hg.mozilla.org/mozilla-central/rev/6473560b64001edfccf30dacd60db31ad24df3e7 --- webrender/src/prim_store/backdrop.rs | 4 ++-- webrender/src/prim_store/borders.rs | 6 ++--- webrender/src/prim_store/gradient.rs | 8 +++---- webrender/src/prim_store/image.rs | 6 ++--- webrender/src/prim_store/line_dec.rs | 4 ++-- webrender/src/prim_store/mod.rs | 15 ++----------- webrender/src/prim_store/picture.rs | 4 ++-- webrender/src/prim_store/text_run.rs | 4 ++-- webrender/src/scene_building.rs | 33 +++++----------------------- 9 files changed, 25 insertions(+), 59 deletions(-) diff --git a/webrender/src/prim_store/backdrop.rs b/webrender/src/prim_store/backdrop.rs index 07fa3ee700..b3f13f2af6 100644 --- a/webrender/src/prim_store/backdrop.rs +++ b/webrender/src/prim_store/backdrop.rs @@ -9,7 +9,7 @@ use crate::intern::{Internable, InternDebug, Handle as InternHandle}; use crate::internal_types::LayoutPrimitiveInfo; use crate::prim_store::{ InternablePrimitive, PictureIndex, PrimitiveInstanceKind, PrimKey, PrimKeyCommonData, PrimTemplate, - PrimTemplateCommonData, PrimitiveStore, PrimitiveSceneData, RectangleKey, + PrimTemplateCommonData, PrimitiveStore, RectangleKey, }; #[cfg_attr(feature = "capture", derive(Serialize))] @@ -78,7 +78,7 @@ pub type BackdropDataHandle = InternHandle; impl Internable for Backdrop { type Key = BackdropKey; type StoreData = BackdropTemplate; - type InternData = PrimitiveSceneData; + type InternData = (); } impl InternablePrimitive for Backdrop { diff --git a/webrender/src/prim_store/borders.rs b/webrender/src/prim_store/borders.rs index d676dec6f2..6bb5ef19dd 100644 --- a/webrender/src/prim_store/borders.rs +++ b/webrender/src/prim_store/borders.rs @@ -14,7 +14,7 @@ use crate::internal_types::LayoutPrimitiveInfo; use crate::prim_store::{ BorderSegmentInfo, BrushSegment, NinePatchDescriptor, PrimKey, PrimKeyCommonData, PrimTemplate, PrimTemplateCommonData, - PrimitiveInstanceKind, PrimitiveOpacity, PrimitiveSceneData, + PrimitiveInstanceKind, PrimitiveOpacity, PrimitiveStore, InternablePrimitive, }; use crate::resource_cache::{ImageRequest, ResourceCache}; @@ -146,7 +146,7 @@ pub type NormalBorderDataHandle = intern::Handle; impl intern::Internable for NormalBorderPrim { type Key = NormalBorderKey; type StoreData = NormalBorderTemplate; - type InternData = PrimitiveSceneData; + type InternData = (); } impl InternablePrimitive for NormalBorderPrim { @@ -321,7 +321,7 @@ pub type ImageBorderDataHandle = intern::Handle; impl intern::Internable for ImageBorder { type Key = ImageBorderKey; type StoreData = ImageBorderTemplate; - type InternData = PrimitiveSceneData; + type InternData = (); } impl InternablePrimitive for ImageBorder { diff --git a/webrender/src/prim_store/gradient.rs b/webrender/src/prim_store/gradient.rs index 9e2c27be55..0d935a7e28 100644 --- a/webrender/src/prim_store/gradient.rs +++ b/webrender/src/prim_store/gradient.rs @@ -14,7 +14,7 @@ use crate::gpu_cache::{GpuCacheHandle, GpuDataRequest}; use crate::intern::{Internable, InternDebug, Handle as InternHandle}; use crate::internal_types::LayoutPrimitiveInfo; use crate::prim_store::{BrushSegment, CachedGradientSegment, GradientTileRange, VectorKey}; -use crate::prim_store::{PrimitiveInstanceKind, PrimitiveOpacity, PrimitiveSceneData}; +use crate::prim_store::{PrimitiveInstanceKind, PrimitiveOpacity}; use crate::prim_store::{PrimKeyCommonData, PrimTemplateCommonData, PrimitiveStore}; use crate::prim_store::{NinePatchDescriptor, PointKey, SizeKey, InternablePrimitive}; use std::{hash, ops::{Deref, DerefMut}}; @@ -282,7 +282,7 @@ pub struct LinearGradient { impl Internable for LinearGradient { type Key = LinearGradientKey; type StoreData = LinearGradientTemplate; - type InternData = PrimitiveSceneData; + type InternData = (); } impl InternablePrimitive for LinearGradient { @@ -512,7 +512,7 @@ pub struct RadialGradient { impl Internable for RadialGradient { type Key = RadialGradientKey; type StoreData = RadialGradientTemplate; - type InternData = PrimitiveSceneData; + type InternData = (); } impl InternablePrimitive for RadialGradient { @@ -732,7 +732,7 @@ pub struct ConicGradient { impl Internable for ConicGradient { type Key = ConicGradientKey; type StoreData = ConicGradientTemplate; - type InternData = PrimitiveSceneData; + type InternData = (); } impl InternablePrimitive for ConicGradient { diff --git a/webrender/src/prim_store/image.rs b/webrender/src/prim_store/image.rs index 2df32455ef..cf701207d1 100644 --- a/webrender/src/prim_store/image.rs +++ b/webrender/src/prim_store/image.rs @@ -15,7 +15,7 @@ use crate::intern::{Internable, InternDebug, Handle as InternHandle}; use crate::internal_types::{LayoutPrimitiveInfo}; use crate::prim_store::{ EdgeAaSegmentMask, OpacityBindingIndex, PrimitiveInstanceKind, - PrimitiveOpacity, PrimitiveSceneData, PrimKey, PrimKeyCommonData, + PrimitiveOpacity, PrimKey, PrimKeyCommonData, PrimTemplate, PrimTemplateCommonData, PrimitiveStore, SegmentInstanceIndex, SizeKey, InternablePrimitive, }; @@ -307,7 +307,7 @@ pub type ImageDataHandle = InternHandle; impl Internable for Image { type Key = ImageKey; type StoreData = ImageTemplate; - type InternData = PrimitiveSceneData; + type InternData = (); } impl InternablePrimitive for Image { @@ -489,7 +489,7 @@ pub type YuvImageDataHandle = InternHandle; impl Internable for YuvImage { type Key = YuvImageKey; type StoreData = YuvImageTemplate; - type InternData = PrimitiveSceneData; + type InternData = (); } impl InternablePrimitive for YuvImage { diff --git a/webrender/src/prim_store/line_dec.rs b/webrender/src/prim_store/line_dec.rs index 4102409aef..5166cb375e 100644 --- a/webrender/src/prim_store/line_dec.rs +++ b/webrender/src/prim_store/line_dec.rs @@ -14,7 +14,7 @@ use crate::intern; use crate::internal_types::LayoutPrimitiveInfo; use crate::prim_store::{ PrimKey, PrimKeyCommonData, PrimTemplate, PrimTemplateCommonData, - InternablePrimitive, PrimitiveSceneData, PrimitiveStore, + InternablePrimitive, PrimitiveStore, }; use crate::prim_store::PrimitiveInstanceKind; @@ -127,7 +127,7 @@ pub type LineDecorationDataHandle = intern::Handle; impl intern::Internable for LineDecoration { type Key = LineDecorationKey; type StoreData = LineDecorationTemplate; - type InternData = PrimitiveSceneData; + type InternData = (); } impl InternablePrimitive for LineDecoration { diff --git a/webrender/src/prim_store/mod.rs b/webrender/src/prim_store/mod.rs index 82d17aa441..12ff39c6b9 100644 --- a/webrender/src/prim_store/mod.rs +++ b/webrender/src/prim_store/mod.rs @@ -406,17 +406,6 @@ impl GpuCacheAddress { } } -/// The information about an interned primitive that -/// is stored and available in the scene builder -/// thread. -#[cfg_attr(feature = "capture", derive(Serialize))] -#[cfg_attr(feature = "replay", derive(Deserialize))] -#[derive(MallocSizeOf)] -pub struct PrimitiveSceneData { - pub prim_size: LayoutSize, - pub flags: PrimitiveFlags, -} - #[cfg_attr(feature = "capture", derive(Serialize))] #[cfg_attr(feature = "replay", derive(Deserialize))] #[derive(Copy, Debug, Clone, MallocSizeOf, PartialEq)] @@ -871,7 +860,7 @@ type PrimitiveDataHandle = intern::Handle; impl intern::Internable for PrimitiveKeyKind { type Key = PrimitiveKey; type StoreData = PrimitiveTemplate; - type InternData = PrimitiveSceneData; + type InternData = (); } impl InternablePrimitive for PrimitiveKeyKind { @@ -4467,7 +4456,7 @@ fn update_opacity_binding( /// Trait for primitives that are directly internable. /// see SceneBuilder::add_primitive

-pub trait InternablePrimitive: intern::Internable + Sized { +pub trait InternablePrimitive: intern::Internable + Sized { /// Build a new key from self with `info`. fn into_key( self, diff --git a/webrender/src/prim_store/picture.rs b/webrender/src/prim_store/picture.rs index 0d85187778..3ddf9c56aa 100644 --- a/webrender/src/prim_store/picture.rs +++ b/webrender/src/prim_store/picture.rs @@ -15,7 +15,7 @@ use crate::internal_types::{LayoutPrimitiveInfo, Filter}; use crate::picture::PictureCompositeMode; use crate::prim_store::{ PrimKey, PrimKeyCommonData, PrimTemplate, PrimTemplateCommonData, - PrimitiveInstanceKind, PrimitiveSceneData, PrimitiveStore, VectorKey, + PrimitiveInstanceKind, PrimitiveStore, VectorKey, InternablePrimitive, }; @@ -279,7 +279,7 @@ pub type PictureDataHandle = InternHandle; impl Internable for Picture { type Key = PictureKey; type StoreData = PictureTemplate; - type InternData = PrimitiveSceneData; + type InternData = (); } impl InternablePrimitive for Picture { diff --git a/webrender/src/prim_store/text_run.rs b/webrender/src/prim_store/text_run.rs index be0817291e..b4d08fee16 100644 --- a/webrender/src/prim_store/text_run.rs +++ b/webrender/src/prim_store/text_run.rs @@ -11,7 +11,7 @@ use crate::gpu_cache::GpuCache; use crate::intern; use crate::internal_types::LayoutPrimitiveInfo; use crate::picture::{SubpixelMode, SurfaceInfo}; -use crate::prim_store::{PrimitiveOpacity, PrimitiveSceneData, PrimitiveScratchBuffer}; +use crate::prim_store::{PrimitiveOpacity, PrimitiveScratchBuffer}; use crate::prim_store::{PrimitiveStore, PrimKeyCommonData, PrimTemplateCommonData}; use crate::render_task_graph::RenderTaskGraph; use crate::renderer::{MAX_VERTEX_TEXTURE_WIDTH}; @@ -151,7 +151,7 @@ pub struct TextRun { impl intern::Internable for TextRun { type Key = TextRunKey; type StoreData = TextRunTemplate; - type InternData = PrimitiveSceneData; + type InternData = (); } impl InternablePrimitive for TextRun { diff --git a/webrender/src/scene_building.rs b/webrender/src/scene_building.rs index 37c407a23d..a7c3faa41e 100644 --- a/webrender/src/scene_building.rs +++ b/webrender/src/scene_building.rs @@ -23,7 +23,7 @@ use crate::intern::Interner; use crate::internal_types::{FastHashMap, FastHashSet, LayoutPrimitiveInfo, Filter}; use crate::picture::{Picture3DContext, PictureCompositeMode, PicturePrimitive, PictureOptions}; use crate::picture::{BlitReason, OrderedPictureChild, PrimitiveList, TileCacheInstance, ClusterFlags}; -use crate::prim_store::{PrimitiveInstance, PrimitiveSceneData}; +use crate::prim_store::PrimitiveInstance; use crate::prim_store::{PrimitiveInstanceKind, NinePatchDescriptor, PrimitiveStore}; use crate::prim_store::{ScrollNodeAndClipChain, PictureIndex}; use crate::prim_store::{InternablePrimitive, SegmentInstanceIndex}; @@ -1589,12 +1589,7 @@ impl<'a> SceneBuilder<'a> { let current_offset = self.current_offset(spatial_node_index); let interner = self.interners.as_mut(); let prim_data_handle = interner - .intern(&prim_key, || { - PrimitiveSceneData { - prim_size: info.rect.size, - flags: info.flags, - } - }); + .intern(&prim_key, || ()); let instance_kind = P::make_instance_kind( prim_key, @@ -2603,13 +2598,7 @@ impl<'a> SceneBuilder<'a> { let shadow_prim_data_handle = self.interners .picture - .intern(&shadow_pic_key, || { - PrimitiveSceneData { - prim_size: LayoutSize::zero(), - flags: PrimitiveFlags::IS_BACKFACE_VISIBLE, - } - } - ); + .intern(&shadow_pic_key, || ()); let shadow_prim_instance = PrimitiveInstance::new( LayoutPoint::zero(), @@ -4004,13 +3993,7 @@ fn create_prim_instance( let data_handle = interners .picture - .intern(&pic_key, || { - PrimitiveSceneData { - prim_size: LayoutSize::zero(), - flags, - } - } - ); + .intern(&pic_key, || ()); PrimitiveInstance::new( LayoutPoint::zero(), @@ -4138,13 +4121,7 @@ fn create_tile_cache( let pic_data_handle = interners .picture - .intern(&pic_key, || { - PrimitiveSceneData { - prim_size: LayoutSize::zero(), - flags: PrimitiveFlags::IS_BACKFACE_VISIBLE, - } - } - ); + .intern(&pic_key, || ()); // Build a clip-chain for the tile cache, that contains any of the shared clips // we will apply when drawing the tiles. In all cases provided by Gecko, these