Closed Bug 1752348 Opened 2 years ago Closed 2 years ago

Item not visible if it has both a clip path and a mask applied

Categories

(Core :: Graphics: WebRender, defect, P3)

defect

Tracking

()

VERIFIED FIXED
99 Branch
Tracking Status
firefox99 --- verified

People

(Reporter: nical, Assigned: jrmuizel)

References

Details

Attachments

(5 files)

I don't know if this scenario can occur outside of the blob grouping context. When an active item (could be an image, or some other type of content like a blob group) has a clip path it renders properly, if it has a mask it render propery, but if it has both, it does not appear on screen.

In the attached test case, the first row has images which are active if the pref gfx.webrender.svg-images is enabled, and the second row has solid rects which are made active by wrapping them into will-change:opacity containers.

From left to right we have both a clip path and mask applied, only a clip mask and finally only a mask.

Currently, the left-most case (clip path + mask) isn't shown (unless the pref is off in the image case).

The interesting part of the WebRender display list:

     PushReferenceFrame(()),// [19]
     PushStackingContext((
      origin: (0, 0),
      spatial_id: (4, (1, 2)),
      prim_flags: (
       bits: 1,
      ),
      stacking_context: (
       transform_style: Flat,
       mix_blend_mode: Normal,
       clip_id: Some(Clip(0, (1, 2))),
       raster_space: Screen,
       flags: (
        bits: 0,
       ),
      ),
     )),// [20]
     ImageMaskClip((
      id: Clip(4, (1, 2)),
      parent_space_and_clip: (
       spatial_id: (4, (1, 2)),
       clip_id: Clip(0, (1, 2)),
      ),
      image_mask: (
       image: ((3), 10),
       rect: (
        min: (-79, -23),
        max: (20, 70),
       ),
       repeat: false,
      ),
      fill_rule: Nonzero,
     )),// [21]
     PushStackingContext((
      origin: (0, 0),
      spatial_id: (4, (1, 2)),
      prim_flags: (
       bits: 1,
      ),
      stacking_context: (
       transform_style: Flat,
       mix_blend_mode: Normal,
       clip_id: Some(Clip(4, (1, 2))),
       raster_space: Screen,
       flags: (
        bits: 0,
       ),
      ),
     )),// [22]
     Image((
      common: (
       clip_rect: (
        min: (-78.916664, -22.35),
        max: (20, 70),
       ),
       clip_id: Clip(0, (1, 2)),
       spatial_id: (4, (1, 2)),
       flags: (
        bits: 1,
       ),
      ),
      bounds: (
       min: (-78.916664, -22.35),
       max: (21.083336, 77.65),
      ),
      image_key: ((3), 3),
      image_rendering: Auto,
      alpha_type: PremultipliedAlpha,
      color: (
       r: 1,
       g: 1,
       b: 1,
       a: 1,
      ),
     )),// [23]
     PopStackingContext,// [24]
     ImageMaskClip((
      id: Clip(5, (1, 2)),
      parent_space_and_clip: (
       spatial_id: (4, (1, 2)),
       clip_id: Clip(0, (1, 2)),
      ),
      image_mask: (
       image: ((3), 11),
       rect: (
        min: (60, -30),
        max: (160, 70),
       ),
       repeat: false,
      ),
      fill_rule: Nonzero,
     )),// [25]
     PushStackingContext((
      origin: (0, 0),
      spatial_id: (4, (1, 2)),
      prim_flags: (
       bits: 1,
      ),
      stacking_context: (
       transform_style: Flat,
       mix_blend_mode: Normal,
       clip_id: Some(Clip(5, (1, 2))),
       raster_space: Screen,
       flags: (
        bits: 0,
       ),
      ),
     )),// [26]
     Image((
      common: (
       clip_rect: (
        min: (60, -30),
        max: (160, 70),
       ),
       clip_id: Clip(0, (1, 2)),
       spatial_id: (4, (1, 2)),
       flags: (
        bits: 1,
       ),
      ),
      bounds: (
       min: (60, -30),
       max: (160, 70),
      ),
      image_key: ((3), 3),
      image_rendering: Auto,
      alpha_type: PremultipliedAlpha,
      color: (
       r: 1,
       g: 1,
       b: 1,
       a: 1,
      ),
     )),// [27]
     PopStackingContext,// [28]
     ImageMaskClip((
      id: Clip(6, (1, 2)),
      parent_space_and_clip: (
       spatial_id: (4, (1, 2)),
       clip_id: Clip(0, (1, 2)),
      ),
      image_mask: (
       image: ((3), 12),
       rect: (
        min: (180, -30),
        max: (280, 70),
       ),
       repeat: false,
      ),
      fill_rule: Nonzero,
     )),// [29]
     PushStackingContext((
      origin: (0, 0),
      spatial_id: (4, (1, 2)),
      prim_flags: (
       bits: 1,
      ),
      stacking_context: (
       transform_style: Flat,
       mix_blend_mode: Normal,
       clip_id: Some(Clip(6, (1, 2))),
       raster_space: Screen,
       flags: (
        bits: 0,
       ),
      ),
     )),// [30]
     Image((
      common: (
       clip_rect: (
        min: (180, -30),
        max: (280, 70),
       ),
       clip_id: Clip(0, (1, 2)),
       spatial_id: (4, (1, 2)),
       flags: (
        bits: 1,
       ),
      ),
      bounds: (
       min: (180, -30),
       max: (280, 70),
      ),
      image_key: ((3), 3),
      image_rendering: Auto,
      alpha_type: PremultipliedAlpha,
      color: (
       r: 1,
       g: 1,
       b: 1,
       a: 1,
      ),
     )),// [31]
     PopStackingContext,// [32]
     ImageMaskClip((
      id: Clip(7, (1, 2)),
      parent_space_and_clip: (
       spatial_id: (4, (1, 2)),
       clip_id: Clip(0, (1, 2)),
      ),
      image_mask: (
       image: ((3), 6),
       rect: (
        min: (-80, 100),
        max: (20, 200),
       ),
       repeat: false,
      ),
      fill_rule: Nonzero,
     )),// [33]
     PushStackingContext((
      origin: (0, 0),
      spatial_id: (4, (1, 2)),
      prim_flags: (
       bits: 1,
      ),
      stacking_context: (
       transform_style: Flat,
       mix_blend_mode: Normal,
       clip_id: Some(Clip(7, (1, 2))),
       raster_space: Screen,
       flags: (
        bits: 0,
       ),
      ),
     )),// [34]
     PushStackingContext((
      origin: (0, 0),
      spatial_id: (4, (1, 2)),
      prim_flags: (
       bits: 1,
      ),
      stacking_context: (
       transform_style: Flat,
       mix_blend_mode: Normal,
       clip_id: Some(Clip(0, (1, 2))),
       raster_space: Screen,
       flags: (
        bits: 0,
       ),
      ),
     )),// [35]
     HitTest((
      common: (
       clip_rect: (
        min: (-80, 100),
        max: (20, 200),
       ),
       clip_id: Clip(0, (1, 2)),
       spatial_id: (4, (1, 2)),
       flags: (
        bits: 1,
       ),
      ),
      tag: (2, 3),
     )),// [36]
     Image((
      common: (
       clip_rect: (
        min: (-80, 100),
        max: (20, 200),
       ),
       clip_id: Clip(0, (1, 2)),
       spatial_id: (4, (1, 2)),
       flags: (
        bits: 1,
       ),
      ),
      bounds: (
       min: (-80, 100),
       max: (20, 200),
      ),
      image_key: ((3), 7),
      image_rendering: Auto,
      alpha_type: PremultipliedAlpha,
      color: (
       r: 1,
       g: 1,
       b: 1,
       a: 1,
      ),
     )),// [37]
     PopStackingContext,// [38]
     PopStackingContext,// [39]
     PushStackingContext((
      origin: (0, 0),
      spatial_id: (4, (1, 2)),
      prim_flags: (
       bits: 1,
      ),
      stacking_context: (
       transform_style: Flat,
       mix_blend_mode: Normal,
       clip_id: Some(Clip(0, (1, 2))),
       raster_space: Screen,
       flags: (
        bits: 0,
       ),
      ),
     )),// [40]
     HitTest((
      common: (
       clip_rect: (
        min: (60, 100),
        max: (160, 200),
       ),
       clip_id: Clip(0, (1, 2)),
       spatial_id: (4, (1, 2)),
       flags: (
        bits: 1,
       ),
      ),
      tag: (2, 3),
     )),// [41]
     Image((
      common: (
       clip_rect: (
        min: (60, 100),
        max: (160, 200),
       ),
       clip_id: Clip(0, (1, 2)),
       spatial_id: (4, (1, 2)),
       flags: (
        bits: 1,
       ),
      ),
      bounds: (
       min: (60, 100),
       max: (160, 200),
      ),
      image_key: ((3), 8),
      image_rendering: Auto,
      alpha_type: PremultipliedAlpha,
      color: (
       r: 1,
       g: 1,
       b: 1,
       a: 1,
      ),
     )),// [42]
     PopStackingContext,// [43]
     PushStackingContext((
      origin: (0, 0),
      spatial_id: (4, (1, 2)),
      prim_flags: (
       bits: 1,
      ),
      stacking_context: (
       transform_style: Flat,
       mix_blend_mode: Normal,
       clip_id: Some(Clip(0, (1, 2))),
       raster_space: Screen,
       flags: (
        bits: 0,
       ),
      ),
     )),// [44]
     HitTest((
      common: (
       clip_rect: (
        min: (180, 100),
        max: (280, 200),
       ),
       clip_id: Clip(0, (1, 2)),
       spatial_id: (4, (1, 2)),
       flags: (
        bits: 1,
       ),
      ),
      tag: (2, 3),
     )),// [45]
     Image((
      common: (
       clip_rect: (
        min: (180, 100),
        max: (280, 200),
       ),
       clip_id: Clip(0, (1, 2)),
       spatial_id: (4, (1, 2)),
       flags: (
        bits: 1,
       ),
      ),
      bounds: (
       min: (180, 100),
       max: (280, 200),
      ),
      image_key: ((3), 9),
      image_rendering: Auto,
      alpha_type: PremultipliedAlpha,
      color: (
       r: 1,
       g: 1,
       b: 1,
       a: 1,
      ),
     )),// [46]
     PopStackingContext,// [47]
     PopStackingContext,// [48]
     PopReferenceFrame,// [49]
