Extreme flicker / hanging when opening history menu
Categories
(Core :: Graphics: WebRender, defect, P2)
Tracking
()
People
(Reporter: gcp, Unassigned)
References
(Blocks 1 open bug, Regression)
Details
(Keywords: regression, Whiteboard: [proton-hamburger-menu] [priority:2b])
Attachments
(3 files)
Current Nightly, Windows 10 (latest updates)
Description: NVIDIA GeForce GTX 1070
Vendor ID: 0x10de
Device ID: 0x1b81
Driver Version: 27.21.14.6192
Driver Date: 3-10-2021
Going to Menu->Library->History
Opening the menu either
- Hangs the entire browser UI. Nothing is clickable any more, requires killing via task manager.
- Causes extreme flicker.
Movie attached.
Reporter | ||
Comment 1•4 years ago
|
||
Reporter | ||
Comment 2•4 years ago
|
||
This is a movie of the "hang".
Reporter | ||
Comment 3•4 years ago
|
||
I can reproduce this with "synced tabs" too so it's specific to how those kind of menus get drawn. Not sure whether to move under gfx or win32 widget.
Reporter | ||
Comment 4•4 years ago
|
||
I can reproduce this with software WebRender, though in that case tab titles remain clickable when it "hangs".
It does NOT reproduce without WebRender using classic Direct3D11 compositing.
Reporter | ||
Comment 5•4 years ago
|
||
It looks like the hangs eventually recover after a long wait, and I managed to profile one: https://share.firefox.dev/3ddFd7T
Comment 6•4 years ago
|
||
Can you get a regression window?
Updated•4 years ago
|
Updated•4 years ago
|
Updated•4 years ago
|
Comment 7•4 years ago
|
||
Possibly relevant: there are flickering issues that appear when the native compositor is not in use, see Lee's comment https://bugzilla.mozilla.org/show_bug.cgi?id=1680128#c17.
Reporter | ||
Comment 8•4 years ago
|
||
I start crashing on startup at this range, but it seems pretty obvious that the breakage is due to bug 1697040.
Updated•4 years ago
|
Reporter | ||
Comment 9•4 years ago
|
||
This is basically a dupe of bug 1700101 but with the entire browser locking up as additional fallout.
Comment 10•4 years ago
|
||
(In reply to Gian-Carlo Pascutto [:gcp] from comment #9)
This is basically a dupe of bug 1700101 but with the entire browser locking up as additional fallout.
Can you confirm by flipping 'gfx.webrender.software.unaccelerated-widget.allow'?
Reporter | ||
Comment 11•4 years ago
|
||
Yes, tried that, and I didn't manage to produce any failures.
Comment 12•4 years ago
|
||
Hey Gcp, about how many entries do you have in your history drop down?
Updated•4 years ago
|
Reporter | ||
Comment 13•4 years ago
|
||
Hey Gcp, about how many entries do you have in your history drop down?
About 34, see video.
Updated•4 years ago
|
Updated•4 years ago
|
Comment 17•3 years ago
|
||
I can easily reproduce this on my Windows 10 desktop (NVIDIA Geforce 1080 Ti, 144Hz monitor) by clicking either history or bookmarks panel arrow from the library drop-down menu. This issue is very likely the root cause of bug 1705085.
Updated•3 years ago
|
Updated•3 years ago
|
Comment 19•3 years ago
|
||
Hang seemed to happen by flood of nsWindow::OnPaint(). And WM_PAINT message seemed to be triggered by nsWindow::Invalidate().
nsWindow::Invalidate() was called from nsWindow::Resize().
Call stack was like the following.
nsWindow::Resize()
nsBaseWidget::ResizeClient()
nsView::DoResetWidgetBounds()
nsView::ResetWidgetBounds()
nsViewManager::ProcessPendingUpdatesForView()
nsViewManager::ProcessPendingUpdates()
nsViewManager::WillPaintWindow()
nsView::WillPaintWindow()
nsWindow::OnPaint()
nsWindow::ProcessMessage()
nsWindow::WindowProcInternal()
CallWindowProcCrashProtected()
nsWindow::WindowProc()
Comment 20•3 years ago
|
||
When the hang happened, widget->ResizeClient() was always called in nsView::DoResetWidgetBounds(), since nsWindow::Resize() did not update widget size.
argument of nsWindow::Resize() was (447.0, -912.0), but it was adjusted to (447, 12) by ConstrainSize(&width, &height). And window size was not updated as expected.
Comment 21•3 years ago
|
||
Created Bug 1709864 for comment 20.
Comment 22•3 years ago
|
||
I looked into more. nsWindow::Resize() was not root cause of the hang(nsWindow::OnPaint() flood).nsWindow::Resize() caused the problem because, argument aHeight became negative value. It happened by size mismatch between GetClientBounds() and mBounds in nsBaseWidget::ResizeClient().
The size mismatch was caused by UpdateLayeredWindow() call in PresentableSharedImage::PresentToWindow(). When window size was changed, old window size could be applied via size of mSharedImage. The old size was applied as window size.
Updated•3 years ago
|
Updated•3 years ago
|
Updated•3 years ago
|
Comment 23•3 years ago
|
||
:gcp, is the problem addressed on latest nightly?
Updated•3 years ago
|
Reporter | ||
Comment 24•3 years ago
|
||
I don't see this any more, but Proton completely changed the layout of the History menu, including reducing the amount of entries, so it's actually pretty hard to verify.
Comment 25•3 years ago
|
||
Thank you for the confirmation.
Description
•