Cloudef / wlc

High-level Wayland compositor library
MIT License
330 stars 58 forks source link

Disappearing / black views #79

Open sce opened 9 years ago

sce commented 9 years ago

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

sce commented 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
Cloudef commented 9 years ago

Thank you. According to log it seems surfaces and render-loop itself seems to be as expected. It will need deeper investigation.

sce commented 9 years ago

I made a video to demonstrate this bug (in case you can't reproduce it yourself): https://youtu.be/jnTs81UXJmg , hopefully this is helpful.

Cloudef commented 9 years ago

That looks like the texture for the surface is not reuploaded after context is recreated. This helps track down the issue.

sce commented 9 years ago

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.

Cloudef commented 8 years ago

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

sce commented 8 years ago

Unfortunately I can still reproduce this reliably, like in the video :-/

Earnestly commented 8 years ago

Perhaps it's driver related? I assume you're on mesa, but with which driver?

sce commented 8 years ago

My hardware is radeon 6950 (cayman) which would be the r600 driver.