Severity: -- → S3

Blob logging:

attempting to enter the grouping code
actually entering the grouping code
DoGroupingForDisplayList
Inherrited scale 1.000000 1.000000
LayerBounds: 0 0 824 1086
VisibleRect: 0 0 824 1086
Inherrited scale 1.000000 1.000000
Property change. Deleting blob
 App unit change 0 -> 60
 Scale 0.000000 0.000000 -> 1.000000 1.000000
items: 0
----------
* 0x7f942e8c2378 CompositorHitTestInfo
* 0x7f942e8c2418 DisplaySVGGeometry
* 0x7f942e8c3cd0 nsDisplayTransform
  * 0x7f942e8c2730 nsDisplayContainer
    * 0x7f942e8c25f8 Mask
      * 0x7f942e8c24b8 CompositorHitTestInfo
      * 0x7f942e8c2558 DisplaySVGGeometry
  * 0x7f942e8c2aa0 nsDisplayContainer
    * 0x7f942e8c2968 Mask
      * 0x7f942e8c27e0 CompositorHitTestInfo
      * 0x7f942e8c28c8 DisplaySVGGeometry
  * 0x7f942e8c2e10 nsDisplayContainer
    * 0x7f942e8c2cd8 Mask
      * 0x7f942e8c2b50 CompositorHitTestInfo
      * 0x7f942e8c2c38 DisplaySVGGeometry
  * 0x7f942e8c32f0 nsDisplayContainer
    * 0x7f942e8c31b8 Mask
      * 0x7f942e8c3048 Opacity
        * 0x7f942e8c2ec0 CompositorHitTestInfo
        * 0x7f942e8c2fa8 DisplaySVGGeometry
  * 0x7f942e8c3788 nsDisplayContainer
    * 0x7f942e8c3650 Mask
      * 0x7f942e8c34e0 Opacity
        * 0x7f942e8c33a0 CompositorHitTestInfo
        * 0x7f942e8c3440 DisplaySVGGeometry
  * 0x7f942e8c3c20 nsDisplayContainer
    * 0x7f942e8c3ae8 Mask
      * 0x7f942e8c3978 Opacity
        * 0x7f942e8c3838 CompositorHitTestInfo
        * 0x7f942e8c38d8 DisplaySVGGeometry
