Bug 1729581 Comment 4 Edit History

Note: The actual edited comment in the bug view page will always show the original commenter’s name and original timestamp.

scrollId=2 is the root, and the second occurrence of it is inside a fixed subtree, which seems unexpected.

Here's a Gecko display list:

```
  SolidColor p=0x7f8ecea6c3a8 f=0x7f8ecea1f020(Viewport(-1)) key=53 bounds(0,0,76800,53220) layerBounds(0,0,76800,53220) visible(0,0,76800,53220) building(0,0,76800,53220) componentAlpha(0,0,0,0) clip() asr() clipChain() uniform ref=0x7f8ecea1f020 agr=0x7f8ecea1f020 (opaque 0,0,76800,53220) (rgba 255,255,255,255)
  CompositorHitTestInfo p=0x7f8ecea6b020 f=0x7f8ecea1f1a8(HTMLScroll(html)(-1)) key=25 bounds(0,0,0,0) layerBounds(0,0,0,0) visible(0,0,76800,53220) building(0,0,76800,53220) componentAlpha(0,0,0,0) clip() asr() clipChain() ref=0x7f8ecea1f020 agr=0x7f8ecea1f020 hitTestInfo(0x1) hitTestArea(0,0,76800,53220)
  AsyncZoom p=0x7f8ecea6c210 f=0x7f8ecea1f1a8(HTMLScroll(html)(-1)) key=2 bounds(0,0,76800,53220) layerBounds(0,0,76800,53220) visible(0,0,76800,53220) building(0,0,76800,53220) componentAlpha(0,0,0,0) clip(0,0,76800,53220) asr() clipChain(0x7f8ecea6b1d0 <0,0,76800,53220> [root asr]) ref=0x7f8ecea1f020 agr=0x7f8ecea1f020 (opaque 0,0,76800,53220) (flags 0x0) (scrolltarget 0)
    CanvasBackgroundColor p=0x7f8ecea6b218 f=0x7f8ecea1f0c8(Canvas(html)(-1)) key=16 bounds(0,0,76800,53220) layerBounds(0,0,76800,53220) visible(0,0,76800,53220) building(0,0,76800,53220) componentAlpha(0,0,0,0) clip(0,0,76800,53220) asr(<0x7f8ecea1f248>) clipChain(0x7f8ecea6b2f0 <0,0,76800,53220> [0x7f8ecea1f248], 0x7f8ecea6b1d0 <0,0,76800,53220> [root asr]) uniform ref=0x7f8ecea1f020 agr=0x7f8ecea1f0c8 (opaque 0,0,76800,53220) (rgba 255,255,255,255)
    CompositorHitTestInfo p=0x7f8ecea6b0f8 f=0x7f8ecea1f0c8(Canvas(html)(-1)) key=281 bounds(0,0,0,0) layerBounds(0,0,0,0) visible(0,0,76800,53220) building(0,0,76800,53220) componentAlpha(0,0,0,0) clip() asr(<0x7f8ecea1f248>) clipChain(0x7f8ecea6b1d0 <0,0,76800,53220> [root asr]) ref=0x7f8ecea1f020 agr=0x7f8ecea1f0c8 hitTestInfo(0x1) hitTestArea(0,0,76800,53220)
    Mask p=0x7f8ecea6bfb0 f=0x7f8ecea1fae0(Block(html)(-1)) key=42 bounds(480,960,0,0) layerBounds(480,960,0,0) visible(0,0,76800,53220) building(0,0,76800,53220) componentAlpha(0,0,0,0) clip() asr(<0x7f8ecea1f248>) clipChain(0x7f8ecea6b1d0 <0,0,76800,53220> [root asr]) ref=0x7f8ecea1f020 agr=0x7f8ecea1f0c8 effects=(clip(basic-shape))
      CompositorHitTestInfo p=0x7f8ecea6b338 f=0x7f8ecea1fae0(Block(html)(-1)) key=25 bounds(0,0,0,0) layerBounds(0,0,0,0) visible(0,0,60,60) building(0,0,60,60) componentAlpha(0,0,0,0) clip(0,0,60,60) asr(<0x7f8ecea1f248>) clipChain(0x7f8ecea6b410 <0,0,60,60> [0x7f8ecea1f248], 0x7f8ecea6b1d0 <0,0,76800,53220> [root asr]) ref=0x7f8ecea1f020 agr=0x7f8ecea1f0c8 hitTestInfo(0x3) hitTestArea(0,0,76800,2100)
      Mask p=0x7f8ecea6bd50 f=0x7f8ecea1fba8(Block(body)(1)) key=42 bounds(480,960,0,0) layerBounds(480,960,0,0) visible(0,0,600,1080) building(0,0,600,1080) componentAlpha(0,0,0,0) clip() asr(<0x7f8ecea1f248>) clipChain(0x7f8ecea6b1d0 <0,0,76800,53220> [root asr]) ref=0x7f8ecea1f020 agr=0x7f8ecea1f0c8 effects=(clip(basic-shape))
        CompositorHitTestInfo p=0x7f8ecea6b458 f=0x7f8ecea1fba8(Block(body)(1)) key=25 bounds(0,0,0,0) layerBounds(0,0,0,0) visible(480,420,0,0) building(480,420,0,0) componentAlpha(0,0,0,0) clip(480,420,0,0) asr(<0x7f8ecea1f248>) clipChain(0x7f8ecea6b530 <480,420,0,0> [0x7f8ecea1f248], 0x7f8ecea6b1d0 <0,0,76800,53220> [root asr]) ref=0x7f8ecea1f020 agr=0x7f8ecea1f0c8 hitTestInfo(0x3) hitTestArea(480,480,75840,1140)
        FixedPosition p=0x7f8ecea6bb60 f=0x7f8ecea1fcc0(Block(hr)(0) class:a) key=31 bounds(480,960,0,0) layerBounds(0,0,0,0) visible(480,960,120,120) building(480,960,120,120) componentAlpha(0,0,0,0) clip(0,0,76800,53220) asr() clipChain(0x7f8ecea6b530 <480,420,0,0> [0x7f8ecea1f248], 0x7f8ecea6b1d0 <0,0,76800,53220> [root asr]) ref=0x7f8ecea1f020 agr=0x7f8ecea1fcc0 (containerASR <0x7f8ecea1f248>) (scrolltarget 2)
          nsDisplayTransform p=0x7f8ecea6b970 f=0x7f8ecea1fcc0(Block(hr)(0) class:a) key=73 bounds(480,960,0,0) layerBounds(0,0,0,0) visible(480,960,120,120) building(480,960,120,120) componentAlpha(0,0,0,0) clip() asr() clipChain() ref=0x7f8ecea1f020 agr=0x7f8ecea1fcc0[ 1 0; 0 1; 8 16; ] prerender(no) childrenBuildingRect(x=0, y=0, w=120, h=120)
            Opacity p=0x7f8ecea6b810 f=0x7f8ecea1fcc0(Block(hr)(0) class:a) key=43 bounds(0,0,0,0) layerBounds(0,0,0,0) visible(0,0,120,120) building(0,0,120,120) componentAlpha(0,0,0,0) clip() asr(<0x7f8ecea1f248>) clipChain() ref=0x7f8ecea1fcc0 agr=0x7f8ecea1fcc0 (opacity 0, mChildOpacityState: Unknown)
              Mask p=0x7f8ecea6b698 f=0x7f8ecea1fcc0(Block(hr)(0) class:a) key=42 bounds(0,0,0,0) layerBounds(0,0,0,0) visible(0,0,120,120) building(0,0,120,120) componentAlpha(0,0,0,0) clip() asr() clipChain() ref=0x7f8ecea1fcc0 agr=0x7f8ecea1fcc0 effects=(clip(basic-shape))
                CompositorHitTestInfo p=0x7f8ecea6b578 f=0x7f8ecea1fcc0(Block(hr)(0) class:a) key=25 bounds(0,0,0,0) layerBounds(0,0,0,0) visible(0,0,60,60) building(0,0,60,60) componentAlpha(0,0,0,0) clip(0,-60,60,120) asr() clipChain(0x7f8ecea6b650 <0,-60,60,120> [root asr]) ref=0x7f8ecea1fcc0 agr=0x7f8ecea1fcc0 hitTestInfo(0x3) hitTestArea(0,0,120,120)
```

