Bug 1584439 - Enable picture caching for scroll bars and UI content. r=nical
authorGlenn Watson <git@intuitionlibrary.com>
Tue, 01 Oct 2019 08:52:40 +0000
changeset 495909 9b42bdc4889fe7782df9b2a0aa990ed5e62cb04c
parent 495908 04e8766a29242d4deae31b5b04e6ac61ebf61ffd
child 495910 057b59fdadad75e888a739e85a683b2ff7bfc62e
push id114140
push userdvarga@mozilla.com
push dateWed, 02 Oct 2019 18:04:51 +0000
treeherdermozilla-inbound@32eb0ea893f3 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersnical
bugs1584439
milestone71.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 1584439 - Enable picture caching for scroll bars and UI content. r=nical Once this patch lands, all content drawn by WebRender is drawn into a picture cache surface. This will incur some extra GPU memory overhead since there are extra GPU texture buffers. Much of this can be reduced by adding a couple of simple optimizations in future to detect tiles that are solid colors only. With this change, we'll now be able to provide exact dirty rects for the entire screen without any hacks, and start the work to draw into OS compositor surfaces directly. Differential Revision: https://phabricator.services.mozilla.com/D47395
gfx/wr/webrender/src/picture.rs
gfx/wr/webrender/src/renderer.rs
gfx/wr/webrender/src/scene_building.rs
gfx/wr/wrench/reftests/blend/reftest.list
gfx/wr/wrench/reftests/border/border-gradient-nine-patch.png
gfx/wr/wrench/reftests/border/reftest.list
gfx/wr/wrench/reftests/clip/reftest.list
gfx/wr/wrench/reftests/filters/blend-clipped.png
gfx/wr/wrench/reftests/filters/reftest.list
gfx/wr/wrench/reftests/filters/svg-filter-blur-transforms.png
gfx/wr/wrench/reftests/filters/svg-filter-drop-shadow-perspective.png
gfx/wr/wrench/reftests/gradient/premultiplied-aligned.png
gfx/wr/wrench/reftests/mask/reftest.list
gfx/wr/wrench/reftests/performance/reftest.list
gfx/wr/wrench/reftests/snap/preserve-3d.png
gfx/wr/wrench/reftests/text/blurred-shadow-local-clip-rect-ref.png
gfx/wr/wrench/reftests/text/reftest.list
gfx/wr/wrench/reftests/transforms/border-zoom.png
gfx/wr/wrench/reftests/transforms/coord-system.png
gfx/wr/wrench/reftests/transforms/local-clip.png
gfx/wr/wrench/reftests/transforms/perspective-clip-1.png
gfx/wr/wrench/reftests/transforms/perspective-clip.png
gfx/wr/wrench/reftests/transforms/reftest.list
gfx/wr/wrench/reftests/transforms/rotated-clip.png
layout/reftests/async-scrolling/reftest.list
layout/reftests/position-sticky/reftest.list
--- a/gfx/wr/webrender/src/picture.rs
+++ b/gfx/wr/webrender/src/picture.rs
@@ -29,17 +29,17 @@ use crate::prim_store::{OpacityBindingSt
 use crate::print_tree::PrintTreePrinter;
 use crate::render_backend::DataStores;
 use crate::render_task_graph::RenderTaskId;
 use crate::render_target::RenderTargetKind;
 use crate::render_task::{RenderTask, RenderTaskLocation, BlurTaskCache, ClearMode};
 use crate::resource_cache::ResourceCache;
 use crate::scene::SceneProperties;
 use smallvec::SmallVec;
-use std::{mem, u8};
+use std::{mem, u8, marker};
 use std::sync::atomic::{AtomicUsize, Ordering};
 use crate::texture_cache::TextureCacheHandle;
 use crate::util::{TransformedRectKind, MatrixHelpers, MaxRect, scale_factors, VecHelper, subtract_rect};
 use crate::filterdata::{FilterDataHandle};
 
 /*
  A picture represents a dynamically rendered image. It consists of:
 
@@ -136,16 +136,18 @@ pub struct PictureCacheState {
     /// The current fractional offset of the cache transform root.
     fract_offset: PictureVector2D,
     /// State of the spatial nodes from previous frame
     spatial_nodes: FastHashMap<SpatialNodeIndex, SpatialNodeDependency>,
     /// State of opacity bindings from previous frame
     opacity_bindings: FastHashMap<PropertyBindingId, OpacityBindingInfo>,
     /// The current transform of the picture cache root spatial node
     root_transform: TransformKey,
+    /// The current tile size in device pixels
+    current_tile_size: DeviceIntSize,
 }
 
 /// Stores a list of cached picture tiles that are retained
 /// between new scenes.
 #[cfg_attr(feature = "capture", derive(Serialize))]
 pub struct RetainedTiles {
     /// The tiles retained between display lists.
     #[cfg_attr(feature = "capture", serde(skip))] //TODO
@@ -172,25 +174,29 @@ impl RetainedTiles {
 #[derive(Hash, Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd)]
 pub struct TileCoordinate;
 
 // Geometry types for tile coordinates.
 pub type TileOffset = Point2D<i32, TileCoordinate>;
 pub type TileSize = Size2D<i32, TileCoordinate>;
 pub type TileRect = Rect<i32, TileCoordinate>;
 
-/// The size in device pixels of a cached tile. The currently chosen
-/// size is arbitrary. We should do some profiling to find the best
-/// size for real world pages.
-///
-/// Note that we use a separate, smaller size during wrench testing, so that
-/// we get tighter dirty rects and can do more meaningful invalidation
-/// tests.
-pub const TILE_SIZE_WIDTH: i32 = 2048;
-pub const TILE_SIZE_HEIGHT: i32 = 512;
+/// The size in device pixels of a normal cached tile.
+pub const TILE_SIZE_LARGE: DeviceIntSize = DeviceIntSize {
+    width: 2048,
+    height: 512,
+    _unit: marker::PhantomData,
+};
+
+/// The size in device pixels of a tile for small picture caches.
+pub const TILE_SIZE_SMALL: DeviceIntSize = DeviceIntSize {
+    width: 128,
+    height: 128,
+    _unit: marker::PhantomData,
+};
 
 /// The maximum size per axis of a surface,
 ///  in WorldPixel coordinates.
 const MAX_SURFACE_SIZE: f32 = 4096.0;
 
 /// The maximum number of sub-dependencies (e.g. clips, transforms) we can handle
 /// per-primitive. If a primitive has more than this, it will invalidate every frame.
 const MAX_PRIM_SUB_DEPS: usize = u8::MAX as usize;
@@ -281,16 +287,19 @@ struct TilePostUpdateContext<'a> {
     /// Information about transform node differences from last frame.
     spatial_nodes: &'a FastHashMap<SpatialNodeIndex, SpatialNodeDependency>,
 
     /// Information about opacity bindings from the picture cache.
     opacity_bindings: &'a FastHashMap<PropertyBindingId, OpacityBindingInfo>,
 
     /// Helper to map picture coordinates to world space
     pic_to_world_mapper: SpaceMapper<PicturePixel, WorldPixel>,
+
+    /// Current size in device pixels of tiles for this cache
+    current_tile_size: DeviceIntSize,
 }
 
 // Mutable state passed to picture cache tiles during post_update
 struct TilePostUpdateState<'a> {
     /// Scratch buffer for drawing debug information.
     scratch: &'a mut PrimitiveScratchBuffer,
 
     /// Current dirty region of this cache.
@@ -623,20 +632,30 @@ impl Tile {
         if self.current_descriptor.prims.is_empty() {
             return false;
         }
 
         if !self.world_rect.intersects(&ctx.global_screen_world_rect) {
             return false;
         }
 
+        // For small tiles, only allow splitting once, since otherwise we
+        // end up splitting into tiny dirty rects that aren't saving much
+        // in the way of pixel work.
+        let max_split_level = if ctx.current_tile_size == TILE_SIZE_LARGE {
+            3
+        } else {
+            1
+        };
+
         // Consider splitting / merging dirty regions
         self.root.maybe_merge_or_split(
             0,
             &self.current_descriptor.prims,
+            max_split_level,
         );
 
         // See if this tile is a simple color, in which case we can just draw
         // it as a rect, and avoid allocating a texture surface and drawing it.
         let is_solid_color = self.current_descriptor.prims.len() == 1 && self.is_opaque;
 
         // Set up the backing surface for this tile.
         let mut surface = if is_solid_color {
@@ -710,22 +729,18 @@ impl Tile {
             }
         }
 
         // Decide how to handle this tile when drawing this frame.
         if !self.is_valid {
             // Ensure that this texture is allocated.
             if let TileSurface::Texture { ref mut handle, ref mut visibility_mask } = surface {
                 if !state.resource_cache.texture_cache.is_allocated(handle) {
-                    let tile_size = DeviceIntSize::new(
-                        TILE_SIZE_WIDTH,
-                        TILE_SIZE_HEIGHT,
-                    );
                     state.resource_cache.texture_cache.update_picture_cache(
-                        tile_size,
+                        ctx.current_tile_size,
                         handle,
                         state.gpu_cache,
                     );
                 }
 
                 *visibility_mask = PrimitiveVisibilityMask::empty();
                 let dirty_region_index = state.dirty_region.dirty_rects.len();
 
@@ -1076,16 +1091,18 @@ impl BackdropInfo {
 pub struct TileCacheInstance {
     /// Index of the tile cache / slice for this frame builder. It's determined
     /// by the setup_picture_caching method during flattening, which splits the
     /// picture tree into multiple slices. It's used as a simple input to the tile
     /// keys. It does mean we invalidate tiles if a new layer gets inserted / removed
     /// between display lists - this seems very unlikely to occur on most pages, but
     /// can be revisited if we ever notice that.
     pub slice: usize,
+    /// The currently selected tile size to use for this cache
+    pub current_tile_size: DeviceIntSize,
     /// The positioning node for this tile cache.
     pub spatial_node_index: SpatialNodeIndex,
     /// Hash of tiles present in this picture.
     pub tiles: FastHashMap<TileOffset, Tile>,
     /// A helper struct to map local rects into surface coords.
     map_local_to_surface: SpaceMapper<LayoutPixel, PicturePixel>,
     /// List of opacity bindings, with some extra information
     /// about whether they changed since last frame.
@@ -1170,16 +1187,17 @@ impl TileCacheInstance {
             surface_index: SurfaceIndex(0),
             background_color,
             backdrop: BackdropInfo::empty(),
             subpixel_mode: SubpixelMode::Allow,
             fract_offset: PictureVector2D::zero(),
             root_transform: TransformKey::Local,
             shared_clips,
             shared_clip_chain,
+            current_tile_size: DeviceIntSize::zero(),
         }
     }
 
     /// Returns true if this tile cache is considered opaque.
     pub fn is_opaque(&self) -> bool {
         // If known opaque due to background clear color and being the first slice.
         // The background_color will only be Some(..) if this is the first slice.
         match self.background_color {
@@ -1216,18 +1234,16 @@ impl TileCacheInstance {
     /// Update transforms, opacity bindings and tile rects.
     pub fn pre_update(
         &mut self,
         pic_rect: PictureRect,
         surface_index: SurfaceIndex,
         frame_context: &FrameVisibilityContext,
         frame_state: &mut FrameVisibilityState,
     ) -> WorldRect {
-        let tile_width = TILE_SIZE_WIDTH;
-        let tile_height = TILE_SIZE_HEIGHT;
         self.surface_index = surface_index;
         self.local_rect = pic_rect;
         self.local_clip_rect = PictureRect::max_rect();
 
         // Reset the opaque rect + subpixel mode, as they are calculated
         // during the prim dependency checks.
         self.backdrop = BackdropInfo::empty();
         self.subpixel_mode = SubpixelMode::Allow;
@@ -1287,16 +1303,36 @@ impl TileCacheInstance {
 
         // If there are pending retained state, retrieve it.
         if let Some(prev_state) = frame_state.retained_tiles.caches.remove(&self.slice) {
             self.tiles.extend(prev_state.tiles);
             self.fract_offset = prev_state.fract_offset;
             self.root_transform = prev_state.root_transform;
             self.spatial_nodes = prev_state.spatial_nodes;
             self.opacity_bindings = prev_state.opacity_bindings;
+            self.current_tile_size = prev_state.current_tile_size;
+        }
+
+        // Work out what size tile is appropriate for this picture cache.
+        let desired_tile_size = if pic_rect.size.width < 2.0 * TILE_SIZE_SMALL.width as f32 ||
+           pic_rect.size.height < 2.0 * TILE_SIZE_SMALL.height as f32 {
+            TILE_SIZE_SMALL
+        } else {
+            TILE_SIZE_LARGE
+        };
+
+        // If the desired tile size has changed, then invalidate and drop any
+        // existing tiles.
+        // TODO(gw): This could in theory result in invalidating every frame if the
+        //           size of a picture is dynamically changing, just around the
+        //           threshold above. If we ever see this happening we can improve
+        //           the theshold logic above.
+        if desired_tile_size != self.current_tile_size {
+            self.tiles.clear();
+            self.current_tile_size = desired_tile_size;
         }
 
         // Map an arbitrary point in picture space to world space, to work out
         // what the fractional translation is that's applied by this scroll root.
         // TODO(gw): I'm not 100% sure this is right. At least, in future, we should
         //           make a specific API for this, and/or enforce that the picture
         //           cache transform only includes scale and/or translation (we
         //           already ensure it doesn't have perspective).
@@ -1347,18 +1383,18 @@ impl TileCacheInstance {
             };
             self.opacity_bindings.insert(*id, OpacityBindingInfo {
                 value: *value,
                 changed,
             });
         }
 
         let world_tile_size = WorldSize::new(
-            tile_width as f32 / frame_context.global_device_pixel_scale.0,
-            tile_height as f32 / frame_context.global_device_pixel_scale.0,
+            self.current_tile_size.width as f32 / frame_context.global_device_pixel_scale.0,
+            self.current_tile_size.height as f32 / frame_context.global_device_pixel_scale.0,
         );
 
         // We know that this is an exact rectangle, since we (for now) only support tile
         // caches where the scroll root is in the root coordinate system.
         let local_tile_rect = pic_to_world_mapper
             .unmap(&WorldRect::new(WorldPoint::zero(), world_tile_size))
             .expect("bug: unable to get local tile rect");
 
@@ -1755,16 +1791,17 @@ impl TileCacheInstance {
         let ctx = TilePostUpdateContext {
             debug_flags: frame_context.debug_flags,
             global_device_pixel_scale: frame_context.global_device_pixel_scale,
             global_screen_world_rect: frame_context.global_screen_world_rect,
             backdrop: self.backdrop,
             spatial_nodes: &self.spatial_nodes,
             opacity_bindings: &self.opacity_bindings,
             pic_to_world_mapper,
+            current_tile_size: self.current_tile_size,
         };
 
         let mut state = TilePostUpdateState {
             resource_cache,
             gpu_cache,
             scratch,
             dirty_region: &mut self.dirty_region,
         };
@@ -2243,16 +2280,18 @@ bitflags! {
         /// consult their owning clusters to see if the primitive itself is visible.
         const IS_VISIBLE = 4;
         /// Is a backdrop-filter cluster that requires special handling during post_update.
         const IS_BACKDROP_FILTER = 8;
         /// Force creation of a picture caching slice before this cluster.
         const CREATE_PICTURE_CACHE_PRE = 16;
         /// Force creation of a picture caching slice after this cluster.
         const CREATE_PICTURE_CACHE_POST = 32;
+        /// If set, this cluster represents a scroll bar container.
+        const SCROLLBAR_CONTAINER = 64;
     }
 }
 
 /// Descriptor for a cluster of primitives. For now, this is quite basic but will be
 /// extended to handle more spatial clustering of primitives.
 #[cfg_attr(feature = "capture", derive(Serialize))]
 pub struct PrimitiveCluster {
     /// The positioning node for this cluster.
@@ -2363,16 +2402,20 @@ impl PrimitiveList {
             }
             _ => {}
         }
 
         if prim_flags.contains(PrimitiveFlags::IS_BACKFACE_VISIBLE) {
             flags.insert(ClusterFlags::IS_BACKFACE_VISIBLE);
         }
 
+        if prim_flags.contains(PrimitiveFlags::IS_SCROLLBAR_CONTAINER) {
+            flags.insert(ClusterFlags::SCROLLBAR_CONTAINER);
+        }
+
         // Insert the primitive into the first or last cluster as required
         match insert_position {
             PrimitiveListPosition::Begin => {
                 let mut cluster = PrimitiveCluster::new(
                     spatial_node_index,
                     flags,
                 );
                 cluster.push(prim_instance, prim_size);
@@ -2623,16 +2666,17 @@ impl PicturePrimitive {
                 retained_tiles.caches.insert(
                     tile_cache.slice,
                     PictureCacheState {
                         tiles: tile_cache.tiles,
                         spatial_nodes: tile_cache.spatial_nodes,
                         opacity_bindings: tile_cache.opacity_bindings,
                         fract_offset: tile_cache.fract_offset,
                         root_transform: tile_cache.root_transform,
+                        current_tile_size: tile_cache.current_tile_size,
                     },
                 );
             }
         }
     }
 
     // TODO(gw): We have the PictureOptions struct available. We
     //           should move some of the parameter list in this
@@ -3029,21 +3073,16 @@ impl PicturePrimitive {
                         let render_task_id = frame_state.render_tasks.add(picture_task);
 
                         Some((render_task_id, render_task_id))
                     }
                     PictureCompositeMode::TileCache { .. } => {
                         let tile_cache = self.tile_cache.as_mut().unwrap();
                         let mut first = true;
 
-                        let tile_size = DeviceSize::new(
-                            TILE_SIZE_WIDTH as f32,
-                            TILE_SIZE_HEIGHT as f32,
-                        );
-
                         for key in &tile_cache.tiles_to_draw {
                             let tile = tile_cache.tiles.get_mut(key).expect("bug: no tile found!");
 
                             // Register active image keys of valid tile.
                             // TODO(gw): For now, we will register images on any visible
                             //           tiles as active. This is a hotfix because video
                             //           images on Mac/Linux are not being correctly detected
                             //           as non-cacheable. We should investigate / fix the
@@ -3075,19 +3114,19 @@ impl PicturePrimitive {
                                 // to ensure the scissor rect is correct.
                                 let scissor_rect = (scissor_rect * device_pixel_scale).round();
                                 let cache_item = frame_state.resource_cache.texture_cache.get(handle);
 
                                 let task = RenderTask::new_picture(
                                     RenderTaskLocation::PictureCache {
                                         texture: cache_item.texture_id,
                                         layer: cache_item.texture_layer,
-                                        size: tile_size.to_i32(),
+                                        size: tile_cache.current_tile_size,
                                     },
-                                    tile_size,
+                                    tile_cache.current_tile_size.to_f32(),
                                     pic_index,
                                     content_origin.to_i32(),
                                     UvRectKind::Rect,
                                     surface_spatial_node_index,
                                     device_pixel_scale,
                                     *visibility_mask,
                                     Some(scissor_rect.to_i32()),
                                 );
@@ -4163,17 +4202,17 @@ impl TileNode {
                     debug_colors::GREEN
                 } else {
                     debug_colors::YELLOW
                 };
 
                 let world_rect = pic_to_world_mapper.map(&self.rect).unwrap();
                 let device_rect = world_rect * global_device_pixel_scale;
 
-                let outer_color = color.scale_alpha(0.6);
+                let outer_color = color.scale_alpha(0.3);
                 let inner_color = outer_color.scale_alpha(0.5);
                 scratch.push_debug_rect(
                     device_rect.inflate(-3.0, -3.0),
                     outer_color,
                     inner_color
                 );
             }
             TileNodeKind::Node { ref children, .. } => {
@@ -4263,24 +4302,25 @@ impl TileNode {
         }
     }
 
     /// Return whether this tile wants to merge, split or do nothing.
     fn get_preference(
         &self,
         level: i32,
         can_merge: bool,
+        max_split_levels: i32,
     ) -> Option<TileModification> {
         match self.kind {
             TileNodeKind::Leaf { dirty_tracker, frames_since_modified, .. } => {
                 // Only consider changing 64 frames since we last changed
                 if frames_since_modified > 64 {
                     let dirty_frames = dirty_tracker.count_ones();
                     // If the tree isn't too deep, and has been regularly invalidating, split
-                    if level < 3 && dirty_frames > 32 {
+                    if level < max_split_levels && dirty_frames > 32 {
                         Some(TileModification::Split)
                     } else if can_merge && (dirty_tracker == 0 || dirty_frames == 64) && level > 0 {
                         // If allowed to merge, and nothing has changed for 64 frames, merge
                         Some(TileModification::Merge)
                     } else {
                         None
                     }
                 } else {
@@ -4293,25 +4333,26 @@ impl TileNode {
         }
     }
 
     /// Apply a merge or split operation to this tile, if desired
     fn maybe_merge_or_split(
         &mut self,
         level: i32,
         curr_prims: &[PrimitiveDescriptor],
+        max_split_levels: i32,
     ) {
         // Determine if this tile wants to split or merge
         let tile_mod = match self.kind {
             TileNodeKind::Leaf { .. } => {
-                self.get_preference(level, false)
+                self.get_preference(level, false, max_split_levels)
             }
             TileNodeKind::Node { ref children, .. } => {
                 // Only merge if all children want to merge
-                if children.iter().all(|c| c.get_preference(level+1, true) == Some(TileModification::Merge)) {
+                if children.iter().all(|c| c.get_preference(level+1, true, max_split_levels) == Some(TileModification::Merge)) {
                     Some(TileModification::Merge)
                 } else {
                     None
                 }
             }
         };
 
         match tile_mod {
@@ -4391,16 +4432,17 @@ impl TileNode {
             None => {
                 // If this node didn't merge / split, then recurse into children
                 // to see if they want to split / merge.
                 if let TileNodeKind::Node { ref mut children, .. } = self.kind {
                     for child in children.iter_mut() {
                         child.maybe_merge_or_split(
                             level+1,
                             curr_prims,
+                            max_split_levels,
                         );
                     }
                 }
             }
         }
     }
 
     /// Update the dirty state of this node, building the overall dirty rect
--- a/gfx/wr/webrender/src/renderer.rs
+++ b/gfx/wr/webrender/src/renderer.rs
@@ -63,17 +63,17 @@ use crate::glyph_rasterizer::{GlyphForma
 use crate::gpu_cache::{GpuBlockData, GpuCacheUpdate, GpuCacheUpdateList};
 use crate::gpu_cache::{GpuCacheDebugChunk, GpuCacheDebugCmd};
 use crate::gpu_types::{PrimitiveHeaderI, PrimitiveHeaderF, ScalingInstance, SvgFilterInstance, TransformData, ResolveInstanceData};
 use crate::internal_types::{TextureSource, ORTHO_FAR_PLANE, ORTHO_NEAR_PLANE, ResourceCacheError};
 use crate::internal_types::{CacheTextureId, DebugOutput, FastHashMap, FastHashSet, LayerIndex, RenderedDocument, ResultMsg};
 use crate::internal_types::{TextureCacheAllocationKind, TextureCacheUpdate, TextureUpdateList, TextureUpdateSource};
 use crate::internal_types::{RenderTargetInfo, SavedTargetIndex, Swizzle};
 use malloc_size_of::MallocSizeOfOps;
-use crate::picture::{RecordedDirtyRegion, TILE_SIZE_WIDTH, TILE_SIZE_HEIGHT};
+use crate::picture::{RecordedDirtyRegion, TILE_SIZE_LARGE, TILE_SIZE_SMALL};
 use crate::prim_store::DeferredResolve;
 use crate::profiler::{BackendProfileCounters, FrameProfileCounters, TimeProfileCounter,
                GpuProfileTag, RendererProfileCounters, RendererProfileTimers};
 use crate::profiler::{Profiler, ChangeIndicator};
 use crate::device::query::{GpuProfiler, GpuDebugMethod};
 use rayon::{ThreadPool, ThreadPoolBuilder};
 use crate::record::ApiRecordingReceiver;
 use crate::render_backend::{FrameId, RenderBackend};
@@ -2145,17 +2145,18 @@ impl Renderer {
 
         thread::Builder::new().name(rb_thread_name.clone()).spawn(move || {
             register_thread_with_profiler(rb_thread_name.clone());
             if let Some(ref thread_listener) = *thread_listener_for_render_backend {
                 thread_listener.thread_started(&rb_thread_name);
             }
 
             let picture_tile_sizes = &[
-                DeviceIntSize::new(TILE_SIZE_WIDTH, TILE_SIZE_HEIGHT),
+                TILE_SIZE_LARGE,
+                TILE_SIZE_SMALL,
             ];
 
             let texture_cache = TextureCache::new(
                 max_texture_size,
                 max_texture_layers,
                 if config.enable_picture_caching {
                     picture_tile_sizes
                 } else {
--- a/gfx/wr/webrender/src/scene_building.rs
+++ b/gfx/wr/webrender/src/scene_building.rs
@@ -482,23 +482,21 @@ impl<'a> SceneBuilder<'a> {
     fn setup_picture_caching(
         &mut self,
         main_prim_list: &mut PrimitiveList,
     ) {
         if !self.config.enable_picture_caching {
             return;
         }
 
-        // If no explicit tile cache was enabled, insert a marker that will result in the
-        // entire display list being cached.
-        if !self.found_explicit_tile_cache {
-            if let Some(cluster) = main_prim_list.clusters.first_mut() {
-                cluster.flags.insert(ClusterFlags::CREATE_PICTURE_CACHE_PRE);
-                cluster.cache_scroll_root = Some(ROOT_SPATIAL_NODE_INDEX);
-            }
+        // Unconditionally insert a marker to create a picture cache slice on the
+        // first cluster. This handles implicit picture caches, and also the common
+        // case, by allowing the root / background primitives to be cached in a slice.
+        if let Some(cluster) = main_prim_list.clusters.first_mut() {
+            cluster.flags.insert(ClusterFlags::CREATE_PICTURE_CACHE_PRE);
         }
 
         // List of slices that have been found
         let mut slices: Vec<Slice> = Vec::new();
         // Current stack of open clip chain instances that need to be fixed up
         let mut clip_chain_instance_stack = Vec::new();
         // Tracker for whether a new slice should be created
         let mut create_slice = true;
@@ -618,46 +616,45 @@ impl<'a> SceneBuilder<'a> {
 
         // Close off any open clip chains on prev slice.
         if let Some(prev_slice) = slices.last_mut() {
             prev_slice.pop_clip_instances(&clip_chain_instance_stack);
         }
 
         // Step through the slices, creating picture cache wrapper instances.
         for (slice_index, slice) in slices.drain(..).enumerate() {
-            match slice.cache_scroll_root {
-                Some(scroll_root) => {
-                    let background_color = if slice_index == 0 {
-                        self.config.background_color
-                    } else {
-                        None
-                    };
-
-                    let instance = create_tile_cache(
-                        slice_index,
-                        scroll_root,
-                        slice.prim_list,
-                        background_color,
-                        slice.shared_clips.unwrap_or(Vec::new()),
-                        &mut self.interners,
-                        &mut self.prim_store,
-                        &mut self.clip_store,
-                    );
-
-                    main_prim_list.add_prim(
-                        instance,
-                        LayoutSize::zero(),
-                        scroll_root,
-                        PrimitiveFlags::IS_BACKFACE_VISIBLE,
-                    );
-                }
-                None => {
-                    main_prim_list.extend(slice.prim_list);
-                }
-            }
+            let background_color = if slice_index == 0 {
+                self.config.background_color
+            } else {
+                None
+            };
+
+            // If the cluster specifies a scroll root, use it. Otherwise,
+            // just cache assuming no scrolling takes place. Even if that's
+            // not true, we still get caching benefits for any changes that
+            // occur while not scrolling (such as animation, video etc);
+            let scroll_root = slice.cache_scroll_root.unwrap_or(ROOT_SPATIAL_NODE_INDEX);
+
+            let instance = create_tile_cache(
+                slice_index,
+                scroll_root,
+                slice.prim_list,
+                background_color,
+                slice.shared_clips.unwrap_or(Vec::new()),
+                &mut self.interners,
+                &mut self.prim_store,
+                &mut self.clip_store,
+            );
+
+            main_prim_list.add_prim(
+                instance,
+                LayoutSize::zero(),
+                scroll_root,
+                PrimitiveFlags::IS_BACKFACE_VISIBLE,
+            );
         }
     }
 
     fn build_items(
         &mut self,
         traversal: &mut BuiltDisplayListIter<'a>,
         pipeline_id: PipelineId,
         apply_pipeline_clip: bool,
@@ -3516,61 +3513,81 @@ impl FlattenedStackingContext {
         self.transform_style == TransformStyle::Preserve3D && self.composite_ops.is_empty()
     }
 
     /// Set up appropriate cluster flags for picture caching on this stacking context.
     fn init_picture_caching(
         &mut self,
         clip_scroll_tree: &ClipScrollTree,
     ) {
-        let mut selected_cluster_and_scroll_root = None;
-
-        // There's probably a tidier way to express the logic below, but we will be
-        // removing this shortly anyway, as we create slices for more than just the
-        // main scroll root.
+        struct SliceInfo {
+            cluster_index: usize,
+            scroll_roots: Vec<SpatialNodeIndex>,
+        }
+
+        let mut slices: Vec<SliceInfo> = Vec::new();
+
+        // Step through each cluster, and work out where the slice boundaries should be.
         for (cluster_index, cluster) in self.prim_list.clusters.iter().enumerate() {
             let scroll_root = clip_scroll_tree.find_scroll_root(
                 cluster.spatial_node_index,
             );
+
+            // We want to create a slice in the following conditions:
+            // (1) This cluster is a scrollbar
+            // (2) This cluster begins a 'real' scroll root, where we don't currently have a real scroll root
+            // (3) No slice exists yet
+            let create_new_slice =
+                cluster.flags.contains(ClusterFlags::SCROLLBAR_CONTAINER) ||
+                slices.last().map(|slice| {
+                    scroll_root != ROOT_SPATIAL_NODE_INDEX &&
+                    slice.scroll_roots.is_empty()
+                }).unwrap_or(true);
+
+            // Create a new slice if required
+            if create_new_slice {
+                slices.push(SliceInfo {
+                    cluster_index,
+                    scroll_roots: Vec::new(),
+                });
+            }
+
+            // If this is a 'real' scroll root, include that in the list of scroll roots
+            // that have been found for this slice.
             if scroll_root != ROOT_SPATIAL_NODE_INDEX {
-                match selected_cluster_and_scroll_root {
-                    Some((_, selected_scroll_root)) => {
-                        if selected_scroll_root != scroll_root {
-                            // Found multiple scroll roots - bail out and just cache fixed position
-                            selected_cluster_and_scroll_root = None;
-                            break;
-                        }
-                    }
-                    None => {
-                        selected_cluster_and_scroll_root = Some((cluster_index, scroll_root));
-                    }
+                let slice = slices.last_mut().unwrap();
+                if !slice.scroll_roots.contains(&scroll_root) {
+                    slice.scroll_roots.push(scroll_root);
                 }
             }
         }
 
-        // Either set up a fixed root cache, or a scrolling one if there was only
-        // a single scroll root found (the common case).
-        match selected_cluster_and_scroll_root {
-            Some((cluster_index, scroll_root)) => {
-                let cluster = &mut self.prim_list.clusters[cluster_index];
-                cluster.flags.insert(ClusterFlags::CREATE_PICTURE_CACHE_PRE);
-                cluster.cache_scroll_root = Some(scroll_root);
-            }
-            None => {
-                if let Some(cluster) = self.prim_list.clusters.first_mut() {
-                    cluster.flags.insert(ClusterFlags::CREATE_PICTURE_CACHE_PRE);
-                    cluster.cache_scroll_root = Some(ROOT_SPATIAL_NODE_INDEX);
-                }
+        // Walk the list of slices, setting appropriate flags on the clusters which are
+        // later used during setup_picture_caching.
+        for slice in slices.drain(..) {
+            let cluster = &mut self.prim_list.clusters[slice.cluster_index];
+            // Mark that this cluster creates a picture cache slice
+            cluster.flags.insert(ClusterFlags::CREATE_PICTURE_CACHE_PRE);
+            assert!(!slice.scroll_roots.contains(&ROOT_SPATIAL_NODE_INDEX));
+            // Only select a scroll root for this slice if there's a single 'real' scroll
+            // root. If there are no scroll roots (doesn't scroll) or there are multiple
+            // scroll roots, then cache as a fixed slice. In the case of multiple scroll
+            // roots, this means we'll do some extra rasterization work (but only in dirty
+            // regions) as parts of the slice scroll. However, it does mean that we
+            // reduce number of tiles / GPU memory, and keep subpixel AA. In future, we
+            // might decide to create extra slices in some cases where there are multiple
+            // scroll roots (specifically, non-overlapping sibling scroll roots might be
+            // useful to support).
+            if slice.scroll_roots.len() == 1 {
+                cluster.cache_scroll_root = Some(slice.scroll_roots.first().cloned().unwrap());
             }
         }
 
-        // For now, always end the cache slice at the end of the stacking context.
-        // This preserves existing behavior, but breaks in some cases on platforms
-        // that use overlay scroll bars. We can fix this as a follow up once this
-        // patch lands.
+        // Always end the cache at the end of the stacking context, so that we don't
+        // cache anything from primitives outside this pipeline in the same slice.
         if let Some(cluster) = self.prim_list.clusters.last_mut() {
             cluster.flags.insert(ClusterFlags::CREATE_PICTURE_CACHE_POST);
         }
     }
 
     /// Return true if the stacking context isn't needed.
     pub fn is_redundant(
         &self,
@@ -3608,16 +3625,21 @@ impl FlattenedStackingContext {
             return false;
         }
 
         // If need to isolate in surface due to clipping / mix-blend-mode
         if !self.blit_reason.is_empty() {
             return false;
         }
 
+        // If this stacking context is a scrollbar, retain it so it can form a picture cache slice
+        if self.prim_flags.contains(PrimitiveFlags::IS_SCROLLBAR_CONTAINER) {
+            return false;
+        }
+
         // It is redundant!
         true
     }
 
     /// Cut the sequence of the immediate children recorded so far and generate a picture from them.
     pub fn cut_item_sequence(
         &mut self,
         prim_store: &mut PrimitiveStore,
--- a/gfx/wr/wrench/reftests/blend/reftest.list
+++ b/gfx/wr/wrench/reftests/blend/reftest.list
@@ -4,17 +4,17 @@ fuzzy(1,32) == color_targets(4) alpha_ta
 == difference.yaml difference-ref.yaml
 fuzzy(1,30000) == difference-transparent.yaml difference-transparent-ref.yaml
 == darken.yaml darken-ref.yaml
 == lighten.yaml lighten-ref.yaml
 
 fuzzy(1,32) == repeated-difference.yaml repeated-difference-ref.yaml
 
 == isolated.yaml isolated-ref.yaml
-fuzzy(3,393) == isolated-2.yaml isolated-2-ref.yaml
+fuzzy(3,397) == isolated-2.yaml isolated-2-ref.yaml
 == isolated-with-filter.yaml isolated-ref.yaml
 == isolated-premultiplied.yaml blank.yaml
 == isolated-premultiplied-2.yaml isolated-premultiplied-2-ref.yaml
 
 == large.yaml large-ref.yaml
 
 # fuzzy because dithering is different for gradients
 # drawn in different render targets
index 7ab8c3df6017fe99bf526cdc506139e6e6e687a4..5ba9373ff2e880f7d25458d9f5936e66c65fa37f
GIT binary patch
literal 1053
zc%17D@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST~P>f%%E2i(^Q|oVQmRgI;+Ev|W7t
z+kT68{Pa-qKdlDFCw<OoE*0?jzNG8?_V4!fdiDow^WVRp?r=}<e1o)nqsYVqz2_ae
zJRZz`4`SEnF>5L{?tjM~<ieylK}pC@56C*y`B%<EkW>9@go3NeoC}YE3JZ+Rvw|dS
z<UtY}bwNrKs)5ov@3sO>i@5O`sA$6qv&I<C)}tIOP1``+3Ex0uhaHG)r~{G)JNJRe
zjsHO8N<$F2un<Jf+z28kegu)7wM;*=mv24uGI##}RZNL|OpOi-0vs%(6mIH<?u1{<
z;^dCqPSxBj#KE$gEyzxeU25NinVc+5cbPTkpJ$WU)pL^*q_&{L;nes2R#MwKM1j$C
zm?bDL{$;`mp)f@O4n9$jo&U3(?}~2_0vpXI?(y^IT((_&>84DL4<<BD`SXr@7jK#?
zkh7t2%6<Edj?)*e@dCM_$(cP!?)MepS^O!fK-mwCQ;ysJY*=<UVy=V245bO5?ksOk
zYqnr+bTIH$c=}WOf$8rr8x1FHdaHFKuiaxCd(gIc&f7eFPqsRo$__vLna%A}mBQ1n
zoFC>mPTaz|WXnvZerW;E-40&6JwMDiH*pK^k}Y%D_P>_!{O#cNyK_Qm*Ajn)rRPI_
zM7DeUVh#G`+xA<^{gU~FOXXH~vLrnJJ9z!){Sdp@;}}cOv7APKUL{F!56SJEc6%gF
z-f%c|Be&q^wD>x6DR~dc{S!CemN;qGIHh)5QJS>UP5lY0YquAh`MYhZR|r3D!J7WT
zMddi>lUEVT6GQpkiuO3{vwC+j;vn-x8S4qFAJ3l<`B&(qOk>R1;-EAkrJ33j)<3f`
zb^q$D@|ms3^!rQ8N!An3$e*|>Retc^Kk<`RjWt{E$r@go?s1LhN!DHK#oOzZBZ208
geLq1?Z{i<j&JB;k-)!bx3C#8kp00i_>zopr0D%m7e*gdg
--- a/gfx/wr/wrench/reftests/border/reftest.list
+++ b/gfx/wr/wrench/reftests/border/reftest.list
@@ -1,16 +1,16 @@
 platform(linux,mac) == border-clamp-corner-radius.yaml border-clamp-corner-radius.png
 fuzzy(1,840) == border-gradient-simple.yaml border-gradient-simple-ref.yaml
 platform(linux,mac) == border-gradient-nine-patch.yaml border-gradient-nine-patch.png
 == border-radial-gradient-simple.yaml border-radial-gradient-simple-ref.yaml
 platform(linux,mac) == border-radial-gradient-nine-patch.yaml border-radial-gradient-nine-patch.png
 == border-radii.yaml border-radii.png
 == border-none.yaml border-none-ref.yaml
-fuzzy(1,68) == border-overlapping-corner.yaml border-overlapping-corner-ref.yaml
+fuzzy(128,69) == border-overlapping-corner.yaml border-overlapping-corner-ref.yaml
 == border-overlapping-edge.yaml border-overlapping-edge-ref.yaml
 == border-invisible.yaml border-invisible-ref.yaml
 platform(linux,mac) == border-suite.yaml border-suite.png
 platform(linux,mac) fuzzy(8,80) == border-suite-2.yaml border-suite-2.png
 platform(linux,mac) == border-suite-3.yaml border-suite-3.png
 skip_on(android,device) == border-double-simple.yaml border-double-simple-ref.yaml  # Fails on Pixel2
 == border-double-simple-2.yaml border-double-simple-2-ref.yaml
 skip_on(android,device) fuzzy(64,24) == border-groove-simple.yaml border-groove-simple-ref.yaml  # Fails on Pixel2
--- a/gfx/wr/wrench/reftests/clip/reftest.list
+++ b/gfx/wr/wrench/reftests/clip/reftest.list
@@ -4,12 +4,12 @@ platform(linux,mac) == border-with-round
 platform(linux,mac) == clip-45-degree-rotation.yaml clip-45-degree-rotation-ref.png
 == clip-3d-transform.yaml clip-3d-transform-ref.yaml
 fuzzy(1,4) == clip-corner-overlap.yaml clip-corner-overlap-ref.yaml
 fuzzy(8,60) == custom-clip-chains.yaml custom-clip-chains-ref.yaml
 == custom-clip-chain-node-ancestors.yaml custom-clip-chain-node-ancestors-ref.yaml
 == fixed-position-clipping.yaml fixed-position-clipping-ref.yaml
 platform(linux,mac) == segmentation-with-other-coordinate-system-clip.yaml segmentation-with-other-coordinate-system-clip.png
 == segmentation-across-rotation.yaml segmentation-across-rotation-ref.yaml
-skip_on(android,device) == color_targets(3) alpha_targets(1) stacking-context-clip.yaml stacking-context-clip-ref.yaml
+skip_on(android,device) == color_targets(4) alpha_targets(1) stacking-context-clip.yaml stacking-context-clip-ref.yaml
 == snapping.yaml snapping-ref.yaml
 fuzzy(70,2400) == clip-and-filter-with-rotation.yaml clip-and-filter-with-rotation-ref.yaml
 color_targets(1) alpha_targets(0) == clip-out-rotation.yaml blank.yaml # Unexpected color targets, see bug 1580795
index fe1fa836f8e8c8ed812cb3286b690bb7f39aabd0..a16e48d8a6a08badd9a6da9930378b8f4fc47ddb
GIT binary patch
literal 5007
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
J+TZOw^dI<42^0VT
--- a/gfx/wr/wrench/reftests/filters/reftest.list
+++ b/gfx/wr/wrench/reftests/filters/reftest.list
@@ -23,17 +23,17 @@ skip_on(android,device) fuzzy(1,12) == d
 == filter-saturate-green-2.yaml filter-saturate-green-2-ref.yaml
 == filter-saturate-green-3.yaml filter-saturate-green-3-ref.yaml
 == filter-saturate-blue-1.yaml filter-saturate-blue-1-ref.yaml
 == filter-saturate-blue-2.yaml filter-saturate-blue-2-ref.yaml
 == filter-saturate-blue-3.yaml filter-saturate-blue-3-ref.yaml
 == filter-saturate-red-alpha-1.yaml filter-saturate-red-alpha-1-ref.yaml
 == filter-saturate-green-alpha-1.yaml filter-saturate-green-alpha-1-ref.yaml
 == filter-saturate-blue-alpha-1.yaml filter-saturate-blue-alpha-1-ref.yaml
-fuzzy(1,1) == filter-hue-rotate-1.yaml filter-hue-rotate-1-ref.yaml
+fuzzy(1,14) == filter-hue-rotate-1.yaml filter-hue-rotate-1-ref.yaml
 skip_on(android,device) == filter-hue-rotate-alpha-1.yaml filter-hue-rotate-alpha-1-ref.yaml  # Fails on Pixel2
 skip_on(android,device) fuzzy(2,9072) == filter-long-chain.yaml filter-long-chain.png  # fails on Pixel2
 platform(linux,mac) == filter-drop-shadow.yaml filter-drop-shadow.png
 platform(linux,mac) == filter-drop-shadow-on-viewport-edge.yaml filter-drop-shadow-on-viewport-edge.png
 platform(linux,mac) == blend-clipped.yaml blend-clipped.png
 platform(linux,mac) == filter-drop-shadow-clip.yaml filter-drop-shadow-clip.png
 platform(linux,mac) == filter-drop-shadow-clip-2.yaml filter-drop-shadow-clip-2.png
 == filter-segments.yaml filter-segments-ref.yaml
index a71d050783c65b8643ade23c7634ae3d905576d3..b8fcfe511c1bbccbf456fff2e6eec1cb0c117a22
GIT binary patch
literal 6091
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
HADQ-F-UjD1
index 4a7c39de08fb73a65b8bea50dcac745303854c7d..11a98a0806d9d284a09e174ccc26584c30167087
GIT binary patch
literal 13045
zc$}?!i$Bx*AO9%|mHW3G_p#x7N-2^yMrtmLIHyhr<q|E@a@#Cy#z8R=ww3$koE;}!
z=6=gP(J?3Nj52p&*)+Epiy6PqbiTjeKk)1E=<?9#{r<e)&)4(yd_G_Eko=>IgZu%F
z1K)l3ojlSJaT)k~Q}SDOKkz4M{u=zd?@XJK2-}|{^B2YszFI(g4T=MF*b`dPR?SCA
zw`H>_?dYFw#0?+IJrMP}Q`O|RIJb{`em;HbE$8Zi^Qr<$*4{U&Iww`^Tyky&|7JXQ
zK&krjo<9?UmBPU#Et|1}*+TEOwfR$no;P*6@@E=M+9uj|=A!=6qAqD+T?6aG!Y*p6
zt3%o9wDeTEZ6Xg0MrY`4G8h^tlC^2o{{Qb^UOl!66;}<O(bOE+(SY9WE8%gMoiuVx
zQ8uA{MLh2OJM}r>-#_-X^4tg;ZcS$}_b}!S<@bU(nfXC1zEe5YbSd8$W`k*L$gL6A
z;yt<K2IzGflkj}abGGI^G$$gMBQSFv!k@ri`<&lnSwHI$$m$ZJ;g~N^h0Z$!6R`!n
zOQY(U0T$1>44kN>Fl7lZd@?y7lgQIyJ?jp`_nIMep=+L79h&7^{(0o=$_6O^qkGLw
zq|>ZGBjA=@?Apr{b<F7Hulq|cc&||{>UOwsOL<R!D8A2A%JH?gk(s;xx!K?2600Oj
z@MyAzRk+a;r~?&7O}n+d6#ro~c~)E!rlNe_JM8Y@_3K%q4LWRm@sfGZ-w(IDg%h_!
z@B^pQ^F`79<CCKkU$Hwuxlc2cl`XUz%s(IM3JrldPNFlP946kx!rS!txhdtMh=Ev*
zlBFmR`azE`LG-u6nl)PBi0`e!)0SHD^)~UJreAu)i324|P+3jKmq_h<_x$Cn2|cjL
z{ev$Z@sFxtw5+TzX__W=isI$Dywg=@8ooR*35sYG%arUOTvY6Td=uaKWPCj5BV)e#
zUTlQ|{m-}g?>F)T)(}OTb|xdYeKtSwS1)}ZxL~9sdbcnYJ69iYet(t9S*4tzsW%Ti
zlE(h<m3MdOQE4AQXFU0jn4CUxduRT^w<SB`l#sh7kzbGbo5tsZjH7J*m9`rBWp}w#
ztv9rp=)2B4IR_}-3G_r>lpKM`ZMs`mzmp#Ly+>ZOU}0iBW=GDo%@|@U6{!3i_i2-F
zQe<Q~R;2r%k=((=vzY=Y^K-IwWhI<=(|+)Tn(j`mnX>JVN|~=nJ)MgUy+Qu$u^I2k
zOwM4XKga???5oDpCZn;VLpiOd!04<LpAAwD31r03h)PZ+5l2V+U}u*aMN{hNUzZ2>
zHQ=Vd=5qyh%ys;9+g8@#;u><m;udOQB`;RIR7059UNHNiJDH@Qq6$-LnbsP%#V{i$
zV1v@_w!w~@T3i95eAK_ty0=JtA#VZQ7PD!eO7|+nF#~G5Cf9s=5D+7zZRoU0c2DtN
z3&9p0(V|giSvxUm|KP7UsRlh_Q3pMZN3aqcJTvMP`)#ofrpqVLCZar~khl_`k67zI
zw3iCY$m41B#mysxhv-shiWOqMmFer^BN$O-PX;%M=LjV;<l1*Q%_a0wgU}~iP7Y%q
zJ{`|^7C&>r8g;MF{Oj-EF|WzQIDuZ(B7=@#FLSYvKd2BlKM-$5Y$m4CgHB9{RsHoT
zDp$j&Dc^JUx1*`r8$TzRlN8XZR*p}a`ndls0prI_t95AQ#1k<+UIFo{lx)z^ZrdCB
z)ZDRW*s=zuc)1yOWBlA5$4Rd7OYkOSL*AlhJy0>XwHu7i(_9opEo`&JT{)yq>7V2d
z?p1}JpPW)KYai%qn7uODQuswP&YXU0{G%$|Pe|;m(xBZ`5jV9Gs^OoSN<v;UMrMCt
z?<A}j)D!=jzoN~7JojlwI^EDu7y?C+cp%sd-k@}M!q4seXctT)t;DFiH+F5HezdJ+
zYOAFi%r0!J5|6AOtKZ2VHael#jqE46c&eysaP051`<l8G_c32<493^Wl_9k$up%n`
zF>j`b>A;y@F!Dft&m!t4aEc91Im*Yod4erjtEt@5edvVw;z2)vmVbArc-NaHA=e)r
z9B>^c*D~LZy3kaVt&?qkexnZ@uVudP54CYv#R*xR;sf4XY{nC1v1>?UgI8?QT;9p5
z^(f|=?nv1ve#hCq=rsp&)b}SlBdDy77PpYJ=oZU=9dcmMFf!w4L;=(GmkWZqfvrDn
z+E_Z94+bo5pcYoKO^Rs6;iwH~#|$bDWl-w+ndJQ0aw2Sy?AbJ{BgFqz?a`I1>_vq^
zaMm(VBFm_IjcpTFEq+~HVnGDf<F4BbZGU-S)C++a*xI^(eQbCt2YioFiC)xe6eYW0
z_+O8=kAN(n*Jc|KT`+iBi4d{Fv1uEh5NLAwz1mQB>%bX{5zTVZ`yA5M@G2E;<(wf<
zgcudk3s=@&MaVoSu>R}|uqru*&qnFSk~E(;M2<tu<dR*S<9}g+s|@d@qun7ey6ZCN
z>LRS@OFo^4JBIz9mLA>^=}XB4wxm(Cqzz4@A0~WU?q0Oo0x`rfKcbHF-{?S$aE_m&
z|H5w4Tq$h}rKRI*ixNmsCL!bE`|GDhLyD5WhuU5%>I0q1K`KyWy2={5T9)bN^d#@_
z<NnB^1p0lRN#vA0;k}z{2;gnrg>B;cQE)`eT|@mJ<PH@5UA!;Z_KuR(Swq;^L7J%a
zHGZgY+e{{&dMyR|d{w<~j#O9(v9OsYUte&DiC(&-qn@+!<hsp-_bbr{Ggh}_&$vr?
zTbinRr(xt<#XamXZVZhuac!3de|vGw@}DS)PehCcx9zO2eo0Kzy0qB*WqqBXw%rrW
zl5_IhtD5sq=i)7<IY*s&y$e710Pg7WIph7tAub0{o9qsV=<9_sM)TN8R)iAux0toG
z8bAljXnACQls)h~Bxw!Yc%-_R83}mevApZsD++!pk9pQlkOx($Iq&0mCnfBlJuEA|
zbnkyR>YaONjojYcc|StjnHD@vPYvH#8yD4z?zVlYO6^3Lz#O$570g&u-b&+&2WcIR
zpl__a?cyyMq4Jnp+r8_LTytB=V6fLVYrVe4XweE?$t&))DFJ#E+SAuTTomSWkqZB}
zcJ^32P`f;vrPcZoljghl1PA-Z=*3x+x}vsaJ2N?3%vXe=ahRMlXY;ws%E#!krb#TK
zUV-HsgxD?MRDLQCcMv;O7cmxSF@Cy0SA7nXckhab%D292sK-#3)eHlhcH4$#PiaUB
z=xd8{A1#5kBTFTQcW5@;uE_dBm+rKES*BBLl#z}y5{b#s>NGetY&-8**oPCo!45L;
zR|UJoY|k&`Q8{WMtwU$Z^Coy?^1g<RH)}yR(JJYwo%daD7X3}mWPr>n!I3cbR_;;^
z)1%|s)$mK0%NI7S|A1a)#m;4&8S&YfpOe>7_sEECSRGz4tJ~>yKJOQwe>HqBz!C-J
z@u*i!ap7unZTuRLQ9Mq4J80@Bl$|Sp(#}Lga9v5vl3+G1)tFHq0xu;B7blC5yenCc
z5yE6=cfep6)(y$pc$Qa08<!NU&DZ0H1iSp=d>(zu2xom08pGnR<N)n^OmQT*Z8Nu8
zH2X*^);eg_d|`4i=C518{ePrUk06Xrk+k(;o>JYm;b?b7kD`yZFUBOxqgelvu9nlU
z%OS~LR?&tSmG&9c8J+=N`A(e6<J4u=_U3Ym69vTmK<M(==n<E{c~fHQo9u+j$QjBu
zYIKbi64H1c=^PN$@mm=_g(Hd}I|)0)N@AziQ;SFxs%UFzys1WUGKT9MZmOb+Fgh;l
zj5@EXc~#(<AWB}0q9xH?L%-eW0u;(ZyV7=gQY=Q)V&?=;(^BWDMH3rU>lF)Go=3=>
z<z(k;0$Lsp6>&&N)&j`WO<t4x)_;#@4!4{rh@y;beJvloYxA{ZK-1E+%2lU+tz%)h
z$u&Qj#877;4^qH>e3AnDqc^i%V{mVGsUn4{(Jxeg*Zt7@m5^9BsyP{cX0nD%?KKK%
ze%><mrle0Aad^DMG|bj7LyJ=gTp35{SRLHUvc-r<9xp!Ptie!iR*CD{m!wzZTbP$^
z&0v~pCQsTB17WxD`Wl#K%h55R8CvV0v%lA7Q(;BqLoA0rMDQBW=Z~L3jE={3AM&F%
zK3p6!7k*M_isEcT(RT<+yAB-yF){&6H)Pu%UG$av)B=a%XsphTy9NqJwnNOmFdQ)%
zr~5xM=-pmnede#&W)%wEzClAWl6oa#Om{tVX9sIBa#Po$B?k;<XLIk`l)?SE8`ZAY
z^(mC!5JtxsPJS7=V{q$UFKl_h4S7D`4Gk@w##fhNMR8h1Jlt>(ffl;~t{X{jyS>z_
zsosznJv^H-lI|5LaE1YU@Ib&8D-7p(9rlzC^L6>sU_z}ehM@dSff(J%-e0rRCxhFB
zgaG~{4e0pTtr_9y=!r3+A;_`85~)B_kzi%YvR%AbCc&y1N0;L#e50roK+%7JP2lwV
zOduW3pQotCtQkTB<(&PM^4`PF-s>esCGrNBk->0&-oidfcY>iF5>r$nazG8!CQAs2
z!Bp}^_l&F_MA{HcqWyez)bWBfWblz{AY3$018oFQu5Grq6#g-8Koe$Kg$f>u`mt$e
zy{)L*0dbi!P;$z{)>|dvJ!n_=YXO+h?IRV6?Q#;vN4>>b(bxuNl8$a4uo$hkj>1bh
z*k|?()U~w`-}RXV?4>;{bX_C4_)!wZ4ogr11pS!1uC(IiPi3nQxhRB5^x}p3k$2v$
z!l#c?jmga6=qS;Hag%I0+4B@_gn{v}oHI(PDGQJjliiqle~tJ;Rcp5^F;z6zqR;g^
z731q&u~vX$dYIOuW5*_l;|@I#Y2|J?n#vIXUPpy^iCvaIT(pp)fcexhWB=#z?5GFW
zX<E8X=OZmc><&nV0z8_=P}cO%_HsZZnL8?=N2R2VY9z_>aNn1Q-UP~4`Xup7zY*ZA
zwyTQ=bti)B*9vpOQ4px(#b1hgI6$D%cGTHY3iaZuqut*%qKu&Phb6svxQ~_Mo%PNN
z85}cg5?sR+=MChYHO0K%deg_PXAZ}Fa(*o<M^S+z{NfYF0$(Y_H~Czb@~|K%0hcWP
zv+r20>S6KqqGqW00};P!Z?BLYGK{w;j4Vd<bb|HtY=123Dc;wee8|sXrDio$w;Mha
zRm2;-aCjWJC59bkhuxy7Sufa*E+l>_kI;c4bSgG-*Izajol;f2FKr8uLn)g9vXJ$*
z6e_`)n{mGIj4_>myS4nbi;H0H3UNy>nDbxE%blafFL*E&^kr~-30AwXyL#{ff{m&(
z>I?%g>g^_3Bg>L_U<dMb@uvbn!~>mw0rJ<$9NW9`U~CyWp5Su*7~fwpKH+^v&HJc*
z*cux9Pg6cpP`?$7j%ex<{PieR%e1YDkiK4dy)DAyO+i6UJ_t?f>{O6;<-*1kX`(nX
zu9oOn_SP8iu<{#eJ_00WHC_DGUi8qxC1ixb&|CduH2scG>nhdk%Q;6%!n6DP0DZwE
zd<^7HS-0)sc<|j-m9_s@)gGX#Uvs;HYPnVsOY$1(05nZ&W9uDFJ~papzut!!>Ay4#
z1=>afm4xndV-acBRe|I=T&UEAEO0w%WVrd2ZJDlhHF&K&)=;n8_HtExGsMvBd50AX
zhhRgJYO7`1ZSOc<``qjYRcDp>OiIi-&D3q{QvtBIzX>c3s2P~X_lzhHI2X?MVCRll
zSCkaL9K(56Y8CKsIX!rary|QC&9oj^5{iHr{*dhQ^BYPQV9X7+%QdTI9lL^oz9dhG
z`{!B@a42IV{Y}2l<Op%eqQw^sc6jVF+2Yg09Mtr$qGn`(tURRRY;R*^C}{4Kj?MRu
ziw#k<(UcxY(peYDA-w_N=w)vI-n(8qd9np5SsxH&^E*6-3pLv~=coh+E(pY7Jz9sk
z@RbEqWgOoQ5XDg*=~UqM-!3EklvA7E%NAbAQ;Pr;hqSWXTNG?lDI(=WgTN%0|Dn^1
zC-VyTOqHt5E0a#l0f7rxYO*PK9>Z>0s;O@YGN1gFT%D6X9C@9<e?ag&lAijEMt#zZ
z*#BJ4%fO;(wwVBzVP1QeTaoTFxv+27H@$z)C-G(!!@ynS>)Rk16%|T8iOw-FWjHUM
z!z?uOm$j_;GKuD7_-P<GhXI=P0CO79EP#3|!nP&9(Ux(+U+Jk@VG|Kk>p=nh*_==a
z1kw$RJMphU;hlpmyb-Y;Eg*=}5d$)Z9LIT+0cW6cW@FdhX)c)QShf5FAeHYkvO!;G
z*Tvp4)CG*mGaF)XEcyjCyGPlQA|tU|U><ux%R?$4-5U7K`cNI#L055M@4B$iw8d7k
zerY1+qG-J!_AK?$eH7$rpHZWsNkcL{d7O$~T+^~b!!g$fbo@pC78=rZVv}oydMTbh
zwmy+cCWCt>hobEW!;4&|w6t6@@?z0n<Zqyrl3nky<GCM)=`#FLng3D0`^!UX@n%d?
z`cTjko*f<o)N565!D}JCOvK2!%K`g!LST}a7EIwgDs+`~NG9Rk4c4Wf>jgevJ-}I}
zvAfLpNDO>?+8UEDu^JLDSJH1%l?469dp1^ze6r_ghcm{pQ6hni%7@!FI{|229DA-;
zT^;&#D}6jYNVj24CTkxAtPgYKvm;cfP(S`dbZB|NN7eCb9+sjE&HICX05$gla7oO3
z%RqDC;Lf1nX=<w0m6&^6rxCTgZQ+I>hAf8in2s`%0A{=R5L?#7#xB!q89`n_x=Q%~
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
W)z6Y@2YbE)ej)8#5M}3Y#Qz^NjfPtQ
index 6fc18cd8c0eb2931605546f016a87a0b0363dd2a..4945b48aa7daddd467962a88686165353d382c79
GIT binary patch
literal 12536
zc%17D@N?(olHy`uVBq!ia0y~yV2S`?4mP03zO)&47#Ixpd%8G=RLprh?II^@yWkO-
z-Tx;EKX(z}7kl>JqG{qZN3F#FU%wxg7X*TjQnnEwTK{shD2Qt`%B3y$^ZCjR|NeZg
z|NVOX{F!^tyva_}H?E#}^ZJ>%v~Q-Hr-Ou2)8dVPf4u+y*W>>GHs9YrH%Zqo{$>gy
zjMC#l1Txp`nUc~Y>#7YiYR>{S>Kp%_b@TL@eQDo}AZBH!*}psZ>+7iUQRQSQ2N6R?
zIap{^`Ka<y<)g|+m5(YPRX(bGRQag#QRPFT{XVLERQag#QRSn`N0pB%A5}i8d{p_U
z@=@iZ%14!tDj!uos(e)WsPa+e)KWgER$2@X<^L@C!(3ckj{N5wT+6OTxue`s?kIPZ
kJIWp9j&eu2gO>X_{#I$$X4e~n-3&nB>FVdQ&MBb@0Cf$<qW}N^
--- a/gfx/wr/wrench/reftests/mask/reftest.list
+++ b/gfx/wr/wrench/reftests/mask/reftest.list
@@ -2,15 +2,15 @@
 skip_on(android,emulator) == mask-tiling.yaml mask-ref.yaml  # Android emulator: GL error 502 at tex_sub_image_3d_pbo, fails on opt
 == nested-mask.yaml nested-mask-ref.yaml
 skip_on(android,emulator) == nested-mask-tiling.yaml nested-mask-ref.yaml  # Android emulator: GL error 502 at tex_sub_image_3d_pbo, fails on opt
 != mask.yaml green.yaml
 == aligned-layer-rect.yaml aligned-layer-rect-ref.yaml
 == mask-transformed-to-empty-rect.yaml mask-transformed-to-empty-rect-ref.yaml
 platform(linux,mac) == rounded-corners.yaml rounded-corners.png
 != mask.yaml out-of-bounds.yaml
-platform(linux,mac) fuzzy(1,17500) color_targets(3) alpha_targets(1) == mask-atomicity.yaml mask-atomicity-ref.yaml
+platform(linux,mac) fuzzy(1,17500) color_targets(6) alpha_targets(1) == mask-atomicity.yaml mask-atomicity-ref.yaml
 platform(linux,mac) fuzzy(1,17500) == mask-atomicity-tiling.yaml mask-atomicity-ref.yaml
 platform(linux,mac) == mask-perspective.yaml mask-perspective.png
 skip_on(android,emulator) == fuzzy(1,7) mask-perspective-tiling.yaml mask-perspective.yaml  # Android emulator: GL error 502 at tex_sub_image_3d_pbo, fails on opt
 platform(linux,mac) == checkerboard.yaml checkerboard.png
 skip_on(android) == checkerboard.yaml checkerboard-tiling.yaml  # Android emulator: GL error 502 at blit_framebuffer, fails on opt emulator and on a Pixel2
 == missing-mask.yaml missing-mask-ref.yaml
--- a/gfx/wr/wrench/reftests/performance/reftest.list
+++ b/gfx/wr/wrench/reftests/performance/reftest.list
@@ -1,1 +1,1 @@
-skip_on(android) == color_targets(2) alpha_targets(0) no-clip-mask.yaml no-clip-mask.png  # Too wide for Android
+skip_on(android) == color_targets(4) alpha_targets(0) no-clip-mask.yaml no-clip-mask.png  # Too wide for Android
index 1259e39bb443c3a4c7f9e8a3ed48209090050f21..fcd54a788fb17d0b5d917f83fe559ec5516d9450
GIT binary patch
literal 6814
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
Y^W-xNBL=^I_y`<&lR|EIBjw|N0#-3BasU7T
index 0fdb1a12ddce28e20740a623d806010b79691840..70961b6b126182f2206c844dc64bfbff9f8b1422
GIT binary patch
literal 19501
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
--- a/gfx/wr/wrench/reftests/text/reftest.list
+++ b/gfx/wr/wrench/reftests/text/reftest.list
@@ -17,18 +17,18 @@ skip_on(android,device) == shadow.yaml s
 skip_on(android,device) fuzzy(1,3001) == decorations-suite.yaml decorations-suite.png  # Fails on Pixel2
 == 1658.yaml 1658-ref.yaml
 fuzzy(1,5) == split-batch.yaml split-batch-ref.yaml
 # Next 3 tests affected by bug 1548099 on Android
 skip_on(android) == shadow-red.yaml shadow-red-ref.yaml
 skip_on(android) fuzzy(1,735) == shadow-grey.yaml shadow-grey-ref.yaml
 skip_on(android) fuzzy(1,663) == shadow-grey-transparent.yaml shadow-grey-ref.yaml
 == subtle-shadow.yaml subtle-shadow-ref.yaml
-== shadow-atomic.yaml shadow-atomic-ref.yaml
-== shadow-clip-rect.yaml shadow-atomic-ref.yaml
+fuzzy(1,64) == shadow-atomic.yaml shadow-atomic-ref.yaml
+fuzzy(1,64) == shadow-clip-rect.yaml shadow-atomic-ref.yaml
 fuzzy(1,1) platform(linux) == shadow-ordering.yaml shadow-ordering-ref.yaml
 # Next 6 tests affected by bug 1548099 on Android
 skip_on(android) != synthetic-bold.yaml synthetic-bold-not-ref.yaml
 skip_on(android) fuzzy(1,1786) options(disable-subpixel) == synthetic-bold-transparent.yaml synthetic-bold-transparent-ref.yaml
 skip_on(android) != synthetic-bold-transparent.yaml synthetic-bold.yaml
 skip_on(android) != synthetic-italics.yaml synthetic-italics-ref.yaml
 skip_on(android) != synthetic-italics-custom.yaml synthetic-italics-ref.yaml
 skip_on(android) != synthetic-italics-custom.yaml synthetic-italics.yaml
@@ -65,10 +65,10 @@ fuzzy(1,113) platform(linux) == raster-s
 skip_on(android,debug,device) skip_on(mac,>=10.14) != allow-subpixel.yaml allow-subpixel-ref.yaml  # Android device: GL error 502 at draw_elements_instanced
 skip_on(android,device) == bg-color.yaml bg-color-ref.yaml  # Fails on Pixel2
 != large-glyphs.yaml blank.yaml
 == snap-text-offset.yaml snap-text-offset-ref.yaml
 fuzzy(5,4369) == shadow-border.yaml shadow-solid-ref.yaml
 fuzzy(5,4369) == shadow-image.yaml shadow-solid-ref.yaml
 options(disable-aa) == snap-clip.yaml snap-clip-ref.yaml
 platform(linux) == perspective-clip.yaml perspective-clip.png
-fuzzy(1,6) options(disable-subpixel) == raster-space-snap.yaml raster-space-snap-ref.yaml
+fuzzy(1,39) options(disable-subpixel) == raster-space-snap.yaml raster-space-snap-ref.yaml
 # == intermediate-transform.yaml intermediate-transform-ref.yaml # fails because of AA inavailable with an intermediate surface
index 627f69184418de1babbfd7f44a67a7a38db4ccf8..d9a50238331d0bc6baa9c93c369b106a5c7ae380
GIT binary patch
literal 27620
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
Qz<-+_Bp!IM&*|@f103V@=Kufz
index 44410fa51ef044335d0a6a7bb0e7b0b88790d1e1..4ff177bae226df37c4953b0c632439ef39fe1655
GIT binary patch
literal 4236
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
Bl2rfz
index f85232d827642e54c5ac58c319c8bffb8a0db4f1..92e25ec5e59cbdb0e6d8b6538f320927cfc3a333
GIT binary patch
literal 2138
zc%1E)?@t^>7{`~o(zy!h%pJ(q)Z)(e4r`jq0=1|o%5+#b4k*-Lm$cFAkr+&y$ceTz
z4Qkel-GfaF<dRm3G@6EL)Ox(AA!&%+xJ{$6SZ(00wi?0<4SKXx45A^N&+<Q*Xu^wq
zvCrr8d}rpFY_jp@rrP{<_pK8IAwN*ZcMC$!2k<0OE>wOi+?N#uBnNo)Go6F86Bj<6
zY!hl)cGVVCZ%9<<83ldxJ1XaYbFoe<8a<xfcjV2_Q{Ceqg|qXw*LwsWLvJN;POqB^
zyP5b@y&=@Oh_FRo^MIENXI9}V{C~os`Pmy4U4NA|7FRV~d<@=yFK4%ZYP^>E?Ajm8
zW0F-LL!0JHS-Gk|i^$T<2)bgUdrSD-)ebTcCtK@{@WDXrrHI%==;F-43YB?#&?z1A
z(DB(Jr*w<*!Iax+xY=M-p7kmf9%VF+qgDHPn@?-sE>G{BG_N+8Qx7rw@B#AvyOMP&
zW^|;>oOOE;x%|B2%~5$e{k4-f<mDSv$jS2ujLP9Y3VEFg9Q7-j;}yx%A?=uxw}aWy
zjO?Vm7&BVaPdnSndg#I{$DL+G*3K==R&*^dwPq4h^i^grcV(*@i=XT!8A!{Eh!<d?
zqms4FMJ`h<`8c!h7$nn;qYZ#$zVQSg*qu)+^~=+XHhRa$2j7;gWXzbyiqwyz+altZ
zgpSvm;Rl)hXq@EjG%6ofbs3Rgd|I!EVg+tvX|vW#=*c+Q46}AC=|OCrw$USAJ}0UA
z6-4|sX4u2TZ;29m4_iSSJ?G`^E>)jEWN*D0E@WZ~D<SAQ55os^kE&ln<R&1(#6Phz
zdJ0=(E0>TIRsEEUY^^b;d`t|wmC*rgeQ%?4fO28dF7gQ=%EbL{rLzxPKdg*8dAF*U
zxX1xOElk|wRu+4(HEE+a6yBWfFkkp$Xn5D@;hBk#i`U*N;my}uO>Pt-l2|BENW{y;
z^H11yu@J-|?N}cgDU<aUQv!4s6O|2HG-_)xq?I%1%6Ad-LlYbooI=$tuL0#onMOG`
z!msUt7~~=uYXC@uiAP2>=*dAO^Ho1oa%G;}5d=pvu(jz&53EoM((6G-g0}119SM$e
z=!7Gk#1`=vfz-~#+B+eT?#HyU|0qZYnK9M&vov;CVHy2D_Pwsce;NM0zO-rP<zL0{
Q0{k-wftn_Mj)nDq01EC?QUCw|
index bf8a9729b97e9e857f2db8551bc84c92b8f35951..d9fecf924e13157ea54e04bc797d2f6e6d3aa782
GIT binary patch
literal 2010
zc%17D@N?(olHy`uVBq!ia0y~yV5|aSE)F)Jh)mPGKn4c(g`O^sAr*7p-icnZG*$Na
z$Nx<_2I(s#4jxon#I0YVrZoG+x@9X=nwKaXR<lxIo#+->GJ~Tf!zw^5lciPUkcy-T
zn^@SDnA9bnCX2=6Tue@K2#Y>uyu@95EiQZ8=DE$$_tMks|NN*i%lY?y*WZKFkKXGx
ztzM<cki=>0V6l*$L;VZG!xlM(ITx5)gsU0~ocIO&UN9aSl^jx%?`B>&pZ50pO4(as
zrKe3px5vhQec<|*_1fDz$5-F`(!Q$y&xTj0tZ#9@-Z+OfVbyb<zx8oprH6S#&11t$
z3O+K2R)1fk{Nr>a!!oPf7w>D1KZ<?vaP8a1b!G2Y|N3`)m6`1&IlnYZ?gJsqdH(iZ
z53l_d{q{l6&B6t*roUfP_0;~A3s`IBi~S#Ot~y`4S9VU}`d`&o|HX#h=DQjNmQ(z)
zJwEj7z4_akH>W+f4Xv-MweH&va*OH0|If9>>isNs?X)cpi!BenT5f-_FL~N#2A{2J
zU&8Okeck+h%WU4l@2R2rKZ32FfhDAVRhOR&``2>dSmo{fRquA~kuC0yWKfId{rmg-
z*{u8T$~G+Id$ZzJ-3D2xaAp75R~yB*H}ih|xjwY^EBD)oGfW0IvtFdXZSO5V`8Sk(
z`}Sl*?gJ@K_6yYGB1+E*YXhxO`@%e{eoyJ;i&KGy2>)V~wcMX|dLoo_cE8WNF6;0#
z#u+{@*j2tb_&eDvEM%_|`o+j;dtvegevcQ8^IGa0ocO<}d|?)<TA;pAe!>N2Th6}?
zEpjhBN3{&F7WZ@OZxyAaiZz@Bam>SWt#%nf<Ny51s)Lgu@!t$e<N53Jjwb;XhB@zl
zc`?$qD$e>wK=rq<+Na&HRAgWAdQIM62cY=(_@L5{%rNoyyGz2R|63}XGh_SzU9ZB!
zw<PC*64~m7>u;{P_kHrJ+w1bor60|k8@hh?cG+T3K8X_k)vg!w$N0m3{oM0&Lg)V~
zyV`qw`{Nl;br^!za{j%ee=qdwyZPIjH$U67d-cB`$I4{#LD^EhrS6^e{Fpt5pPbqK
z;^3;kyH{<KTelUIRZ1^iIA8nzap?7XclgfDxPC9Z^!U_J{r}<B727~&&Ncc{yuUX4
zs_FI+*<07-Uc5SNziQXdTdRuY^ZC^`gYxI)wz|B3d$r^L1zk0_zbrT7jcNVbTf5Ug
z2A;Ycb&kp4YH{1Y8SVNjetm3T_3iCCs~vkQ<jmyPR-Jyo%I;V5s?+bY^w%6O5^Gp_
zP4?I0v-h9M-;4VCUN^KqXVtI2vu}5=xwUowE7$+)t4{u3rB|`z)uHxRKchj$8ZTs5
gm^3H~+#Smqts=MRF()o;1J>CLp00i_>zopr06e>UBme*a
index ba12c4bbcbc3988d419bc9e6e7a1efa9b43d2ba6..d6611df48103080ee3086e0f7dcdc45ee69b0867
GIT binary patch
literal 16957
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
bB!~RAktC#dy3S@F_z$kGr}q3WYsCKnXoorp
--- a/gfx/wr/wrench/reftests/transforms/reftest.list
+++ b/gfx/wr/wrench/reftests/transforms/reftest.list
@@ -26,17 +26,17 @@ platform(linux,mac) == perspective-mask.
 == clip-translate.yaml clip-translate-ref.yaml
 platform(linux,mac) == perspective-clip.yaml perspective-clip.png
 platform(linux,mac) fuzzy(1,2) == perspective-clip-1.yaml perspective-clip-1.png
 platform(linux,mac) fuzzy(1,2) == perspective-shadow.yaml perspective-shadow.png
 # The ref YAML here produces significantly worse quality
 fuzzy(200,4127) == perspective-box-shadow.yaml perspective-box-shadow-ref.yaml
 == complex-preserve-3d.yaml blank.yaml
 platform(linux,mac) fuzzy(9,348) == perspective-border-radius.yaml perspective-border-radius.png
-fuzzy(1,6) == snapped-preserve-3d.yaml snapped-preserve-3d-ref.yaml
+fuzzy(1,38) == snapped-preserve-3d.yaml snapped-preserve-3d-ref.yaml
 platform(linux,mac) fuzzy(1,122) == border-scale.yaml border-scale.png
 platform(linux,mac) fuzzy(1,16) == border-scale-2.yaml border-scale-2.png
 platform(linux,mac) fuzzy(1,69) == border-scale-3.yaml border-scale-3.png
 platform(linux,mac) fuzzy(1,74) == border-scale-4.yaml border-scale-4.png
 # Just make sure we aren't crashing here
 != large-raster-root.yaml blank.yaml
 == flatten-preserve-3d-root.yaml flatten-preserve-3d-root-ref.yaml
 == flatten-twice.yaml flatten-twice-ref.yaml
index 09333cec74e4b60ad2cde5b200ebbebdb5f200da..4fcfcc73291718e0016899afdd896001393fa669
GIT binary patch
literal 3752
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
--- a/layout/reftests/async-scrolling/reftest.list
+++ b/layout/reftests/async-scrolling/reftest.list
@@ -45,19 +45,19 @@ skip-if(!asyncPan) == position-fixed-ins
 skip-if(!asyncPan) == position-fixed-inside-sticky-2.html position-fixed-inside-sticky-2-ref.html
 skip-if(!asyncPan) == position-fixed-inside-sticky-3.html position-fixed-inside-sticky-3-ref.html
 skip-if(!asyncPan) == sticky-inside-fixed-1.html sticky-inside-fixed-1-ref.html
 skip-if(!asyncPan) fails-if(!webrender) == sticky-inside-transform-1.html sticky-inside-transform-1-ref.html
 fuzzy(0-1,0-60000) skip-if(!asyncPan) == group-opacity-surface-size-1.html group-opacity-surface-size-1-ref.html
 fuzzy-if(Android,0-1,0-197) fuzzy-if(webrender,0-1,0-1) skip-if(!asyncPan) == position-sticky-transformed.html position-sticky-transformed-ref.html
 skip-if(!asyncPan) == offscreen-prerendered-active-opacity.html offscreen-prerendered-active-opacity-ref.html
 fuzzy-if(Android,0-6,0-4) fuzzy-if(skiaContent&&!Android,0-1,0-34) fuzzy-if(webrender&&gtkWidget,64-64,24-24) fuzzy-if(webrender&&cocoaWidget,7-7,37-37) skip-if(!asyncPan) == offscreen-clipped-blendmode-1.html offscreen-clipped-blendmode-ref.html
-fuzzy-if(Android,0-6,0-4) fuzzy-if(webrender&&gtkWidget,64-64,14-14) fuzzy-if(webrender&&cocoaWidget,7-7,37-37) skip-if(!asyncPan) == offscreen-clipped-blendmode-2.html offscreen-clipped-blendmode-ref.html
+fuzzy-if(Android,0-6,0-4) fuzzy-if(webrender&&gtkWidget,64-64,24-24) fuzzy-if(webrender&&cocoaWidget,7-7,37-37) skip-if(!asyncPan) == offscreen-clipped-blendmode-2.html offscreen-clipped-blendmode-ref.html
 fuzzy-if(Android,0-6,0-4) skip == offscreen-clipped-blendmode-3.html offscreen-clipped-blendmode-ref.html # bug 1251588 - wrong AGR on mix-blend-mode item
-fuzzy-if(Android,0-6,0-4) fuzzy-if(webrender&&gtkWidget,64-64,14-14) fuzzy-if(webrender&&cocoaWidget,7-7,37-37) skip-if(!asyncPan) == offscreen-clipped-blendmode-4.html offscreen-clipped-blendmode-ref.html
+fuzzy-if(Android,0-6,0-4) fuzzy-if(webrender&&gtkWidget,64-64,24-24) fuzzy-if(webrender&&cocoaWidget,7-7,37-37) skip-if(!asyncPan) == offscreen-clipped-blendmode-4.html offscreen-clipped-blendmode-ref.html
 fuzzy-if(Android,0-7,0-1406) fuzzy-if(webrender&&gtkWidget,1-1,20-20) fuzzy-if(webrender&&cocoaWidget,1-1,19-19) skip-if(!asyncPan) == perspective-scrolling-1.html perspective-scrolling-1-ref.html
 fuzzy-if(Android,0-7,0-4) skip-if(!asyncPan) == perspective-scrolling-2.html perspective-scrolling-2-ref.html
 fuzzy-if(Android,0-19,0-4) fuzzy-if(webrender&&gtkWidget,24-24,14-14) fuzzy-if(webrender&&cocoaWidget,13-13,39-39) skip-if(!asyncPan) == perspective-scrolling-3.html perspective-scrolling-3-ref.html
 fuzzy-if(Android,0-7,0-4) fuzzy-if(webrender&&gtkWidget,54-54,14-14) fuzzy-if(webrender&&cocoaWidget,20-20,40-40) skip-if(!asyncPan) == perspective-scrolling-4.html perspective-scrolling-4-ref.html
 skip-if(!asyncPan) == perspective-scrolling-5.html perspective-scrolling-5-ref.html
 pref(apz.disable_for_scroll_linked_effects,true) skip-if(!asyncPan) == disable-apz-for-sle-pages.html disable-apz-for-sle-pages-ref.html
 fuzzy-if(browserIsRemote&&d2d,0-1,0-22) skip-if(!asyncPan) fuzzy-if(geckoview,2-2,242-242) skip-if(geckoview&&debug) == background-blend-mode-1.html background-blend-mode-1-ref.html # bug 1558286 for GV
 skip-if(Android||!asyncPan) != opaque-fractional-displayport-1.html about:blank
--- a/layout/reftests/position-sticky/reftest.list
+++ b/layout/reftests/position-sticky/reftest.list
@@ -46,10 +46,10 @@ skip-if(!asyncPan) == inline-4.html inli
 == column-contain-2.html column-contain-2-ref.html
 == block-in-inline-1.html block-in-inline-1-ref.html
 fuzzy-if(skiaContent,0-1,0-22) fuzzy-if(winWidget&&!layersGPUAccelerated,0-116,0-1320) fuzzy-if(Android,0-8,0-1533) == block-in-inline-2.html block-in-inline-2-ref.html
 fuzzy-if(Android,0-8,0-630) fuzzy-if(OSX,0-1,0-11) fuzzy-if(skiaContent,0-1,0-220) fuzzy-if(winWidget&&!layersGPUAccelerated,0-116,0-1320) == block-in-inline-3.html block-in-inline-3-ref.html
 == block-in-inline-continuations.html block-in-inline-continuations-ref.html
 == iframe-1.html iframe-1-ref.html
 == transformed-1.html transformed-1-ref.html
 fuzzy-if(Android,0-4,0-4) fuzzy-if(webrender&&gtkWidget,31-31,24-24) fuzzy-if(webrender&&cocoaWidget,8-8,37-37) skip-if(!asyncPan) == transformed-2.html transformed-2-ref.html
-skip-if(!asyncPan) fuzzy-if(Android,0-10,0-4) fuzzy-if(webrender&&gtkWidget,57-57,24-24) fuzzy-if(webrender&&cocoaWidget,16-16,40-40) == nested-sticky-1.html nested-sticky-1-ref.html
-skip-if(!asyncPan) fuzzy-if(Android,0-10,0-4) fuzzy-if(/^Windows\x20NT\x206\.1/.test(http.oscpu),0-4,0-104) fuzzy-if(webrender&&gtkWidget,57-57,24-24) fuzzy-if(webrender&&cocoaWidget,16-16,40-40) == nested-sticky-2.html nested-sticky-2-ref.html
+skip-if(!asyncPan) fuzzy-if(Android,0-10,0-4) fuzzy-if(webrender&&gtkWidget,56-56,24-24) fuzzy-if(webrender&&cocoaWidget,16-16,40-40) == nested-sticky-1.html nested-sticky-1-ref.html
+skip-if(!asyncPan) fuzzy-if(Android,0-10,0-4) fuzzy-if(/^Windows\x20NT\x206\.1/.test(http.oscpu),0-4,0-104) fuzzy-if(webrender&&gtkWidget,56-56,24-24) fuzzy-if(webrender&&cocoaWidget,16-16,40-40) == nested-sticky-2.html nested-sticky-2-ref.html