----------
Allocating blob data

clippedImageRect 0 0 824 1086
imageSize: 824 1086
pre mInvalidRect: CompositorHitTestInfo 0x7f942e875c78-25 - inv: 0 0 0 0
CGC CompositorHitTestInfo 0 0 0 0
0 0,  1.000000 1.000000
mRect 0 0 0 0
post mInvalidRect: 0 0 0 0
Including CompositorHitTestInfo of 1
Allocating blob data

clippedImageRect 0 0 824 1086
imageSize: 824 1086
pre mInvalidRect: DisplaySVGGeometry 0x7f942e875c78-58 - inv: 0 0 0 0
CGC DisplaySVGGeometry 0 0 49440 65160
0 0,  1.000000 1.000000
mRect 0 0 824 1086
post mInvalidRect: 0 0 0 0
Including DisplaySVGGeometry of 2
active: 0
Item nsDisplayTransform is active
app unit change following: 0 60
Inner group size change
items: 0


Begin EndGroup
mDisplayItems
  : 0x7f942e875c78-25
  : 0x7f942e875c78-58
mInvalidRect: 0 0 0 0
Trying CompositorHitTestInfo 0x7f942e875c78-25 0 0 0 0
Trying DisplaySVGGeometry 0x7f942e875c78-58 0 0 824 1086
paint check invalid 824 1086 - 824 1086
painting DisplaySVGGeometry 0x7f942e875c78-58
1 Finish
No previous key making new one 1
PushImage: 0.000000 0.000000 824.000000 1086.000000
End EndGroup

 actually entering the grouping code
 DoGroupingForDisplayList
 Inherrited scale 1.000000 1.000000
 LayerBounds: -80 -30 360 230
 VisibleRect: -80 -30 360 230
 Inherrited scale 1.000000 1.000000
 Property change. Deleting blob
  App unit change 0 -> 60
  Scale 0.000000 0.000000 -> 1.000000 1.000000
 items: 0
----------
* 0x7f942e8c2730 nsDisplayContainer
  * 0x7f942e8c25f8 Mask
    * 0x7f942e8c24b8 CompositorHitTestInfo
    * 0x7f942e8c2558 DisplaySVGGeometry
* 0x7f942e8c2aa0 nsDisplayContainer
  * 0x7f942e8c2968 Mask
    * 0x7f942e8c27e0 CompositorHitTestInfo
    * 0x7f942e8c28c8 DisplaySVGGeometry
