Closed Bug 1743731 Opened 2 years ago Closed 2 years ago

Assertion failure: false (Two layers that scroll together have different ancestor transforms) print preview fission transformed iframe

Categories

(Core :: Panning and Zooming, defect, P3)

defect

Tracking

()

RESOLVED FIXED
102 Branch
Tracking Status
firefox-esr91 --- disabled
firefox95 --- wontfix
firefox96 --- wontfix
firefox97 --- wontfix
firefox100 --- wontfix
firefox101 --- wontfix
firefox102 --- fixed

People

(Reporter: tnikkel, Assigned: botond)

References

Details

(Keywords: assertion, Whiteboard: [fission])

Attachments

(2 files)

Attached file tif2.html

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

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.

Severity: -- → S3
Priority: -- → P3

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.

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

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

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.

(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: nobody → botond
Status: NEW → ASSIGNED
Pushed by bballo@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/b0009f4fbf05
Disable the 'two layers that scroll together' assertion for content being presented in a paginated way. r=tnikkel
Status: ASSIGNED → RESOLVED
Closed: 2 years ago
Resolution: --- → FIXED
Target Milestone: --- → 102 Branch
See Also: → 1771503
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: