Assertion failure: false (Two layers that scroll together have different ancestor transforms) print preview fission transformed iframe
Categories
(Core :: Panning and Zooming, defect, P3)
Tracking
()
People
(Reporter: tnikkel, Assigned: botond)
References
Details
(Keywords: assertion, Whiteboard: [fission])
Attachments
(2 files)
Apply latest patch from bug 1743152 which fixes hitting an assert in webrender in this testcase.
Have fission enabled.
Load attached testcase.
Print preview.
Hit assert in bug title.
The testcase is very simple, an oop iframe with a scale transform that spans two pages. With our current printing code this does one unusual thing: we will create two display items (in the same display list) for the iframe, one for each page it is on.
The testcase seems to draw fine though if I comment out that assert. (using the patch I will upload to bug 1743533 which fixes a drawing issue)
(Note this is the same testcase as bug 1743576.)
Reporter | ||
Comment 1•3 years ago
|
||
Seems like there are a lot of easy to find bugs with fission + print preview + oop iframes that span multiple pages (see the other bugs I've already mentioned here). It would be good to make this assert not fire on simple testcases so we can ask our fuzzing team to fuzz these kind of scenarios to get some confidence we don't have a lot of easy to expose bugs here.
Assignee | ||
Updated•3 years ago
|
Updated•3 years ago
|
Assignee | ||
Comment 2•3 years ago
•
|
||
This one is a bit more cumbersome to investigate than other instances of this assertion, because there are multiple processes involved, each of which contributes a WRScrollData
tree, which are then combined on the compositor side, and the assertion occurs when processing the combined tree. I had a quick look through the content-side trees and it wasn't obvious which one is responsible for the assertion.
Assignee | ||
Comment 3•3 years ago
|
||
Here's a compositor-side WRScrollData
tree. (I had to manually splice it together because our current tree printing code doesn't implement crossing layers-id boundaries.)
WebRenderLayerScrollData(0x7ff8a5f68d08), descendantCount=2, metadata0={ [metrics={ [cb=(x=0, y=0, w=1280, h=972)] [sr=(x=0, y=0, w=1280, h=972)] [s=(0,0)] [dp=(x=0, y=0, w=0, h=0)] [rcs=(1280 x 972)] [v=(x=0, y=0, w=1280, h=972)] [z=(ld=1.000 r=1.000 cr=1 z=1 t=1 )] [u=(0 0)] scrollId=3 }] [color=dev_rgba(0, 0, 0, 0.000000)] [overscroll=auto] [0 scrollupdates] }, visible=[]
WebRenderLayerScrollData(0x7ff8a5f69018), descendantCount=0, transform=[ 1 0; 0 1; 0 85; ], visible=[], refLayersId=0x10000000a
WebRenderLayerScrollData(0x7ff893ad4208), descendantCount=3, visible=[]
WebRenderLayerScrollData(0x7ff893ad4390), descendantCount=2, visible=[]
WebRenderLayerScrollData(0x7ff893ad46a0), descendantCount=0, metadata0={ [metrics={ [cb=(x=0, y=0, w=1280, h=887)] [sr=(x=0, y=0, w=1280, h=1318)] [s=(0,0)] [dp=(x=0, y=0, w=1280, h=1318)] [rcs=(1280 x 887)] [v=(x=0, y=0, w=1280, h=887)] [z=(ld=1.000 r=1.000 cr=1 z=1 t=1 )] [u=(0 1)] scrollId=2 [rcd] }] [color=dev_rgba(255, 255, 255, 1.000000)] [overscroll=auto] [0 scrollupdates] }, visible=[]
WebRenderLayerScrollData(0x7ff893ad4518), descendantCount=0, metadata0={ [metrics={ [cb=(x=0, y=0, w=1280, h=887)] [sr=(x=0, y=0, w=1280, h=1318)] [s=(0,0)] [dp=(x=0, y=0, w=1280, h=1318)] [rcs=(1280 x 887)] [v=(x=0, y=0, w=1280, h=887)] [z=(ld=1.000 r=1.000 cr=1 z=1 t=1 )] [u=(0 1)] scrollId=2 [rcd] }] [color=dev_rgba(255, 255, 255, 1.000000)] [overscroll=auto] [0 scrollupdates] }, ancestorTransform=[ 2 0; 0 2; 6 510; ] (asr=2), transform=[ 1 0; 0 1; 4 4; ], visible=[], refLayersId=0x10000000b
WebRenderLayerScrollData(0x7ff893993808), descendantCount=1, visible=[]
WebRenderLayerScrollData(0x7ff893993990), descendantCount=0, metadata0={ [metrics={ [cb=(x=0, y=0, w=350, h=350)] [sr=(x=0, y=0, w=350, h=350)] [s=(0,0)] [dp=(x=0, y=0, w=350, h=350)] [rcs=(175 x 175)] [v=(x=0, y=0, w=350, h=350)] [z=(ld=1.000 r=1.000 cr=1 z=1 t=2 )] [u=(0 1)] scrollId=2 }] [color=dev_rgba(0, 0, 0, 0.000000)] [overscroll=auto] [0 scrollupdates] }, visible=[]
WebRenderLayerScrollData(0x7ff8a5f68e90), descendantCount=0, transform=[ 1 0; 0 1; 140 80; ], visible=[], refLayersId=0x10000000e
WebRenderLayerScrollData(0x7ff8ab1c8408), descendantCount=8, visible=[]
WebRenderLayerScrollData(0x7ff8ab1c88a0), descendantCount=5, visible=[]
WebRenderLayerScrollData(0x7ff8ab1c9048), descendantCount=0, metadata0={ [metrics={ [cb=(x=0, y=0, w=750, h=650)] [sr=(x=0, y=0, w=500, h=866.667)] [s=(0,0)] [dp=(x=0, y=0, w=500, h=866.667)] [rcs=(500 x 433.333)] [v=(x=0, y=0, w=500, h=433.333)] [z=(ld=1.500 r=1.000 cr=1 z=1.5 t=1 )] [u=(0 5)] scrollId=4 [rcd] }] [color=dev_rgba(255, 255, 255, 1.000000)] [overscroll=auto] [0 scrollupdates] }, visible=[]
WebRenderLayerScrollData(0x7ff8ab1c8ec0), descendantCount=0, visible=[], fixedContainer=4, fixedAnimation=0x0, sideBits=0x0
WebRenderLayerScrollData(0x7ff8ab1c8a28), descendantCount=2, metadata0={ [metrics={ [cb=(x=0, y=0, w=750, h=650)] [sr=(x=0, y=0, w=500, h=866.667)] [s=(0,0)] [dp=(x=0, y=0, w=500, h=866.667)] [rcs=(500 x 433.333)] [v=(x=0, y=0, w=500, h=433.333)] [z=(ld=1.500 r=1.000 cr=1 z=1.5 t=1 )] [u=(0 5)] scrollId=4 [rcd] }] [color=dev_rgba(255, 255, 255, 1.000000)] [overscroll=auto] [0 scrollupdates] }, visible=[]
WebRenderLayerScrollData(0x7ff8ab1c8d38), descendantCount=0, ancestorTransform=[ 0.644936 0; 0 0.644936; 179.777 280.699; ] (asr=4), transform=[ 1 0; 0 1; 6 6; ], visible=[], refLayersId=0x10000000f
WebRenderLayerScrollData(0x7ff8aeac6bb8), descendantCount=0, metadata0={ [metrics={ [cb=(x=0, y=0, w=0, h=0)] [sr=(x=0, y=0, w=0, h=0)] [s=(0,0)] [dp=(x=0, y=0, w=0, h=0)] [rcs=(0 x 0)] [v=(x=0, y=0, w=0, h=0)] [z=(ld=1.500 r=1.000 cr=1 z=1.5 t=2 )] [u=(0 3)] scrollId=3 }] [color=dev_rgba(0, 0, 0, 0.000000)] [overscroll=auto] [1 scrollupdates] }, visible=[]
WebRenderLayerScrollData(0x7ff8ab1c8bb0), descendantCount=0, ancestorTransform=[ 0.644936 0; 0 0.644936; 179.777 376.044; ] (asr=4), transform=[ 1 0; 0 1; 6 6; ], visible=[], refLayersId=0x10000000f
WebRenderLayerScrollData(0x7ff8aeac6bb8), descendantCount=0, metadata0={ [metrics={ [cb=(x=0, y=0, w=0, h=0)] [sr=(x=0, y=0, w=0, h=0)] [s=(0,0)] [dp=(x=0, y=0, w=0, h=0)] [rcs=(0 x 0)] [v=(x=0, y=0, w=0, h=0)] [z=(ld=1.500 r=1.000 cr=1 z=1.5 t=2 )] [u=(0 3)] scrollId=3 }] [color=dev_rgba(0, 0, 0, 0.000000)] [overscroll=auto] [1 scrollupdates] }, visible=[]
WebRenderLayerScrollData(0x7ff8ab1c8590), descendantCount=1, visible=[], scrollbarType=2, scrollbarAnimationId=0x0
WebRenderLayerScrollData(0x7ff8ab1c8718), descendantCount=0, visible=[738,0,750,302], scrollbarType=1, scrollbarAnimationId=0x32cf00000007
Assignee | ||
Comment 4•3 years ago
|
||
(In reply to Timothy Nikkel (:tnikkel) from comment #0)
The testcase is very simple, an oop iframe with a scale transform that spans two pages. With our current printing code this does one unusual thing: we will create two display items (in the same display list) for the iframe, one for each page it is on.
This can be seen in the WRScrollData
tree in comment 3: refLayersId=0x10000000f
is present on two different nodes, and results in the corresponding nested-process subtree being spliced in twice. The two nodes in question have different transforms, hence the the APZC for the 0x10000000f
iframe's root scroll frame runs into this assertion.
Assignee | ||
Comment 5•3 years ago
|
||
Given that you can't interact with the iframe in question in the print preview window (e.g. you can't scroll it), I don't see anything functionally wrong with this setup. I think it's just a matter of finding a practical carve-out that would prevent the assertion from firing in this case.
Assignee | ||
Comment 6•3 years ago
|
||
(In reply to Botond Ballo [:botond] from comment #3)
I had to manually splice it together because our current tree printing code doesn't implement crossing layers-id boundaries.
Filed bug 1759627 for this.
Assignee | ||
Comment 7•3 years ago
|
||
Updated•3 years ago
|
Comment 9•3 years ago
|
||
bugherder |
Updated•3 years ago
|
Description
•