* 0x7f942e8c2e10 nsDisplayContainer
  * 0x7f942e8c2cd8 Mask
    * 0x7f942e8c2b50 CompositorHitTestInfo
    * 0x7f942e8c2c38 DisplaySVGGeometry
* 0x7f942e8c32f0 nsDisplayContainer
  * 0x7f942e8c31b8 Mask
    * 0x7f942e8c3048 Opacity
      * 0x7f942e8c2ec0 CompositorHitTestInfo
      * 0x7f942e8c2fa8 DisplaySVGGeometry
* 0x7f942e8c3788 nsDisplayContainer
  * 0x7f942e8c3650 Mask
    * 0x7f942e8c34e0 Opacity
      * 0x7f942e8c33a0 CompositorHitTestInfo
      * 0x7f942e8c3440 DisplaySVGGeometry
* 0x7f942e8c3c20 nsDisplayContainer
  * 0x7f942e8c3ae8 Mask
    * 0x7f942e8c3978 Opacity
      * 0x7f942e8c3838 CompositorHitTestInfo
      * 0x7f942e8c38d8 DisplaySVGGeometry
----------
 Item nsDisplayContainer is active
 app unit change following: 0 60
 Inner group size change
 items: 0
 

 Begin EndGroup
  actually entering the grouping code
  DoGroupingForDisplayList
  Inherrited scale 1.000000 1.000000
  LayerBounds: -79 -23 99 93
  VisibleRect: -79 -23 99 93
  Inherrited scale 1.000000 1.000000
  Property change. Deleting blob
   App unit change 0 -> 60
   Scale 0.000000 0.000000 -> 1.000000 1.000000
  items: 0
----------
* 0x7f942e8c25f8 Mask
  * 0x7f942e8c24b8 CompositorHitTestInfo
  * 0x7f942e8c2558 DisplaySVGGeometry
----------
  Item Mask is active
  app unit change following: 0 60
  Inner group size change
  items: 0
  

  Begin EndGroup
   actually entering the grouping code
   DoGroupingForDisplayList
   Inherrited scale 1.000000 1.000000
   LayerBounds: -79 -23 99 93
   VisibleRect: -79 -23 99 93
   Inherrited scale 1.000000 1.000000
   Property change. Deleting blob
    App unit change 0 -> 60
    Scale 0.000000 0.000000 -> 1.000000 1.000000
   items: 0
----------
* 0x7f942e8c24b8 CompositorHitTestInfo
* 0x7f942e8c2558 DisplaySVGGeometry
----------
   Allocating blob data
   
   clippedImageRect -79 -23 99 93
   imageSize: 99 93
   pre mInvalidRect: CompositorHitTestInfo 0x7f942e8760d8-25 - inv: 0 0 0 0
   CGC CompositorHitTestInfo 0 0 0 0
   -79 -23,  1.000000 1.000000
   mRect 0 0 0 0
   post mInvalidRect: 0 0 0 0
   Including CompositorHitTestInfo of 1
   Item DisplaySVGGeometry is active
   app unit change following: 0 60
   Inner group size change
   items: 0
   

   Begin EndGroup
   

   Begin EndGroup
  

  Begin EndGroup
 Item nsDisplayContainer is active
 app unit change following: 0 60
 Inner group size change
 items: 0
 

 Begin EndGroup
  actually entering the grouping code
  DoGroupingForDisplayList
  Inherrited scale 1.000000 1.000000
  LayerBounds: 60 -30 100 100
  VisibleRect: 60 -30 100 100
  Inherrited scale 1.000000 1.000000
  Property change. Deleting blob
   App unit change 0 -> 60
   Scale 0.000000 0.000000 -> 1.000000 1.000000
  items: 0
----------
* 0x7f942e8c2968 Mask
  * 0x7f942e8c27e0 CompositorHitTestInfo
  * 0x7f942e8c28c8 DisplaySVGGeometry
----------
  Item Mask is active
  app unit change following: 0 60
  Inner group size change
  items: 0
  

  Begin EndGroup
   actually entering the grouping code
   DoGroupingForDisplayList
   Inherrited scale 1.000000 1.000000
   LayerBounds: 60 -30 100 100
   VisibleRect: 60 -30 100 100
   Inherrited scale 1.000000 1.000000
   Property change. Deleting blob
    App unit change 0 -> 60
    Scale 0.000000 0.000000 -> 1.000000 1.000000
   items: 0
