Fix border segment. try: -b do -p linux64 -u all[linux64-qr] -t all[linux64-qr]
authorGlenn Watson <github@intuitionlibrary.com>
Wed, 20 Dec 2017 09:12:46 +1000
changeset 1380666 9b4d2e18cdfaccb5a5f75924f7f6dfd83afc4519
parent 1380542 797002beb9c5ef1988c11900b20cd937ecce6142
child 1597644 a412d36132f72b9f2113e811782d14225b1806d2
push id242569
push usergwatson@mozilla.com
push dateTue, 19 Dec 2017 23:19:28 +0000
treeherdertry@9b4d2e18cdfa [default view] [failures only]
milestone59.0a1
Fix border segment. try: -b do -p linux64 -u all[linux64-qr] -t all[linux64-qr]
gfx/webrender/src/prim_store.rs
--- a/gfx/webrender/src/prim_store.rs
+++ b/gfx/webrender/src/prim_store.rs
@@ -1325,25 +1325,34 @@ impl PrimitiveStore {
         clip_store: &mut ClipStore,
         node_data: &[ClipScrollNodeData],
         clips: &Vec<ClipWorkItem>,
     ) {
         debug_assert!(self.cpu_metadata[prim_index.0].prim_kind == PrimitiveKind::Brush);
 
         let metadata = &self.cpu_metadata[prim_index.0];
         let brush = &mut self.cpu_brushes[metadata.cpu_prim_index.0];
-        if !brush.kind.is_solid() {
-            return;
-        }
-        if metadata.local_rect.size.area() <= MIN_BRUSH_SPLIT_AREA {
-            return;
-        }
-        if let Some(ref segment_desc) = brush.segment_desc {
-            if segment_desc.clip_mask_kind != BrushClipMaskKind::Unknown {
-                return;
+
+        match brush.segment_desc {
+            Some(ref segment_desc) => {
+                // If we already have a segment descriptor, only run through the
+                // clips list if we haven't already determined the mask kind.
+                if segment_desc.clip_mask_kind != BrushClipMaskKind::Unknown {
+                    return;
+                }
+            }
+            None => {
+                // If no segment descriptor built yet, see if it is a brush
+                // type that wants to be segmented.
+                if !brush.kind.is_solid() {
+                    return;
+                }
+                if metadata.local_rect.size.area() <= MIN_BRUSH_SPLIT_AREA {
+                    return;
+                }
             }
         }
 
         let mut segment_builder = SegmentBuilder::new(
             metadata.local_rect,
             metadata.local_clip_rect
         );