Bug 1636616 - Fix invalidations occuring when display port changes. r=Bert
authorGlenn Watson <git@intuitionlibrary.com>
Mon, 11 May 2020 23:05:42 +0000
changeset 529270 3dfc4d905e23be7412a11024cc5788690ac0e1c1
parent 529269 0db4052181f50970fc18383df98eeb40ab7ce684
child 529271 de6d1c1375eebf27d9e52aafba5b4138581e35c0
push id37406
push userdluca@mozilla.com
push dateTue, 12 May 2020 09:34:21 +0000
treeherdermozilla-central@1706d4d54ec6 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersBert
bugs1636616
milestone78.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1636616 - Fix invalidations occuring when display port changes. r=Bert On some pages, primitives other than rectangles may have their clip rect affected by the display port, which was causing incorrect invalidations and extra rasterization work. Remove clip_by_tile check, and clamp clip rect to tile boundaries for all primitive types. Also switch to a more efficient min/max representation of the clip rect for primitive dependencies. Differential Revision: https://phabricator.services.mozilla.com/D74582
gfx/wr/tileview/src/main.rs
gfx/wr/webrender/src/picture.rs
gfx/wr/webrender_api/src/units.rs
gfx/wr/wrench/reftests/transforms/prim-suite.png
--- a/gfx/wr/tileview/src/main.rs
+++ b/gfx/wr/tileview/src/main.rs
@@ -68,17 +68,17 @@ struct SvgSettings {
 }
 
 fn tile_node_to_svg(node: &TileNode,
                     transform: &Transform3D<f32, PicturePixel, WorldPixel>,
                     svg_settings: &SvgSettings) -> String
 {
     match &node.kind {
         TileNodeKind::Leaf { .. } => {
-            let rect_world = transform.transform_rect(&node.rect).unwrap();
+            let rect_world = transform.transform_rect(&node.rect.to_rect()).unwrap();
             format!("<rect x=\"{:.2}\" y=\"{:.2}\" width=\"{:.2}\" height=\"{:.2}\" />\n",
                     rect_world.origin.x    * svg_settings.scale + svg_settings.x,
                     rect_world.origin.y    * svg_settings.scale + svg_settings.y,
                     rect_world.size.width  * svg_settings.scale,
                     rect_world.size.height * svg_settings.scale)
         },
         TileNodeKind::Node { children } => {
             children.iter().fold(String::new(), |acc, child| acc + &tile_node_to_svg(child, transform, svg_settings) )
@@ -199,27 +199,27 @@ fn tile_to_svg(key: TileOffset,
                 match prim_compare_result_detail {
                     Some(PrimitiveCompareResultDetail::Descriptor { old, new }) => {
                         if old.prim_uid == new.prim_uid {
                             // if the prim uid hasn't changed then try to print something useful
                             invalidation_report.push_str(
                                 &format!("<b>Content: Descriptor</b> changed for uid {}<br/>",
                                          old.prim_uid.get_uid()));
                             let mut changes = String::new();
-                            if old.prim_clip_rect != new.prim_clip_rect {
-                                changes += &format!("<li><b>prim_clip_rect</b> changed from {}x{} at ({},{})",
-                                                    old.prim_clip_rect.w,
-                                                    old.prim_clip_rect.h,
-                                                    old.prim_clip_rect.x,
-                                                    old.prim_clip_rect.y);
-                                changes += &format!(" to {}x{} at ({},{})</li>",
-                                                    new.prim_clip_rect.w,
-                                                    new.prim_clip_rect.h,
-                                                    new.prim_clip_rect.x,
-                                                    new.prim_clip_rect.y);
+                            if old.prim_clip_box != new.prim_clip_box {
+                                changes += &format!("<li><b>prim_clip_rect</b> changed from {},{} -> {},{}",
+                                                    old.prim_clip_box.min.x,
+                                                    old.prim_clip_box.min.y,
+                                                    old.prim_clip_box.max.x,
+                                                    old.prim_clip_box.max.y);
+                                changes += &format!(" to {},{} -> {},{}</li>",
+                                                    new.prim_clip_box.min.x,
+                                                    new.prim_clip_box.min.y,
+                                                    new.prim_clip_box.max.x,
+                                                    new.prim_clip_box.max.y);
                             }
                             invalidation_report.push_str(
                                 &format!("<ul>{}<li>Item: {}</li></ul>",
                                              changes,
                                              &itemuid_to_string.get(&old.prim_uid).unwrap_or(&String::new())));
                         } else {
                             // .. if prim UIDs have changed, just dump both items and descriptors.
                             invalidation_report.push_str(
@@ -291,30 +291,30 @@ fn tile_to_svg(key: TileOffset,
 
     svg += "\n<!-- primitives -->\n";
 
     svg = format!("{}<g id=\"{}\">\n\t",
                   svg,
                   prim_class);
 
     for prim in &tile.current_descriptor.prims {
-        let rect = prim.prim_clip_rect;
+        let rect = prim.prim_clip_box;
 
         // the transform could also be part of the CSS, let the browser do it;
         // might be a bit faster and also enable actual 3D transforms.
         let rect_pixel = Rect {
-            origin: PicturePoint::new(rect.x, rect.y),
-            size: PictureSize::new(rect.w, rect.h),
+            origin: PicturePoint::new(rect.min.x, rect.min.y),
+            size: PictureSize::new(rect.max.x - rect.min.x, rect.max.y - rect.min.y),
         };
         let rect_world = slice.transform.transform_rect(&rect_pixel).unwrap();
 
         let style =
             if let Some(prev_tile) = prev_tile {
                 // when this O(n^2) gets too slow, stop brute-forcing and use a set or something
-                if prev_tile.current_descriptor.prims.iter().find(|&prim| prim.prim_clip_rect == rect).is_some() {
+                if prev_tile.current_descriptor.prims.iter().find(|&prim| prim.prim_clip_box == rect).is_some() {
                     ""
                 } else {
                     "class=\"svg_changed_prim\" "
                 }
             } else {
                 "class=\"svg_changed_prim\" "
             };
 
--- a/gfx/wr/webrender/src/picture.rs
+++ b/gfx/wr/webrender/src/picture.rs
@@ -114,17 +114,17 @@ use crate::frame_builder::{FrameBuilderC
 use crate::intern::ItemUid;
 use crate::internal_types::{FastHashMap, FastHashSet, PlaneSplitter, Filter, PlaneSplitAnchor, TextureSource};
 use crate::frame_builder::{FrameBuildingContext, FrameBuildingState, PictureState, PictureContext};
 use crate::gpu_cache::{GpuCache, GpuCacheAddress, GpuCacheHandle};
 use crate::gpu_types::{UvRectKind, ZBufferId};
 use plane_split::{Clipper, Polygon, Splitter};
 use crate::prim_store::{SpaceMapper, PrimitiveVisibilityMask, PrimitiveTemplateKind};
 use crate::prim_store::{SpaceSnapper, PictureIndex, PrimitiveInstance, PrimitiveInstanceKind};
-use crate::prim_store::{get_raster_rects, PrimitiveScratchBuffer, RectangleKey};
+use crate::prim_store::{get_raster_rects, PrimitiveScratchBuffer};
 use crate::prim_store::{OpacityBindingStorage, ImageInstanceStorage, OpacityBindingIndex};
 use crate::prim_store::{ColorBindingStorage, ColorBindingIndex, PrimitiveVisibilityFlags};
 use crate::print_tree::{PrintTree, PrintTreePrinter};
 use crate::render_backend::{DataStores, FrameId};
 use crate::render_task_graph::RenderTaskId;
 use crate::render_target::RenderTargetKind;
 use crate::render_task::{RenderTask, RenderTaskLocation, BlurTaskCache, ClearMode};
 use crate::resource_cache::{ResourceCache, ImageGeneration};
@@ -633,24 +633,21 @@ struct TilePostUpdateState<'a> {
     compare_cache: &'a mut FastHashMap<PrimitiveComparisonKey, PrimitiveCompareResult>,
 
     /// Information about transform node differences from last frame.
     spatial_node_comparer: &'a mut SpatialNodeComparer,
 }
 
 /// Information about the dependencies of a single primitive instance.
 struct PrimitiveDependencyInfo {
-    /// If true, we should clip the prim rect to the tile boundaries.
-    clip_by_tile: bool,
-
     /// Unique content identifier of the primitive.
     prim_uid: ItemUid,
 
     /// The (conservative) clipped area in picture space this primitive occupies.
-    prim_clip_rect: PictureRect,
+    prim_clip_box: PictureBox2D,
 
     /// Image keys this primitive depends on.
     images: SmallVec<[ImageDependency; 8]>,
 
     /// Opacity bindings this primitive depends on.
     opacity_bindings: SmallVec<[OpacityBinding; 4]>,
 
     /// Color binding this primitive depends on.
@@ -665,25 +662,24 @@ struct PrimitiveDependencyInfo {
     /// If true, this primitive has been promoted to be a compositor surface.
     is_compositor_surface: bool,
 }
 
 impl PrimitiveDependencyInfo {
     /// Construct dependency info for a new primitive.
     fn new(
         prim_uid: ItemUid,
-        prim_clip_rect: PictureRect,
+        prim_clip_box: PictureBox2D,
     ) -> Self {
         PrimitiveDependencyInfo {
             prim_uid,
             images: SmallVec::new(),
             opacity_bindings: SmallVec::new(),
             color_binding: None,
-            clip_by_tile: false,
-            prim_clip_rect,
+            prim_clip_box,
             clips: SmallVec::new(),
             spatial_nodes: SmallVec::new(),
             is_compositor_surface: false,
         }
     }
 }
 
 /// A stable ID for a given tile, to help debugging. These are also used
@@ -933,16 +929,18 @@ pub struct TileCacheInstanceSerializer {
 /// Information about a cached tile.
 pub struct Tile {
     /// The grid position of this tile within the picture cache
     pub tile_offset: TileOffset,
     /// The current world rect of this tile.
     pub world_tile_rect: WorldRect,
     /// The current local rect of this tile.
     pub local_tile_rect: PictureRect,
+    /// Same as local_tile_rect, but in min/max form as an optimization
+    pub local_tile_box: PictureBox2D,
     /// The picture space dirty rect for this tile.
     local_dirty_rect: PictureRect,
     /// The device space dirty rect for this tile.
     /// TODO(gw): We have multiple dirty rects available due to the quadtree above. In future,
     ///           expose these as multiple dirty rects, which will help in some cases.
     pub device_dirty_rect: DeviceRect,
     /// Device space rect that contains valid pixels region of this tile.
     pub device_valid_rect: DeviceRect,
@@ -975,53 +973,54 @@ pub struct Tile {
     /// The last rendered background color on this tile.
     background_color: Option<ColorF>,
     /// The first reason the tile was invalidated this frame.
     invalidation_reason: Option<InvalidationReason>,
     /// If true, this tile has one or more compositor surfaces affecting it.
     pub has_compositor_surface: bool,
     /// The local space valid rect for any primitives found prior to the first compositor
     /// surface that affects this tile.
-    bg_local_valid_rect: PictureRect,
+    bg_local_valid_rect: PictureBox2D,
     /// The local space valid rect for any primitives found after the first compositor
     /// surface that affects this tile.
-    fg_local_valid_rect: PictureRect,
+    fg_local_valid_rect: PictureBox2D,
     /// z-buffer id for this tile, which is one of z_id_opaque or z_id_alpha, depending on tile opacity
     pub z_id: ZBufferId,
     /// The last frame this tile had its dependencies updated (dependency updating is
     /// skipped if a tile is off-screen).
     pub last_updated_frame_id: FrameId,
 }
 
 impl Tile {
     /// Construct a new, invalid tile.
     fn new(tile_offset: TileOffset) -> Self {
         let id = TileId(NEXT_TILE_ID.fetch_add(1, Ordering::Relaxed));
 
         Tile {
             tile_offset,
             local_tile_rect: PictureRect::zero(),
+            local_tile_box: PictureBox2D::zero(),
             world_tile_rect: WorldRect::zero(),
             device_valid_rect: DeviceRect::zero(),
             local_dirty_rect: PictureRect::zero(),
             device_dirty_rect: DeviceRect::zero(),
             surface: None,
             current_descriptor: TileDescriptor::new(),
             prev_descriptor: TileDescriptor::new(),
             is_valid: false,
             is_visible: false,
             fract_offset: PictureVector2D::zero(),
             id,
             is_opaque: false,
             root: TileNode::new_leaf(Vec::new()),
             background_color: None,
             invalidation_reason: None,
             has_compositor_surface: false,
-            bg_local_valid_rect: PictureRect::zero(),
-            fg_local_valid_rect: PictureRect::zero(),
+            bg_local_valid_rect: PictureBox2D::zero(),
+            fg_local_valid_rect: PictureBox2D::zero(),
             z_id: ZBufferId::invalid(),
             last_updated_frame_id: FrameId::INVALID,
         }
     }
 
     /// Print debug information about this tile to a tree printer.
     fn print(&self, pt: &mut dyn PrintTreePrinter) {
         pt.new_level(format!("Tile {:?}", self.id));
@@ -1045,28 +1044,28 @@ impl Tile {
             &self.prev_descriptor,
             &self.current_descriptor,
             state.resource_cache,
             state.spatial_node_comparer,
             ctx.opacity_bindings,
             ctx.color_bindings,
         );
 
-        let mut dirty_rect = PictureRect::zero();
+        let mut dirty_rect = PictureBox2D::zero();
         self.root.update_dirty_rects(
             &self.prev_descriptor.prims,
             &self.current_descriptor.prims,
             &mut prim_comparer,
             &mut dirty_rect,
             state.compare_cache,
             invalidation_reason,
             frame_context,
         );
 
-        dirty_rect
+        dirty_rect.to_rect()
     }
 
     /// Invalidate a tile based on change in content. This
     /// must be called even if the tile is not currently
     /// visible on screen. We might be able to improve this
     /// later by changing how ComparableVec is used.
     fn update_content_validity(
         &mut self,
@@ -1132,18 +1131,22 @@ impl Tile {
         // the snapping will be consistent.
         self.local_tile_rect = PictureRect::new(
             PicturePoint::new(
                 self.tile_offset.x as f32 * ctx.tile_size.width + ctx.fract_offset.x,
                 self.tile_offset.y as f32 * ctx.tile_size.height + ctx.fract_offset.y,
             ),
             ctx.tile_size,
         );
-        self.bg_local_valid_rect = PictureRect::zero();
-        self.fg_local_valid_rect = PictureRect::zero();
+        self.local_tile_box = PictureBox2D::new(
+            self.local_tile_rect.origin,
+            self.local_tile_rect.bottom_right(),
+        );
+        self.bg_local_valid_rect = PictureBox2D::zero();
+        self.fg_local_valid_rect = PictureBox2D::zero();
         self.invalidation_reason  = None;
         self.has_compositor_surface = false;
 
         self.world_tile_rect = ctx.pic_to_world_mapper
             .map(&self.local_tile_rect)
             .expect("bug: map local tile rect");
 
         // Check if this tile is currently on screen.
@@ -1176,17 +1179,17 @@ impl Tile {
 
         // Clear any dependencies so that when we rebuild them we
         // can compare if the tile has the same content.
         mem::swap(
             &mut self.current_descriptor,
             &mut self.prev_descriptor,
         );
         self.current_descriptor.clear();
-        self.root.clear(self.local_tile_rect);
+        self.root.clear(self.local_tile_rect.to_box2d());
 
         // Since this tile is determined to be visible, it will get updated
         // dependencies, so update the frame id we are storing dependencies for.
         self.last_updated_frame_id = ctx.frame_id;
     }
 
     /// Add dependencies for a given primitive to this tile.
     fn add_prim_dependency(
@@ -1209,19 +1212,19 @@ impl Tile {
             // during rasterization and the draw rect during composition of partial tiles.
 
             // Once we have encountered 1+ compositor surfaces affecting this tile, include
             // this bounding rect in the foreground. Otherwise, include in the background rect.
             // This allows us to determine if we found any primitives that are on top of the
             // compositor surface(s) for this tile. If so, we need to draw the tile with alpha
             // blending as an overlay.
             if self.has_compositor_surface {
-                self.fg_local_valid_rect = self.fg_local_valid_rect.union(&info.prim_clip_rect);
+                self.fg_local_valid_rect = self.fg_local_valid_rect.union(&info.prim_clip_box);
             } else {
-                self.bg_local_valid_rect = self.bg_local_valid_rect.union(&info.prim_clip_rect);
+                self.bg_local_valid_rect = self.bg_local_valid_rect.union(&info.prim_clip_box);
             }
         }
 
         // Include any image keys this tile depends on.
         self.current_descriptor.images.extend_from_slice(&info.images);
 
         // Include any opacity bindings this primitive depends on.
         self.current_descriptor.opacity_bindings.extend_from_slice(&info.opacity_bindings);
@@ -1240,66 +1243,65 @@ impl Tile {
         }
 
         // Include any color bindings this primitive depends on.
         if info.color_binding.is_some() {
             self.current_descriptor.color_bindings.insert(
                 self.current_descriptor.color_bindings.len(), info.color_binding.unwrap());
         }
 
-        // TODO(gw): The clip rect of background rects produced by APZ changes
-        //           in Gecko during scrolling. Consider investigating this so the
-        //           hack / workaround below is not required.
-        let prim_clip_rect = if info.clip_by_tile {
-            let tile_p0 = self.local_tile_rect.origin;
-            let tile_p1 = self.local_tile_rect.bottom_right();
-
-            let clip_p0 = PicturePoint::new(
-                clampf(info.prim_clip_rect.origin.x, tile_p0.x, tile_p1.x),
-                clampf(info.prim_clip_rect.origin.y, tile_p0.y, tile_p1.y),
-            );
-
-            let clip_p1 = PicturePoint::new(
-                clampf(info.prim_clip_rect.origin.x + info.prim_clip_rect.size.width, tile_p0.x, tile_p1.x),
-                clampf(info.prim_clip_rect.origin.y + info.prim_clip_rect.size.height, tile_p0.y, tile_p1.y),
-            );
-
-            PictureRect::new(
-                clip_p0,
-                PictureSize::new(
-                    clip_p1.x - clip_p0.x,
-                    clip_p1.y - clip_p0.y,
-                ),
-            )
-        } else {
-            info.prim_clip_rect
-        };
+        // TODO(gw): The prim_clip_rect can be impacted by the clip rect of the display port,
+        //           which can cause invalidations when a new display list with changed
+        //           display port is received. To work around this, clamp the prim clip rect
+        //           to the tile boundaries - if the clip hasn't affected the tile, then the
+        //           changed clip can't affect the content of the primitive on this tile.
+        //           In future, we could consider supplying the display port clip from Gecko
+        //           in a different way (e.g. as a scroll frame clip) which still provides
+        //           the desired clip for checkerboarding, but doesn't require this extra
+        //           work below.
+
+        // TODO(gw): This is a hot part of the code - we could probably optimize further by:
+        //           - Using min/max instead of clamps below (if we guarantee the rects are well formed)
+
+        let tile_p0 = self.local_tile_box.min;
+        let tile_p1 = self.local_tile_box.max;
+
+        let prim_clip_box = PictureBox2D::new(
+            PicturePoint::new(
+                clampf(info.prim_clip_box.min.x, tile_p0.x, tile_p1.x),
+                clampf(info.prim_clip_box.min.y, tile_p0.y, tile_p1.y),
+            ),
+            PicturePoint::new(
+                clampf(info.prim_clip_box.max.x, tile_p0.x, tile_p1.x),
+                clampf(info.prim_clip_box.max.y, tile_p0.y, tile_p1.y),
+            ),
+        );
 
         // Update the tile descriptor, used for tile comparison during scene swaps.
         let prim_index = PrimitiveDependencyIndex(self.current_descriptor.prims.len() as u32);
 
         // We know that the casts below will never overflow because the array lengths are
         // truncated to MAX_PRIM_SUB_DEPS during update_prim_dependencies.
         debug_assert!(info.spatial_nodes.len() <= MAX_PRIM_SUB_DEPS);
         debug_assert!(info.clips.len() <= MAX_PRIM_SUB_DEPS);
         debug_assert!(info.images.len() <= MAX_PRIM_SUB_DEPS);
         debug_assert!(info.opacity_bindings.len() <= MAX_PRIM_SUB_DEPS);
 
         self.current_descriptor.prims.push(PrimitiveDescriptor {
             prim_uid: info.prim_uid,
-            prim_clip_rect: prim_clip_rect.into(),
+            prim_clip_box,
             transform_dep_count: info.spatial_nodes.len()  as u8,
             clip_dep_count: info.clips.len() as u8,
             image_dep_count: info.images.len() as u8,
             opacity_binding_dep_count: info.opacity_bindings.len() as u8,
             color_binding_dep_count: if info.color_binding.is_some() { 1 } else { 0 } as u8,
         });
 
         // Add this primitive to the dirty rect quadtree.
-        self.root.add_prim(prim_index, &info.prim_clip_rect);
+        self.root.add_prim(prim_index, &info.prim_clip_box);
     }
 
     /// Called during tile cache instance post_update. Allows invalidation and dirty
     /// rect calculation after primitive dependencies have been updated.
     fn post_update(
         &mut self,
         ctx: &TilePostUpdateContext,
         state: &mut TilePostUpdateState,
@@ -1316,17 +1318,19 @@ impl Tile {
         // (and thus updated / invalidated) until it is on screen again.
         if !self.is_visible {
             return false;
         }
 
         // Calculate the overall valid rect for this tile, including both the foreground
         // and background local valid rects.
         self.current_descriptor.local_valid_rect =
-            self.bg_local_valid_rect.union(&self.fg_local_valid_rect);
+            self.bg_local_valid_rect
+                .union(&self.fg_local_valid_rect)
+                .to_rect();
 
         // TODO(gw): In theory, the local tile rect should always have an
         //           intersection with the overall picture rect. In practice,
         //           due to some accuracy issues with how fract_offset (and
         //           fp accuracy) are used in the calling method, this isn't
         //           always true. In this case, it's safe to set the local
         //           valid rect to zero, which means it will be clipped out
         //           and not affect the scene. In future, we should fix the
@@ -1379,17 +1383,17 @@ impl Tile {
             .unwrap_or_else(PictureRect::zero);
         let mut is_opaque = ctx.backdrop.opaque_rect.contains_rect(&clipped_rect);
 
         if self.has_compositor_surface {
             // If we found primitive(s) that are ordered _after_ the first compositor
             // surface, _and_ intersect with any compositor surface, then we will need
             // to draw this tile with alpha blending, as an overlay to the compositor surface.
             let fg_world_valid_rect = ctx.pic_to_world_mapper
-                .map(&self.fg_local_valid_rect)
+                .map(&self.fg_local_valid_rect.to_rect())
                 .expect("bug: map fg local valid rect");
             let fg_device_valid_rect = fg_world_valid_rect * ctx.global_device_pixel_scale;
 
             for surface in ctx.external_surfaces {
                 if surface.device_rect.intersects(&fg_device_valid_rect) {
                     is_opaque = false;
                     break;
                 }
@@ -1543,43 +1547,43 @@ impl Tile {
 #[cfg_attr(feature = "capture", derive(Serialize))]
 #[cfg_attr(feature = "replay", derive(Deserialize))]
 pub struct PrimitiveDescriptor {
     /// Uniquely identifies the content of the primitive template.
     pub prim_uid: ItemUid,
     /// The clip rect for this primitive. Included here in
     /// dependencies since there is no entry in the clip chain
     /// dependencies for the local clip rect.
-    pub prim_clip_rect: RectangleKey,
+    pub prim_clip_box: PictureBox2D,
     /// The number of extra dependencies that this primitive has.
     transform_dep_count: u8,
     image_dep_count: u8,
     opacity_binding_dep_count: u8,
     clip_dep_count: u8,
     color_binding_dep_count: u8,
 }
 
 impl PartialEq for PrimitiveDescriptor {
     fn eq(&self, other: &Self) -> bool {
         const EPSILON: f32 = 0.001;
 
         if self.prim_uid != other.prim_uid {
             return false;
         }
 
-        if !self.prim_clip_rect.x.approx_eq_eps(&other.prim_clip_rect.x, &EPSILON) {
+        if !self.prim_clip_box.min.x.approx_eq_eps(&other.prim_clip_box.min.x, &EPSILON) {
             return false;
         }
-        if !self.prim_clip_rect.y.approx_eq_eps(&other.prim_clip_rect.y, &EPSILON) {
+        if !self.prim_clip_box.min.y.approx_eq_eps(&other.prim_clip_box.min.y, &EPSILON) {
             return false;
         }
-        if !self.prim_clip_rect.w.approx_eq_eps(&other.prim_clip_rect.w, &EPSILON) {
+        if !self.prim_clip_box.max.x.approx_eq_eps(&other.prim_clip_box.max.x, &EPSILON) {
             return false;
         }
-        if !self.prim_clip_rect.h.approx_eq_eps(&other.prim_clip_rect.h, &EPSILON) {
+        if !self.prim_clip_box.max.y.approx_eq_eps(&other.prim_clip_box.max.y, &EPSILON) {
             return false;
         }
 
         true
     }
 }
 
 /// A small helper to compare two arrays of primitive dependencies.
@@ -1712,21 +1716,21 @@ impl TileDescriptor {
 
     /// Print debug information about this tile descriptor to a tree printer.
     fn print(&self, pt: &mut dyn PrintTreePrinter) {
         pt.new_level("current_descriptor".to_string());
 
         pt.new_level("prims".to_string());
         for prim in &self.prims {
             pt.new_level(format!("prim uid={}", prim.prim_uid.get_uid()));
-            pt.add_item(format!("clip: origin={},{} size={}x{}",
-                prim.prim_clip_rect.x,
-                prim.prim_clip_rect.y,
-                prim.prim_clip_rect.w,
-                prim.prim_clip_rect.h,
+            pt.add_item(format!("clip: p0={},{} p1={},{}",
+                prim.prim_clip_box.min.x,
+                prim.prim_clip_box.min.y,
+                prim.prim_clip_box.max.x,
+                prim.prim_clip_box.max.y,
             ));
             pt.add_item(format!("deps: t={} i={} o={} c={} color={}",
                 prim.transform_dep_count,
                 prim.image_dep_count,
                 prim.opacity_binding_dep_count,
                 prim.clip_dep_count,
                 prim.color_binding_dep_count,
             ));
@@ -3047,17 +3051,17 @@ impl TileCacheInstance {
             frame_context.global_screen_world_rect,
             frame_context.spatial_tree,
         );
 
         let world_rect = pic_to_world_mapper
             .map(&prim_rect)
             .expect("bug: unable to map the primitive to world space");
         let world_clip_rect = pic_to_world_mapper
-            .map(&prim_info.prim_clip_rect)
+            .map(&prim_info.prim_clip_box.to_rect())
             .expect("bug: unable to map clip to world space");
 
         let is_visible = world_clip_rect.intersects(&frame_context.global_screen_world_rect);
         if !is_visible {
             return;
         }
 
         // TODO(gw): Is there any case where if the primitive ends up on a fractional
@@ -3133,19 +3137,19 @@ impl TileCacheInstance {
                 };
 
                 (Some(native_surface.native_surface_id), update_params)
             }
         };
 
         // Each compositor surface allocates a unique z-id
         self.external_surfaces.push(ExternalSurfaceDescriptor {
-            local_rect: prim_info.prim_clip_rect,
+            local_rect: prim_info.prim_clip_box.to_rect(),
             world_rect,
-            local_clip_rect: prim_info.prim_clip_rect,
+            local_clip_rect: prim_info.prim_clip_box.to_rect(),
             dependency,
             image_rendering,
             device_rect,
             clip_rect,
             z_id: composite_state.z_generator.next(),
             native_surface_id,
             update_params,
         });
@@ -3249,17 +3253,17 @@ impl TileCacheInstance {
         // be visible.
         if p0.x == p1.x || p0.y == p1.y {
             return None;
         }
 
         // Build the list of resources that this primitive has dependencies on.
         let mut prim_info = PrimitiveDependencyInfo::new(
             prim_instance.uid(),
-            pic_clip_rect,
+            pic_clip_rect.to_box2d(),
         );
 
         // Include the prim spatial node, if differs relative to cache root.
         if prim_spatial_node_index != self.spatial_node_index {
             prim_info.spatial_nodes.push(prim_spatial_node_index);
         }
 
         // If there was a clip chain, add any clip dependencies to the list for this tile.
@@ -3322,18 +3326,16 @@ impl TileCacheInstance {
                     for binding in &opacity_binding.bindings {
                         prim_info.opacity_bindings.push(OpacityBinding::from(*binding));
                     }
                 }
 
                 if color_binding_index != ColorBindingIndex::INVALID {
                     prim_info.color_binding = Some(color_bindings[color_binding_index].into());
                 }
-
-                prim_info.clip_by_tile = true;
             }
             PrimitiveInstanceKind::Image { data_handle, image_instance_index, ref mut is_compositor_surface, .. } => {
                 let image_key = &data_stores.image[data_handle];
                 let image_data = &image_key.kind;
                 let image_instance = &image_instances[image_instance_index];
                 let opacity_binding_index = image_instance.opacity_binding_index;
 
                 let mut promote_to_surface = false;
@@ -6674,30 +6676,30 @@ enum TileModification {
 /// A node in the dirty rect tracking quadtree.
 #[cfg_attr(any(feature="capture",feature="replay"), derive(Clone))]
 #[cfg_attr(feature = "capture", derive(Serialize))]
 #[cfg_attr(feature = "replay", derive(Deserialize))]
 pub struct TileNode {
     /// Leaf or internal node
     pub kind: TileNodeKind,
     /// Rect of this node in the same space as the tile cache picture
-    pub rect: PictureRect,
+    pub rect: PictureBox2D,
 }
 
 impl TileNode {
     /// Construct a new leaf node, with the given primitive dependency index buffer
     fn new_leaf(curr_indices: Vec<PrimitiveDependencyIndex>) -> Self {
         TileNode {
             kind: TileNodeKind::Leaf {
                 prev_indices: Vec::new(),
                 curr_indices,
                 dirty_tracker: 0,
                 frames_since_modified: 0,
             },
-            rect: PictureRect::zero(),
+            rect: PictureBox2D::zero(),
         }
     }
 
     /// Draw debug information about this tile node
     fn draw_debug_rects(
         &self,
         pic_to_world_mapper: &SpaceMapper<PicturePixel, WorldPixel>,
         is_opaque: bool,
@@ -6710,17 +6712,17 @@ impl TileNode {
                 let color = if (dirty_tracker & 1) != 0 {
                     debug_colors::RED
                 } else if is_opaque {
                     debug_colors::GREEN
                 } else {
                     debug_colors::YELLOW
                 };
 
-                if let Some(local_rect) = local_valid_rect.intersection(&self.rect) {
+                if let Some(local_rect) = local_valid_rect.intersection(&self.rect.to_rect()) {
                     let world_rect = pic_to_world_mapper
                         .map(&local_rect)
                         .unwrap();
                     let device_rect = world_rect * global_device_pixel_scale;
 
                     let outer_color = color.scale_alpha(0.3);
                     let inner_color = outer_color.scale_alpha(0.5);
                     scratch.push_debug_rect(
@@ -6741,75 +6743,76 @@ impl TileNode {
                     );
                 }
             }
         }
     }
 
     /// Calculate the four child rects for a given node
     fn get_child_rects(
-        rect: &PictureRect,
-        result: &mut [PictureRect; 4],
+        rect: &PictureBox2D,
+        result: &mut [PictureBox2D; 4],
     ) {
-        let p0 = rect.origin;
-        let half_size = PictureSize::new(rect.size.width * 0.5, rect.size.height * 0.5);
+        let p0 = rect.min;
+        let p1 = rect.max;
+        let pc = p0 + rect.size() * 0.5;
 
         *result = [
-            PictureRect::new(
-                PicturePoint::new(p0.x, p0.y),
-                half_size,
+            PictureBox2D::new(
+                p0,
+                pc,
             ),
-            PictureRect::new(
-                PicturePoint::new(p0.x + half_size.width, p0.y),
-                half_size,
+            PictureBox2D::new(
+                PicturePoint::new(pc.x, p0.y),
+                PicturePoint::new(p1.x, pc.y),
             ),
-            PictureRect::new(
-                PicturePoint::new(p0.x, p0.y + half_size.height),
-                half_size,
+            PictureBox2D::new(
+                PicturePoint::new(p0.x, pc.y),
+                PicturePoint::new(pc.x, p1.y),
             ),
-            PictureRect::new(
-                PicturePoint::new(p0.x + half_size.width, p0.y + half_size.height),
-                half_size,
+            PictureBox2D::new(
+                pc,
+                p1,
             ),
         ];
     }
 
     /// Called during pre_update, to clear the current dependencies
     fn clear(
         &mut self,
-        rect: PictureRect,
+        rect: PictureBox2D,
     ) {
         self.rect = rect;
 
         match self.kind {
             TileNodeKind::Leaf { ref mut prev_indices, ref mut curr_indices, ref mut dirty_tracker, ref mut frames_since_modified } => {
                 // Swap current dependencies to be the previous frame
                 mem::swap(prev_indices, curr_indices);
                 curr_indices.clear();
                 // Note that another frame has passed in the dirty bit trackers
                 *dirty_tracker = *dirty_tracker << 1;
                 *frames_since_modified += 1;
             }
             TileNodeKind::Node { ref mut children, .. } => {
-                let mut child_rects = [PictureRect::zero(); 4];
+                let mut child_rects = [PictureBox2D::zero(); 4];
                 TileNode::get_child_rects(&rect, &mut child_rects);
                 assert_eq!(child_rects.len(), children.len());
 
                 for (child, rect) in children.iter_mut().zip(child_rects.iter()) {
                     child.clear(*rect);
                 }
             }
         }
     }
 
     /// Add a primitive dependency to this node
     fn add_prim(
         &mut self,
         index: PrimitiveDependencyIndex,
-        prim_rect: &PictureRect,
+        prim_rect: &PictureBox2D,
     ) {
         match self.kind {
             TileNodeKind::Leaf { ref mut curr_indices, .. } => {
                 curr_indices.push(index);
             }
             TileNodeKind::Node { ref mut children, .. } => {
                 for child in children.iter_mut() {
                     if child.rect.intersects(prim_rect) {
@@ -6897,33 +6900,32 @@ impl TileNode {
                     TileNodeKind::Node { .. } => {
                         unreachable!("bug - only leaves can split");
                     }
                     TileNodeKind::Leaf { ref mut curr_indices, .. } => {
                         curr_indices.take()
                     }
                 };
 
-                let mut child_rects = [PictureRect::zero(); 4];
+                let mut child_rects = [PictureBox2D::zero(); 4];
                 TileNode::get_child_rects(&self.rect, &mut child_rects);
 
                 let mut child_indices = [
                     Vec::new(),
                     Vec::new(),
                     Vec::new(),
                     Vec::new(),
                 ];
 
                 // Step through the index buffer, and add primitives to each of the children
                 // that they intersect.
                 for index in curr_indices {
                     let prim = &curr_prims[index.0 as usize];
                     for (child_rect, indices) in child_rects.iter().zip(child_indices.iter_mut()) {
-                        let child_rect_key: RectangleKey = (*child_rect).into();
-                        if prim.prim_clip_rect.intersects(&child_rect_key) {
+                        if prim.prim_clip_box.intersects(child_rect) {
                             indices.push(index);
                         }
                     }
                 }
 
                 // Create the child nodes and switch from leaf -> node.
                 let children = child_indices
                     .iter_mut()
@@ -6988,17 +6990,17 @@ impl TileNode {
     }
 
     /// Update the dirty state of this node, building the overall dirty rect
     fn update_dirty_rects(
         &mut self,
         prev_prims: &[PrimitiveDescriptor],
         curr_prims: &[PrimitiveDescriptor],
         prim_comparer: &mut PrimitiveComparer,
-        dirty_rect: &mut PictureRect,
+        dirty_rect: &mut PictureBox2D,
         compare_cache: &mut FastHashMap<PrimitiveComparisonKey, PrimitiveCompareResult>,
         invalidation_reason: &mut Option<InvalidationReason>,
         frame_context: &FrameVisibilityContext,
     ) {
         match self.kind {
             TileNodeKind::Node { ref mut children, .. } => {
                 for child in children.iter_mut() {
                     child.update_dirty_rects(
--- a/gfx/wr/webrender_api/src/units.rs
+++ b/gfx/wr/webrender_api/src/units.rs
@@ -9,17 +9,17 @@
 //! don't have the device pixel ratio applied which means they are agnostic to the usage
 //! of hidpi screens and the like.
 //!
 //! The terms "layer" and "stacking context" can be used interchangeably
 //! in the context of coordinate systems.
 
 pub use app_units::Au;
 use euclid::{Length, Rect, Scale, Size2D, Transform3D, Translation2D};
-use euclid::{Point2D, Point3D, Vector2D, Vector3D, SideOffsets2D};
+use euclid::{Point2D, Point3D, Vector2D, Vector3D, SideOffsets2D, Box2D};
 use euclid::HomogeneousVector;
 use peek_poke::PeekPoke;
 // local imports
 use crate::image::DirtyRect;
 
 /// Geometry in the coordinate system of the render target (screen or intermediate
 /// surface) in physical pixels.
 #[derive(Hash, Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Serialize, Deserialize)]
@@ -55,16 +55,17 @@ pub type PictureIntRect = Rect<i32, Pict
 pub type PictureIntPoint = Point2D<i32, PicturePixel>;
 pub type PictureIntSize = Size2D<i32, PicturePixel>;
 pub type PictureRect = Rect<f32, PicturePixel>;
 pub type PicturePoint = Point2D<f32, PicturePixel>;
 pub type PictureSize = Size2D<f32, PicturePixel>;
 pub type PicturePoint3D = Point3D<f32, PicturePixel>;
 pub type PictureVector2D = Vector2D<f32, PicturePixel>;
 pub type PictureVector3D = Vector3D<f32, PicturePixel>;
+pub type PictureBox2D = Box2D<f32, PicturePixel>;
 
 /// Geometry gets rasterized in a given root coordinate space. This
 /// is often the root spatial node (world space), but may be a local
 /// space for a variety of reasons (e.g. perspective).
 #[derive(Hash, Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd)]
 pub struct RasterPixel;
 
 pub type RasterIntRect = Rect<i32, RasterPixel>;
index 08ce431df80697c60b8c76769ec417b8dd65cffd..cec3ecc32144afba6cdf0f78bea5b078fbc8846f
GIT binary patch
literal 48510
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
P0Dtl_D$-?=pa1(m!5~Di