----------
* 0x7f942e8c27e0 CompositorHitTestInfo
* 0x7f942e8c28c8 DisplaySVGGeometry
----------
   Allocating blob data
   
   clippedImageRect 60 -30 100 100
   imageSize: 100 100
   pre mInvalidRect: CompositorHitTestInfo 0x7f942e876350-25 - inv: 0 0 0 0
   CGC CompositorHitTestInfo 3000 0 0 0
   60 -30,  1.000000 1.000000
   mRect 60 0 0 0
   post mInvalidRect: 0 0 0 0
   Including CompositorHitTestInfo of 1
   Item DisplaySVGGeometry is active
   app unit change following: 0 60
   Inner group size change
   items: 0
   

   Begin EndGroup
   

   Begin EndGroup
  

  Begin EndGroup
 Item nsDisplayContainer is active
 app unit change following: 0 60
 Inner group size change
 items: 0
 

 Begin EndGroup
  actually entering the grouping code
  DoGroupingForDisplayList
  Inherrited scale 1.000000 1.000000
  LayerBounds: 180 -30 100 100
  VisibleRect: 180 -30 100 100
  Inherrited scale 1.000000 1.000000
  Property change. Deleting blob
   App unit change 0 -> 60
   Scale 0.000000 0.000000 -> 1.000000 1.000000
  items: 0
----------
* 0x7f942e8c2cd8 Mask
  * 0x7f942e8c2b50 CompositorHitTestInfo
  * 0x7f942e8c2c38 DisplaySVGGeometry
----------
  Item Mask is active
  app unit change following: 0 60
  Inner group size change
  items: 0
  

  Begin EndGroup
   actually entering the grouping code
   DoGroupingForDisplayList
   Inherrited scale 1.000000 1.000000
   LayerBounds: 180 -30 100 100
   VisibleRect: 180 -30 100 100
   Inherrited scale 1.000000 1.000000
   Property change. Deleting blob
    App unit change 0 -> 60
    Scale 0.000000 0.000000 -> 1.000000 1.000000
   items: 0
----------
* 0x7f942e8c2b50 CompositorHitTestInfo
* 0x7f942e8c2c38 DisplaySVGGeometry
----------
   Allocating blob data
   
   clippedImageRect 180 -30 100 100
   imageSize: 100 100
   pre mInvalidRect: CompositorHitTestInfo 0x7f942e876548-25 - inv: 0 0 0 0
   CGC CompositorHitTestInfo 10800 0 0 0
   180 -30,  1.000000 1.000000
   mRect 180 0 0 0
   post mInvalidRect: 0 0 0 0
   Including CompositorHitTestInfo of 1
   Item DisplaySVGGeometry is active
   app unit change following: 0 60
   Inner group size change
   items: 0
   

   Begin EndGroup
   

   Begin EndGroup
  

  Begin EndGroup
 active: 1
 Item nsDisplayContainer is active
 app unit change following: 0 60
 Inner group size change
 items: 0
 

 Begin EndGroup
  actually entering the grouping code
  DoGroupingForDisplayList
  Inherrited scale 1.000000 1.000000
  LayerBounds: -80 100 100 100
  VisibleRect: -80 100 100 100
  Inherrited scale 1.000000 1.000000
  Property change. Deleting blob
   App unit change 0 -> 60
   Scale 0.000000 0.000000 -> 1.000000 1.000000
  items: 0
----------
* 0x7f942e8c31b8 Mask
  * 0x7f942e8c3048 Opacity
    * 0x7f942e8c2ec0 CompositorHitTestInfo
    * 0x7f942e8c2fa8 DisplaySVGGeometry
----------
  active: 1
  Item Mask is active
  app unit change following: 0 60
  Inner group size change
  items: 0
  

  Begin EndGroup
   actually entering the grouping code
   DoGroupingForDisplayList
   Inherrited scale 1.000000 1.000000
   LayerBounds: -80 100 100 100
   VisibleRect: -80 100 100 100
   Inherrited scale 1.000000 1.000000
   Property change. Deleting blob
    App unit change 0 -> 60
    Scale 0.000000 0.000000 -> 1.000000 1.000000
   items: 0
----------
* 0x7f942e8c3048 Opacity
  * 0x7f942e8c2ec0 CompositorHitTestInfo
  * 0x7f942e8c2fa8 DisplaySVGGeometry
----------
   active: 1
   Item Opacity is active
   app unit change following: 0 60
   Inner group size change
   items: 0
   

   Begin EndGroup
    actually entering the grouping code
    DoGroupingForDisplayList
    Inherrited scale 1.000000 1.000000
    LayerBounds: -80 100 100 100
    VisibleRect: -80 100 100 100
    Inherrited scale 1.000000 1.000000
    Property change. Deleting blob
     App unit change 0 -> 60
     Scale 0.000000 0.000000 -> 1.000000 1.000000
    items: 0
