Open sce opened 9 years ago
After some more investigation it seems that an x11 window needs to be involved to trigger the bug.
In situation B, the window that is "on top" / last had focus will "survive", and the other(s) will go black (x11 or wayland, doesn't matter). Once one of the disappeared windows receive focus again then all windows re-appear.
This is how it looks after gkrellm has turned black. (It is floating in front of a visible terminal window.) Once it receives focus it becomes visible again:
[wlc] -> Repaint
[wlc] -> Finished frame
[wlc] -> Attach request
[wlc] -> Damage request
[wlc] -> Frame request
[wlc] -> Attached surface (8) with buffer of size (1920x1080)
[wlc] -> Activity marked
[wlc] -> Repaint scheduled
[wlc] => surface view 5
[wlc] -> Commit request
[wlc] -> Interpolated idle time 1.000000 (17 : 1)
[wlc] -> Finished frame
[wlc] -> Repaint
[wlc] -> Interpolated idle time 41.000000 (50 : 0)
[wlc] -> Finished frame
[wlc] -> Repaint
[wlc] -> Repaint
[wlc] -> Activity marked
[wlc] -> Interpolated idle time 41.000000 (50 : 0)
[wlc] -> Finished frame
[wlc] -> Interpolated idle time 1.000000 (16 : 1)
[wlc] -> Finished frame
[wlc] -> Repaint
[wlc] -> Interpolated idle time 1.000000 (17 : 1)
[wlc] -> Finished frame
[wlc] -> Repaint
[wlc] -> Activity marked
[wlc] -> Attach request
[wlc] -> Damage request
[wlc] -> Frame request
[wlc] -> Attached surface (8) with buffer of size (1920x1080)
[wlc] -> Activity marked
[wlc] => surface view 5
[wlc] -> Commit request
[wlc] -> Interpolated idle time 1.000000 (17 : 1)
[wlc] -> Finished frame
[wlc] -> Repaint
[wlc] -> Interpolated idle time 1.000000 (16 : 1)
[wlc] -> Finished frame
[wlc] -> Activity marked
[wlc] -> Repaint
[wlc] -> Repaint
[wlc] -> Finished frame
[wlc] -> Interpolated idle time 1.000000 (17 : 1)
[wlc] -> Finished frame
[wlc] -> Activity marked
[wlc] -> Repaint
[wlc] -> Interpolated idle time 41.000000 (50 : 0)
[wlc] -> Finished frame
[wlc] -> Repaint
Setting focus to 0x173d8f0:7 (VIEW 'gkrellm')
[wlc] -> Attach request
[wlc] -> Damage request
[wlc] -> Frame request
[wlc] -> Attached surface (8) with buffer of size (1920x1080)
[wlc] -> Activity marked
[wlc] -> Repaint scheduled
[wlc] => surface view 5
[wlc] -> Commit request
[wlc] -> Interpolated idle time 41.000000 (50 : 0)
[wlc] -> Finished frame
[wlc] -> Attach request
[wlc] -> Damage request
[wlc] -> Frame request
[wlc] -> Attached surface (12) with buffer of size (1920x1080)
[wlc] => surface view 6
[wlc] -> Commit request
[wlc] -> Repaint
[wlc] -> Interpolated idle time 1.000000 (16 : 1)
[wlc] -> Finished frame
[wlc] -> Repaint
[wlc] -> Interpolated idle time 1.000000 (17 : 1)
[wlc] -> Finished frame
[wlc] => pending view commit 6 (0) pending: 1920x1080 commited: 1920x1080 surface: 1920x1080
[wlc] => commit view 6
[wlc] => pending view commit 7 (0) pending: 112x926 commited: 112x926 surface: 112x926
[wlc] => commit view 7
[wlc] -> Repaint
[wlc] -> Activity marked
[wlc] -> Finished frame
[wlc] -> Interpolated idle time 1.000000 (17 : 1)
[wlc] -> Finished frame
[wlc] -> Repaint
[wlc] -> Activity marked
[wlc] -> Attach request
[wlc] -> Damage request
[wlc] -> Frame request
[wlc] -> Attached surface (8) with buffer of size (1920x1080)
[wlc] -> Activity marked
[wlc] -> Repaint scheduled
[wlc] => surface view 5
[wlc] -> Commit request
[wlc] -> Repaint
[wlc] -> Repaint
[wlc] -> Interpolated idle time 1.000000 (17 : 1)
[wlc] -> Finished frame
[wlc] -> Repaint
[wlc] -> Interpolated idle time 1.000000 (16 : 1)
[wlc] -> Finished frame
[wlc] -> Interpolated idle time 41.000000 (50 : 0)
[wlc] -> Finished frame
[wlc] -> Repaint
[wlc] -> Repaint
[wlc] -> Activity marked
[wlc] -> Interpolated idle time 41.000000 (50 : 0)
[wlc] -> Finished frame
[wlc] -> Attach request
[wlc] -> Damage request
[wlc] -> Frame request
[wlc] -> Attached surface (15) with buffer of size (112x926)
[wlc] => surface view 7
[wlc] -> Commit request
[wlc] -> Finished frame
[wlc] -> Interpolated idle time 1.000000 (17 : 1)
[wlc] -> Finished frame
[wlc] -> Repaint
Thank you. According to log it seems surfaces and render-loop itself seems to be as expected. It will need deeper investigation.
I made a video to demonstrate this bug (in case you can't reproduce it yourself): https://youtu.be/jnTs81UXJmg , hopefully this is helpful.
That looks like the texture for the surface is not reuploaded after context is recreated. This helps track down the issue.
Excellent, glad to hear that. Debugging this issue is kinda out of my league, but let me know if there's anything else I can do to help.
Hmm, for some reason I can't reproduce this on neither orbment or sway. Can you check if I accidentally fixed it on commit 19b48a2
Unfortunately I can still reproduce this reliably, like in the video :-/
Perhaps it's driver related? I assume you're on mesa, but with which driver?
My hardware is radeon 6950 (cayman) which would be the r600 driver.
(This bug appears in sway, but since I think the root cause might be in wlc so I'm posting it here.)
In sway, in the following situations: A) You move a floating window to another visible workspace (ie. another output) with at least one other non-floating window, or B) You already have a workspace that is not in focus (ie. on another output) which contains at least two windows (where one window must be non-floating and the other can be either floating or non-floating), and you change tty back and forth ...
... then one of the windows will sometimes disappear/become black.
If you then move the pointer over the disappeared window or you remove the other still visible window, the disappeared window reappears.
(Similar symptoms as issue SirCmpwn/sway#141)
When changing tty back-and-forth, if the tty you switch to has an Xorg desktop on it then the bug will trigger more easily (... trigger more easily than if you switch to a console).