Open Bug 1491000 Opened 2 years ago Updated 5 months ago

Assertion failure: false (Two layers that scroll together have different ancestor transforms), at /builds/worker/workspace/build/src/gfx/layers/apz/src/APZCTreeManager.cpp:1087

Categories

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

defect

Tracking

()

Tracking Status
firefox64 --- wontfix
firefox65 --- wontfix
firefox66 --- affected
firefox67 --- affected

People

(Reporter: truber, Unassigned)

References

(Blocks 5 open bugs)

Details

(Keywords: assertion, crash, testcase)

Attachments

(1 file, 1 obsolete file)

Attached file test.html (obsolete) —
The attached testcase causes an assertion in m-c 20180913-efccb758c78c.

It looks similar to bug 1450686, but that testcase doesn't assert with WebRender enabled, and this one doesn't assert without WebRender enabled.

Assertion failure: false (Two layers that scroll together have different ancestor transforms), at /builds/worker/workspace/build/src/gfx/layers/apz/src/APZCTreeManager.cpp:1087
#0: mozilla::layers::HitTestingTreeNode* mozilla::layers::APZCTreeManager::PrepareNodeForLayer<mozilla::layers::WebRenderScrollDataWrapper>(mozilla::RecursiveMutexAutoLock const&, mozilla::layers::WebRenderScrollDataWrapper const&, mozilla::layers::FrameMetrics const&, mozilla::layers::LayersId, mozilla::layers::AncestorTransform const&, mozilla::layers::HitTestingTreeNode*, mozilla::layers::HitTestingTreeNode*, mozilla::layers::APZCTreeManager::TreeBuildingState&)
        at gfx/layers/apz/src/APZCTreeManager.cpp:996
#2: mozilla::layers::ForEachNode<mozilla::layers::ReverseIterator, mozilla::layers::WebRenderScrollDataWrapper, mozilla::layers::APZCTreeManager::UpdateHitTestingTreeImpl(mozilla::layers::LayersId, const ScrollNode&, bool, mozilla::layers::LayersId, uint32_t) [with ScrollNode = mozilla::layers::WebRenderScrollDataWrapper]::<lambda(mozilla::layers::WebRenderScrollDataWrapper)>, mozilla::layers::APZCTreeManager::UpdateHitTestingTreeImpl(mozilla::layers::LayersId, const ScrollNode&, bool, mozilla::layers::LayersId, uint32_t) [with ScrollNode = mozilla::layers::WebRenderScrollDataWrapper]::<lambda(mozilla::layers::WebRenderScrollDataWrapper)> >
        at gfx/layers/TreeTraversal.h:137
#3: mozilla::layers::ForEachNode<mozilla::layers::ReverseIterator, mozilla::layers::WebRenderScrollDataWrapper, mozilla::layers::APZCTreeManager::UpdateHitTestingTreeImpl(mozilla::layers::LayersId, const ScrollNode&, bool, mozilla::layers::LayersId, uint32_t) [with ScrollNode = mozilla::layers::WebRenderScrollDataWrapper]::<lambda(mozilla::layers::WebRenderScrollDataWrapper)>, mozilla::layers::APZCTreeManager::UpdateHitTestingTreeImpl(mozilla::layers::LayersId, const ScrollNode&, bool, mozilla::layers::LayersId, uint32_t) [with ScrollNode = mozilla::layers::WebRenderScrollDataWrapper]::<lambda(mozilla::layers::WebRenderScrollDataWrapper)> >
        at gfx/layers/TreeTraversal.h:142
#4: mozilla::layers::ForEachNode<mozilla::layers::ReverseIterator, mozilla::layers::WebRenderScrollDataWrapper, mozilla::layers::APZCTreeManager::UpdateHitTestingTreeImpl(mozilla::layers::LayersId, const ScrollNode&, bool, mozilla::layers::LayersId, uint32_t) [with ScrollNode = mozilla::layers::WebRenderScrollDataWrapper]::<lambda(mozilla::layers::WebRenderScrollDataWrapper)>, mozilla::layers::APZCTreeManager::UpdateHitTestingTreeImpl(mozilla::layers::LayersId, const ScrollNode&, bool, mozilla::layers::LayersId, uint32_t) [with ScrollNode = mozilla::layers::WebRenderScrollDataWrapper]::<lambda(mozilla::layers::WebRenderScrollDataWrapper)> >
        at gfx/layers/TreeTraversal.h:142