----------
* 0x7f942e8c2ec0 CompositorHitTestInfo
* 0x7f942e8c2fa8 DisplaySVGGeometry
----------
    Allocating blob data
    
    clippedImageRect -80 100 100 100
    imageSize: 100 100
    pre mInvalidRect: CompositorHitTestInfo 0x7f942e876a78-25 - inv: 0 0 0 0
    CGC CompositorHitTestInfo 0 6000 0 0
    -80 100,  1.000000 1.000000
    mRect 0 100 0 0
    post mInvalidRect: 0 0 0 0
    Including CompositorHitTestInfo of 1
    Allocating blob data
    
    clippedImageRect -80 100 100 100
    imageSize: 100 100
    pre mInvalidRect: DisplaySVGGeometry 0x7f942e876a78-58 - inv: 0 0 0 0
    CGC DisplaySVGGeometry -4800 6000 6000 6000
    -80 100,  1.000000 1.000000
    mRect -80 100 100 100
    post mInvalidRect: 0 0 0 0
    Including DisplaySVGGeometry of 2
    

    Begin EndGroup
    mDisplayItems
      : 0x7f942e876a78-25
      : 0x7f942e876a78-58
    mInvalidRect: 0 0 0 0
    Trying CompositorHitTestInfo 0x7f942e876a78-25 0 100 0 100
    Trying DisplaySVGGeometry 0x7f942e876a78-58 -80 100 20 200
    paint check invalid 20 200 - 100 100
    painting DisplaySVGGeometry 0x7f942e876a78-58
    1 Finish
    No previous key making new one 6
    PushImage: -80.000000 100.000000 20.000000 200.000000
    End EndGroup

   

   Begin EndGroup
  

  Begin EndGroup
 active: 1
 Item nsDisplayContainer is active
 app unit change following: 0 60
 Inner group size change
 items: 0
 

 Begin EndGroup
  actually entering the grouping code
  DoGroupingForDisplayList
  Inherrited scale 1.000000 1.000000
  LayerBounds: 60 100 100 100
  VisibleRect: 60 100 100 100
  Inherrited scale 1.000000 1.000000
  Property change. Deleting blob
   App unit change 0 -> 60
   Scale 0.000000 0.000000 -> 1.000000 1.000000
  items: 0
----------
* 0x7f942e8c3650 Mask
  * 0x7f942e8c34e0 Opacity
    * 0x7f942e8c33a0 CompositorHitTestInfo
    * 0x7f942e8c3440 DisplaySVGGeometry
----------
  active: 1
  Item Mask is active
  app unit change following: 0 60
  Inner group size change
  items: 0
  

  Begin EndGroup
   actually entering the grouping code
   DoGroupingForDisplayList
   Inherrited scale 1.000000 1.000000
   LayerBounds: 60 100 100 100
   VisibleRect: 60 100 100 100
   Inherrited scale 1.000000 1.000000
   Property change. Deleting blob
    App unit change 0 -> 60
    Scale 0.000000 0.000000 -> 1.000000 1.000000
   items: 0
----------
* 0x7f942e8c34e0 Opacity
  * 0x7f942e8c33a0 CompositorHitTestInfo
  * 0x7f942e8c3440 DisplaySVGGeometry
----------
   active: 1
   Item Opacity is active
   app unit change following: 0 60
   Inner group size change
   items: 0
   

   Begin EndGroup
    actually entering the grouping code
    DoGroupingForDisplayList
    Inherrited scale 1.000000 1.000000
    LayerBounds: 60 100 100 100
    VisibleRect: 60 100 100 100
    Inherrited scale 1.000000 1.000000
    Property change. Deleting blob
     App unit change 0 -> 60
     Scale 0.000000 0.000000 -> 1.000000 1.000000
    items: 0
----------
* 0x7f942e8c33a0 CompositorHitTestInfo
* 0x7f942e8c3440 DisplaySVGGeometry
----------
    Allocating blob data
    
    clippedImageRect 60 100 100 100
    imageSize: 100 100
    pre mInvalidRect: CompositorHitTestInfo 0x7f942e876e30-25 - inv: 0 0 0 0
    CGC CompositorHitTestInfo 3000 5400 0 0
    60 100,  1.000000 1.000000
    mRect 60 100 0 0
    post mInvalidRect: 0 0 0 0
    Including CompositorHitTestInfo of 1
    Allocating blob data
    
    clippedImageRect 60 100 100 100
    imageSize: 100 100
    pre mInvalidRect: DisplaySVGGeometry 0x7f942e876e30-58 - inv: 0 0 0 0
    CGC DisplaySVGGeometry 3600 6000 6000 6000
    60 100,  1.000000 1.000000
    mRect 60 100 100 100
    post mInvalidRect: 0 0 0 0
    Including DisplaySVGGeometry of 2
    

    Begin EndGroup
    mDisplayItems
      : 0x7f942e876e30-25
      : 0x7f942e876e30-58
    mInvalidRect: 0 0 0 0
    Trying CompositorHitTestInfo 0x7f942e876e30-25 60 100 60 100
    Trying DisplaySVGGeometry 0x7f942e876e30-58 60 100 160 200
    paint check invalid 160 200 - 100 100
    painting DisplaySVGGeometry 0x7f942e876e30-58
    1 Finish
    No previous key making new one 8
    PushImage: 60.000000 100.000000 160.000000 200.000000
    End EndGroup

   

   Begin EndGroup
  

  Begin EndGroup
 active: 1
 Item nsDisplayContainer is active
 app unit change following: 0 60
 Inner group size change
 items: 0
 

 Begin EndGroup
  actually entering the grouping code
  DoGroupingForDisplayList
  Inherrited scale 1.000000 1.000000
  LayerBounds: 180 100 100 100
  VisibleRect: 180 100 100 100
  Inherrited scale 1.000000 1.000000
  Property change. Deleting blob
   App unit change 0 -> 60
   Scale 0.000000 0.000000 -> 1.000000 1.000000
  items: 0
