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.
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.