The only item in the `FixedPosition`'s subtree which has a non-null ASR is the `Opacity` item. The next step is to understand why it gets the root scroll frame's ASR.
scrollId=2 is the root, and the second occurrence of it is inside a fixed subtree, which seems unexpected.

Here's a Gecko display list:

```
SolidColor p=0x7f8ecea6c3a8 f=0x7f8ecea1f020(Viewport(-1)) key=53 bounds(0,0,76800,53220) layerBounds(0,0,76800,53220) visible(0,0,76800,53220) building(0,0,76800,53220) componentAlpha(0,0,0,0) clip() asr() clipChain() uniform ref=0x7f8ecea1f020 agr=0x7f8ecea1f020 (opaque 0,0,76800,53220) (rgba 255,255,255,255)
CompositorHitTestInfo p=0x7f8ecea6b020 f=0x7f8ecea1f1a8(HTMLScroll(html)(-1)) key=25 bounds(0,0,0,0) layerBounds(0,0,0,0) visible(0,0,76800,53220) building(0,0,76800,53220) componentAlpha(0,0,0,0) clip() asr() clipChain() ref=0x7f8ecea1f020 agr=0x7f8ecea1f020 hitTestInfo(0x1) hitTestArea(0,0,76800,53220)
AsyncZoom p=0x7f8ecea6c210 f=0x7f8ecea1f1a8(HTMLScroll(html)(-1)) key=2 bounds(0,0,76800,53220) layerBounds(0,0,76800,53220) visible(0,0,76800,53220) building(0,0,76800,53220) componentAlpha(0,0,0,0) clip(0,0,76800,53220) asr() clipChain(0x7f8ecea6b1d0 <0,0,76800,53220> [root asr]) ref=0x7f8ecea1f020 agr=0x7f8ecea1f020 (opaque 0,0,76800,53220) (flags 0x0) (scrolltarget 0)
  CanvasBackgroundColor p=0x7f8ecea6b218 f=0x7f8ecea1f0c8(Canvas(html)(-1)) key=16 bounds(0,0,76800,53220) layerBounds(0,0,76800,53220) visible(0,0,76800,53220) building(0,0,76800,53220) componentAlpha(0,0,0,0) clip(0,0,76800,53220) asr(<0x7f8ecea1f248>) clipChain(0x7f8ecea6b2f0 <0,0,76800,53220> [0x7f8ecea1f248], 0x7f8ecea6b1d0 <0,0,76800,53220> [root asr]) uniform ref=0x7f8ecea1f020 agr=0x7f8ecea1f0c8 (opaque 0,0,76800,53220) (rgba 255,255,255,255)
  CompositorHitTestInfo p=0x7f8ecea6b0f8 f=0x7f8ecea1f0c8(Canvas(html)(-1)) key=281 bounds(0,0,0,0) layerBounds(0,0,0,0) visible(0,0,76800,53220) building(0,0,76800,53220) componentAlpha(0,0,0,0) clip() asr(<0x7f8ecea1f248>) clipChain(0x7f8ecea6b1d0 <0,0,76800,53220> [root asr]) ref=0x7f8ecea1f020 agr=0x7f8ecea1f0c8 hitTestInfo(0x1) hitTestArea(0,0,76800,53220)
  Mask p=0x7f8ecea6bfb0 f=0x7f8ecea1fae0(Block(html)(-1)) key=42 bounds(480,960,0,0) layerBounds(480,960,0,0) visible(0,0,76800,53220) building(0,0,76800,53220) componentAlpha(0,0,0,0) clip() asr(<0x7f8ecea1f248>) clipChain(0x7f8ecea6b1d0 <0,0,76800,53220> [root asr]) ref=0x7f8ecea1f020 agr=0x7f8ecea1f0c8 effects=(clip(basic-shape))
    CompositorHitTestInfo p=0x7f8ecea6b338 f=0x7f8ecea1fae0(Block(html)(-1)) key=25 bounds(0,0,0,0) layerBounds(0,0,0,0) visible(0,0,60,60) building(0,0,60,60) componentAlpha(0,0,0,0) clip(0,0,60,60) asr(<0x7f8ecea1f248>) clipChain(0x7f8ecea6b410 <0,0,60,60> [0x7f8ecea1f248], 0x7f8ecea6b1d0 <0,0,76800,53220> [root asr]) ref=0x7f8ecea1f020 agr=0x7f8ecea1f0c8 hitTestInfo(0x3) hitTestArea(0,0,76800,2100)
    Mask p=0x7f8ecea6bd50 f=0x7f8ecea1fba8(Block(body)(1)) key=42 bounds(480,960,0,0) layerBounds(480,960,0,0) visible(0,0,600,1080) building(0,0,600,1080) componentAlpha(0,0,0,0) clip() asr(<0x7f8ecea1f248>) clipChain(0x7f8ecea6b1d0 <0,0,76800,53220> [root asr]) ref=0x7f8ecea1f020 agr=0x7f8ecea1f0c8 effects=(clip(basic-shape))
      CompositorHitTestInfo p=0x7f8ecea6b458 f=0x7f8ecea1fba8(Block(body)(1)) key=25 bounds(0,0,0,0) layerBounds(0,0,0,0) visible(480,420,0,0) building(480,420,0,0) componentAlpha(0,0,0,0) clip(480,420,0,0) asr(<0x7f8ecea1f248>) clipChain(0x7f8ecea6b530 <480,420,0,0> [0x7f8ecea1f248], 0x7f8ecea6b1d0 <0,0,76800,53220> [root asr]) ref=0x7f8ecea1f020 agr=0x7f8ecea1f0c8 hitTestInfo(0x3) hitTestArea(480,480,75840,1140)
      FixedPosition p=0x7f8ecea6bb60 f=0x7f8ecea1fcc0(Block(hr)(0) class:a) key=31 bounds(480,960,0,0) layerBounds(0,0,0,0) visible(480,960,120,120) building(480,960,120,120) componentAlpha(0,0,0,0) clip(0,0,76800,53220) asr() clipChain(0x7f8ecea6b530 <480,420,0,0> [0x7f8ecea1f248], 0x7f8ecea6b1d0 <0,0,76800,53220> [root asr]) ref=0x7f8ecea1f020 agr=0x7f8ecea1fcc0 (containerASR <0x7f8ecea1f248>) (scrolltarget 2)
        nsDisplayTransform p=0x7f8ecea6b970 f=0x7f8ecea1fcc0(Block(hr)(0) class:a) key=73 bounds(480,960,0,0) layerBounds(0,0,0,0) visible(480,960,120,120) building(480,960,120,120) componentAlpha(0,0,0,0) clip() asr() clipChain() ref=0x7f8ecea1f020 agr=0x7f8ecea1fcc0[ 1 0; 0 1; 8 16; ] prerender(no) childrenBuildingRect(x=0, y=0, w=120, h=120)
          Opacity p=0x7f8ecea6b810 f=0x7f8ecea1fcc0(Block(hr)(0) class:a) key=43 bounds(0,0,0,0) layerBounds(0,0,0,0) visible(0,0,120,120) building(0,0,120,120) componentAlpha(0,0,0,0) clip() asr(<0x7f8ecea1f248>) clipChain() ref=0x7f8ecea1fcc0 agr=0x7f8ecea1fcc0 (opacity 0, mChildOpacityState: Unknown)
            Mask p=0x7f8ecea6b698 f=0x7f8ecea1fcc0(Block(hr)(0) class:a) key=42 bounds(0,0,0,0) layerBounds(0,0,0,0) visible(0,0,120,120) building(0,0,120,120) componentAlpha(0,0,0,0) clip() asr() clipChain() ref=0x7f8ecea1fcc0 agr=0x7f8ecea1fcc0 effects=(clip(basic-shape))
              CompositorHitTestInfo p=0x7f8ecea6b578 f=0x7f8ecea1fcc0(Block(hr)(0) class:a) key=25 bounds(0,0,0,0) layerBounds(0,0,0,0) visible(0,0,60,60) building(0,0,60,60) componentAlpha(0,0,0,0) clip(0,-60,60,120) asr() clipChain(0x7f8ecea6b650 <0,-60,60,120> [root asr]) ref=0x7f8ecea1fcc0 agr=0x7f8ecea1fcc0 hitTestInfo(0x3) hitTestArea(0,0,120,120)
```

The only item in the `FixedPosition`'s subtree which has a non-null ASR is the `Opacity` item. The next step is to understand why it gets the root scroll frame's ASR.

Back to Bug 1729581 Comment 4