----------
* 0x7f942e8c3ae8 Mask
  * 0x7f942e8c3978 Opacity
    * 0x7f942e8c3838 CompositorHitTestInfo
    * 0x7f942e8c38d8 DisplaySVGGeometry
----------
  active: 1
  Item Mask is active
  app unit change following: 0 60
  Inner group size change
  items: 0
  

  Begin EndGroup
   actually entering the grouping code
   DoGroupingForDisplayList
   Inherrited scale 1.000000 1.000000
   LayerBounds: 180 100 100 100
   VisibleRect: 180 100 100 100
   Inherrited scale 1.000000 1.000000
   Property change. Deleting blob
    App unit change 0 -> 60
    Scale 0.000000 0.000000 -> 1.000000 1.000000
   items: 0
----------
* 0x7f942e8c3978 Opacity
  * 0x7f942e8c3838 CompositorHitTestInfo
  * 0x7f942e8c38d8 DisplaySVGGeometry
----------
   active: 1
   Item Opacity is active
   app unit change following: 0 60
   Inner group size change
   items: 0
   

   Begin EndGroup
    actually entering the grouping code
    DoGroupingForDisplayList
    Inherrited scale 1.000000 1.000000
    LayerBounds: 180 100 100 100
    VisibleRect: 180 100 100 100
    Inherrited scale 1.000000 1.000000
    Property change. Deleting blob
     App unit change 0 -> 60
     Scale 0.000000 0.000000 -> 1.000000 1.000000
    items: 0
----------
* 0x7f942e8c3838 CompositorHitTestInfo
* 0x7f942e8c38d8 DisplaySVGGeometry
----------
    Allocating blob data
    
    clippedImageRect 180 100 100 100
    imageSize: 100 100
    pre mInvalidRect: CompositorHitTestInfo 0x7f942e8a5200-25 - inv: 0 0 0 0
    CGC CompositorHitTestInfo 10800 6000 0 0
    180 100,  1.000000 1.000000
    mRect 180 100 0 0
    post mInvalidRect: 0 0 0 0
    Including CompositorHitTestInfo of 1
    Allocating blob data
    
    clippedImageRect 180 100 100 100
    imageSize: 100 100
    pre mInvalidRect: DisplaySVGGeometry 0x7f942e8a5200-58 - inv: 0 0 0 0
    CGC DisplaySVGGeometry 10800 6000 6000 6000
    180 100,  1.000000 1.000000
    mRect 180 100 100 100
    post mInvalidRect: 0 0 0 0
    Including DisplaySVGGeometry of 2
    

    Begin EndGroup
    mDisplayItems
      : 0x7f942e8a5200-25
      : 0x7f942e8a5200-58
    mInvalidRect: 0 0 0 0
    Trying CompositorHitTestInfo 0x7f942e8a5200-25 180 100 180 100
    Trying DisplaySVGGeometry 0x7f942e8a5200-58 180 100 280 200
    paint check invalid 280 200 - 100 100
    painting DisplaySVGGeometry 0x7f942e8a5200-58
    1 Finish
    No previous key making new one 10
    PushImage: 180.000000 100.000000 280.000000 200.000000
    End EndGroup

   

   Begin EndGroup
  

  Begin EndGroup
 

 Begin EndGroup


Begin EndGroup
Attached file dl-dump.txt

Displaylist dump

The primitive chasing log for the missing masked rect:

Chasing PrimitiveDebugId(380) by local rect
	added to stacking context at 1
	preparing PrimitiveDebugId(380)
	Image { data_handle: Handle { index: 17, epoch: Epoch(11), _marker: PhantomData }, image_instance_index: Index(13, PhantomData), is_compositor_surface: false }
	building clip chain instance with local rect Box2D((-80.0, 100.0), (20.0, 200.0))
	effective clip chain from ClipNodeRange { first: 5, count: 0 } (applied)
	picture rect Box2D((-80.0, 100.0), (20.0, 200.0)) @SpatialNodeIndex(9)
	visible with Box2D((-80.0, 100.0), (20.0, 200.0))

Seems to indicate that the prim is not accidentally culled out.

Some blob replay logging:

  -- begin blob replay: bounds 0 0 100 100 region 0 0 100 100