#5: mozilla::layers::ForEachNode<mozilla::layers::ReverseIterator, mozilla::layers::WebRenderScrollDataWrapper, mozilla::layers::APZCTreeManager::UpdateHitTestingTreeImpl(mozilla::layers::LayersId, const ScrollNode&, bool, mozilla::layers::LayersId, uint32_t) [with ScrollNode = mozilla::layers::WebRenderScrollDataWrapper]::<lambda(mozilla::layers::WebRenderScrollDataWrapper)>, mozilla::layers::APZCTreeManager::UpdateHitTestingTreeImpl(mozilla::layers::LayersId, const ScrollNode&, bool, mozilla::layers::LayersId, uint32_t) [with ScrollNode = mozilla::layers::WebRenderScrollDataWrapper]::<lambda(mozilla::layers::WebRenderScrollDataWrapper)> >
        at gfx/layers/TreeTraversal.h:142
#6: mozilla::layers::ForEachNode<mozilla::layers::ReverseIterator, mozilla::layers::WebRenderScrollDataWrapper, mozilla::layers::APZCTreeManager::UpdateHitTestingTreeImpl(mozilla::layers::LayersId, const ScrollNode&, bool, mozilla::layers::LayersId, uint32_t) [with ScrollNode = mozilla::layers::WebRenderScrollDataWrapper]::<lambda(mozilla::layers::WebRenderScrollDataWrapper)>, mozilla::layers::APZCTreeManager::UpdateHitTestingTreeImpl(mozilla::layers::LayersId, const ScrollNode&, bool, mozilla::layers::LayersId, uint32_t) [with ScrollNode = mozilla::layers::WebRenderScrollDataWrapper]::<lambda(mozilla::layers::WebRenderScrollDataWrapper)> >
        at gfx/layers/TreeTraversal.h:142
#7: void mozilla::layers::APZCTreeManager::UpdateHitTestingTreeImpl<mozilla::layers::WebRenderScrollDataWrapper>(mozilla::layers::LayersId, mozilla::layers::WebRenderScrollDataWrapper const&, bool, mozilla::layers::LayersId, unsigned int)
        at gfx/layers/apz/src/APZCTreeManager.cpp:406
#8: mozilla::detail::RunnableFunction<mozilla::layers::APZUpdater::UpdateScrollDataAndTreeState(mozilla::layers::LayersId, mozilla::layers::LayersId, const Epoch&, mozilla::layers::WebRenderScrollData&&)::<lambda()> >::Run
        at gfx/layers/apz/src/APZUpdater.cpp:230
#9: mozilla::layers::APZUpdater::ProcessQueue()
        at gfx/layers/apz/src/APZUpdater.cpp:515
#10: mozilla::layers::APZUpdater::CompleteSceneSwap(mozilla::wr::WrWindowId const&, mozilla::wr::WrPipelineInfo const&)
        at gfx/layers/apz/src/APZUpdater.cpp:130
#11: apz_post_scene_swap
        at gfx/layers/apz/src/APZUpdater.cpp:574
#12: <webrender_bindings::bindings::APZCallbacks as webrender::renderer::SceneBuilderHooks>::post_scene_swap
        at gfx/webrender_bindings/src/bindings.rs:743
#13: webrender::scene_builder::SceneBuilder::run
        at gfx/webrender/src/scene_builder.rs:384
#14: std::sys_common::backtrace::__rust_begin_short_backtrace
        at gfx/webrender/src/renderer.rs:1695
#15: std::panicking::try::do_call
        at src/libstd/thread/mod.rs:409
#16: __rust_maybe_catch_panic
        at src/libpanic_abort/lib.rs:39
#17: <F as alloc::boxed::FnBox<A>>::call_box
        at src/libstd/panicking.rs:289
#18: std::sys_common::thread::start_thread
        at src/liballoc/boxed.rs:650
#19: std::sys::unix::thread::Thread::new::thread_start
        at src/libstd/sys/unix/thread.rs:90
Priority: -- → P2
Priority: P2 → P3
Flags: needinfo?(kats)
This is a debug assertion so it shouldn't be crashing for end users. But it might result in some weird scrolling behaviour if we run into similar display list structure on real-world pages. I'll basically need to debug it fully in order to understand what's causing it and what the impact would be. Let's leave it P3 for now, we can promote it to P2 eventually and investigate.
Flags: needinfo?(kats)
Blocks: stage-wr-next
No longer blocks: stage-wr-trains
Attached file testcase.html

This test case is hitting the same assertion but is also crashing in non-debug builds.

Attachment #9008737 - Attachment is obsolete: true
See Also: → 1576514
Blocks: 1587369

Please let me know if a Pernosco session would be helpful and I will attach one.

You need to log in before you can comment on or make changes to this bug.