[0x7f54060bf190] DrawTarget Creation (Type: Unknown, Size: 100x100)
[0x7f54060bf190] SetTransform [ 1 0 ; 0 1 ; 0 0 ]
[0x7f54060bf190] SetTransform [ 1 0 ; 0 1 ; 80 -100 ]
[0x7f54060bf190] SetTransform [ 1 0 ; 0 1 ; 80 -100 ]
[0x7f54060bf190] SetTransform [ 1 0 ; 0 1 ; 80 -100 ]
[0x7f54060bf200] CreateSimilarDrawTarget (Size: 100x100)
[0x7f54060bf190] SetTransform [ 1 0 ; 0 1 ; 80 -100 ]
[0x7f54060bf200] SetTransform [ 1 0 ; 0 1 ; 0 0 ]
[0x7f54060bf200] SetTransform [ 1 0 ; 0 1 ; 0 0 ]
[0x7f54060bf270] CreateClippedDrawTarget ()
[0x7f54060bf270] SetTransform [ 1 0 ; 0 1 ; 0 0 ]
[0x7f54060bf270] SetTransform [ 1 0 ; 0 1 ; 0 0 ]
[0x7f54060bf270] SetTransform [ 1 0 ; 0 1 ; 0 0 ]
[0x7f54060bf270] SetTransform [ 1 0 ; 0 1 ; 0 0 ]
[0x7f54060bf270] FillRect (-80, 100 - 100 x 100) DeviceColor: (1, 1, 1, 1)
--replay FillRect -80.000000 100.000000 100.000000 100.000000
[0x7f54060bf270] SetTransform [ 1 0 ; 0 1 ; 0 0 ]
[0x7f54060bf270] SetTransform [ 1 0 ; 0 1 ; 0 0 ]
[0x7f54060bf270] FillRect (-60, 120 - 40 x 40) DeviceColor: (0, 0, 0, 1)
--replay FillRect -60.000000 120.000000 40.000000 40.000000
[0x7f54060bf270] SetTransform [ 1 0 ; 0 1 ; 0 0 ]
[0x7f5405a94a80] Into Luminance Source (DT: 0x7f54060bf270)
[0x7f54060bf270] DrawTarget Destruction
[0x7f54060bf200] SetTransform [ 1 0 ; 0 1 ; 0 0 ]
[0x7f54060bf200] MaskSurface (0x7f5405a94a80)  Offset: (0x0) Pattern: DeviceColor: (0, 0, 0, 1)
[0x7f54060bf200] SetTransform [ 1 0 ; 0 1 ; 0 0 ]
[0x7f5405a94a80] SourceSurface Destroyed
[0x7f54060bf190] SetTransform [ 1 0 ; 0 1 ; 80 -100 ]
[0x7f54060bf190] SetTransform [ 1 0 ; 0 1 ; 80 -100 ]
[0x7f5405a94a80] Snapshot Created (DT: 0x7f54060bf200)
[0x7f54060bf190] SetTransform [ 1 0 ; 0 1 ; 80 -100 ]
[0x7f54060bf270] Path created (OpCount: 5)
[0x7f54060bf190] Fill (0x7f54060bf270) DeviceColor: (1, 1, 1, 1)
--replay Fill
[0x7f54060bf270] Path Destroyed
[0x7f54060bf190] SetTransform [ 1 0 ; 0 1 ; 80 -100 ]
[0x7f54060bf190] SetTransform [ 1 0 ; 0 1 ; 160 -200 ]
[0x7f54060bf190] MaskSurface (0x7f5405a94a80)  Offset: (0x0) Pattern: DeviceColor: (0, 0, 0, 1)
[0x7f54060bf190] SetTransform [ 1 0 ; 0 1 ; 80 -100 ]
[0x7f5405a94a80] SourceSurface Destroyed
[0x7f54060bf190] SetTransform [ 1 0 ; 0 1 ; 80 -100 ]
[0x7f54060bf200] DrawTarget Destruction
 -- end blob replay

Assignee: nobody → jmuizelaar
Status: NEW → ASSIGNED
Attachment #9261330 - Attachment description: Bug 1752348. Fix masking → Bug 1752348. Record mask blobs at their natural location.
Depends on: 1752652

There's a r+ patch which didn't land and no activity in this bug for 2 weeks.
:jrmuizel, could you have a look please?
If you still have some work to do, you can add an action "Plan Changes" in Phabricator.
For more information, please visit auto_nag documentation.

Flags: needinfo?(nical.bugzilla)
Flags: needinfo?(jmuizelaar)

Previously, if ctx->GetDrawTarget() != maskTarget we end up adjusting the
matrix on ctx and not on the maskTarget.

Also, now that we're doing the correct adjustment of the maskTarget transform
we can remove code to set maskTarget's transform to identity.

Flags: needinfo?(jmuizelaar)
Flags: needinfo?(nical.bugzilla)
Pushed by jmuizelaar@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/eeabb68029e1
Adjust transform on maskTarget instead of ctx. r=nical
Status: ASSIGNED → RESOLVED
Closed: 2 years ago
Resolution: --- → FIXED
Target Milestone: --- → 99 Branch
QA Whiteboard: [qa-99b-p2]

I reproduced the issue on Win10 using a build without the fix 98.0a1 (20220127213627), and verified it on builds with the fix 99.0b8 and 100.0a1 (20220327213550) but both versions differ from Chrome (see screenshot attached).
Can you please let me know if this is the intended behavior? Thank you.

Flags: needinfo?(jmuizelaar)
Attached image ScreenshotA.png

Yeah, the difference with Chrome is fine. It's just a difference around handling of images that failed to load.

Flags: needinfo?(jmuizelaar)

Mark issue as verified based on precious comment.

Status: RESOLVED → VERIFIED
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: