xpra
xpra copied to clipboard
incomplete `scroll` paints when using opengl:gtk
Describe the bug With opengl GTK sometimes remote windows appear "clear".
To Reproduce Steps to reproduce the behavior:
- server command:
xpra start :$display --start-new-commands=yes --daemon=no --systemd-run=no
- client command:
xpra attach ssh://$user@$host/$display --opengl=yes:gtk -dpaint
- this was the nextcloud client app, I clicked on the drop-down menu for the user, repeatedly. I was also able to get similar artifacts when using the "boats" program from
http://boats.sf.net
(comes with Debian). (I have no clue what this program/game does, I just know that it depends onlibqt5gui5t64
on Debian, and I suspect that it's exercising a similar path as nextcloud-desktop). This program can create similar artifacts when you select the red "create mark" button, causing the cursor have an associated circled number that moves with the mouse when the mouse moves; just kind of move the mouse all around the canvas area, eventually the paints get confused. It looks like programs that directly draw on a canvas are having problems (but I do not have a minimal reproducer program).
System Information (please complete the following information):
- Server OS: Debian unstable
- Client OS: Debian unstable
- Xpra Server Version 6.0
- Xpra Client Version 6.0 (REGRESSION relative to 5.0.8/cannot reproduce with 5.0.8)
Additional context Here is the out put of the log with -d paint:
client log
2024-04-27 00:08:03,902 draw_region(0, 0, 447, 601, scroll, 11 bytes, 0, typedict({'flush': 1, 'window-size': (447, 601)}), [<function WindowClient._do_draw.<locals>.record_decode_time at 0x7f363b7459e0>])
2024-04-27 00:08:03,903 draw_region(0, 69, 447, 186, webp, 3496 bytes, 0, typedict({'rgb_format': 'BGRA', 'quality': 100, 'has_alpha': True, 'flush': 0, 'window-size': (447, 601)}), [<function WindowClient._do_draw.<locals>.record_decode_time at 0x7f363b745bc0>, <bound method ClientWindowBase.after_draw_refresh of GLClientWindow(2 : GLAreaBacking(0x2, (447, 601)))>])
2024-04-27 00:08:03,904 do_scroll_paints(<__gi__.GdkWaylandGLContext object at 0x7f365d7ba240 (GdkWaylandGLContext at 0x4b7e280)>, ((0, 266, 447, 81, 0, -1), (0, 266, 447, 81, 0, -2), (0, 266, 447, 81, 0, -3), (0, 266, 447, 81, 0, -4), (0, 266, 447, 81, 0, -5), (0, 266, 447, 81, 0, -6), (0, 266, 447, 81, 0, -7), (0, 266, 447, 81, 0, -8), (0, 266, 447, 81, 0, -9), (0, 266, 447, 81, 0, -10), (0, 266, 447, 81, 0, -11)), 1)
2024-04-27 00:08:03,904 copy_fbo(447, 601, 0, 0, 0, 0)
2024-04-27 00:08:03,904 swap_fbos()
2024-04-27 00:08:03,904 record_decode_time(True, ) wid=2, scroll: 447x601, 2.2ms
2024-04-27 00:08:03,904 GLAreaBacking(0x2, (447, 601)).gl_paint_rgb(BGRA, 332568 bytes, x=0, y=69, width=447, height=186, rowstride=1788, options=typedict({'rgb_format': 'BGRA', 'quality': 100, 'has_alpha': True, 'flush': 0, 'window-size': (447, 601), 'encoding': 'webp'}))
2024-04-27 00:08:03,905 gravity_adjust(0, 69, typedict({'rgb_format': 'BGRA', 'quality': 100, 'has_alpha': True, 'flush': 0, 'window-size': (447, 601), 'encoding': 'webp'})) window_size=(447, 601), size=(447, 601), gravity=10
2024-04-27 00:08:03,905 record_decode_time(True, ) wid=2, webp: 447x186, 1.6ms
2024-04-27 00:08:03,905 after_draw_refresh(True, '') pending_refresh=[], backing=GLAreaBacking(0x2, (447, 601))
2024-04-27 00:08:03,905 repaint(0, 0, 447, 601) widget=<Gtk.GLArea object at 0x7f3654d10400 (GtkGLArea at 0x4acd990)>
2024-04-27 00:08:03,905 draw_fbo(<cairo.Context object at 0x7f363b713670>)
2024-04-27 00:08:03,905 on_render(<Gtk.GLArea object at 0x7f3654d10400 (GtkGLArea at 0x4acd990)>, <__gi__.GdkWaylandGLContext object at 0x7f365d7ba240 (GdkWaylandGLContext at 0x4b7e280)>)
2024-04-27 00:08:03,906 do_present_fbo(<__gi__.GdkWaylandGLContext object at 0x7f365d7ba240 (GdkWaylandGLContext at 0x4b7e280)>) will blit [(0, 0, 447, 601)]
2024-04-27 00:08:03,906 window viewport for self.render_size=(447, 601) and (0, 0, 0, 0) with scale factor 1: (0, 0, 447, 601)
2024-04-27 00:08:03,906 do_gl_show(0)
2024-04-27 00:08:03,906 GLAreaBacking(0x2, (447, 601)).do_present_fbo() done
2024-04-27 00:08:03,931 draw_fbo(<cairo.Context object at 0x7f363b713670>)
server log
2024-04-27 00:08:03,917 client 3 @46.678 draw_region(0, 0, 447, 601, scroll, 11 bytes, 0, typedict({'flush': 1, 'window-size': (447, 601)}), [<function WindowClient._do_draw.<locals>.record_decode_time at 0x7f363b7459e0>])
2024-04-27 00:08:03,917 client 3 @46.679 draw_region(0, 69, 447, 186, webp, 3496 bytes, 0, typedict({'rgb_format': 'BGRA', 'quality': 100, 'has_alpha': True, 'flush': 0, 'window-size': (447, 601)}), [<function WindowClient._do_draw.<locals>.record_decode_time at 0x7f363b745bc0>, <bound method ClientWindowBase.after_draw_refresh of GLClientWindow(2 : GLAreaBacking(0x2, (447, 601)))>])
2024-04-27 00:08:03,918 client 3 @46.679 do_scroll_paints(<__gi__.GdkWaylandGLContext object at 0x7f365d7ba240 (GdkWaylandGLContext at 0x4b7e280)>, ((0, 266, 447, 81, 0, -1), (0, 266, 447, 81, 0, -2), (0, 266, 447, 81, 0, -3), (0, 266, 447, 81, 0, -4), (0, 266, 447, 81, 0, -5), (0, 266, 447, 81, 0, -6), (0, 266, 447, 81, 0, -7), (0, 266, 447, 81, 0, -8), (0, 266, 447, 81, 0, -9), (0, 266, 447, 81, 0, -10), (0, 266, 447, 81, 0, -11)), 1)
2024-04-27 00:08:03,918 client 3 @46.679 copy_fbo(447, 601, 0, 0, 0, 0)
2024-04-27 00:08:03,918 client 3 @46.680 swap_fbos()
2024-04-27 00:08:03,918 client 3 @46.680 record_decode_time(True, ) wid=2, scroll: 447x601, 2.2ms
2024-04-27 00:08:03,919 client 3 @46.680 GLAreaBacking(0x2, (447, 601)).gl_paint_rgb(BGRA, 332568 bytes, x=0, y=69, width=447, height=186, rowstride=1788, options=typedict({'rgb_format': 'BGRA', 'quality': 100, 'has_alpha': True, 'flush': 0, 'window-size': (447, 601), 'encoding': 'webp'}))
2024-04-27 00:08:03,919 client 3 @46.680 gravity_adjust(0, 69, typedict({'rgb_format': 'BGRA', 'quality': 100, 'has_alpha': True, 'flush': 0, 'window-size': (447, 601), 'encoding': 'webp'})) window_size=(447, 601), size=(447, 601), gravity=10
2024-04-27 00:08:03,919 client 3 @46.680 record_decode_time(True, ) wid=2, webp: 447x186, 1.6ms
2024-04-27 00:08:03,919 client 3 @46.680 after_draw_refresh(True, '') pending_refresh=[], backing=GLAreaBacking(0x2, (447, 601))
2024-04-27 00:08:03,919 client 3 @46.680 repaint(0, 0, 447, 601) widget=<Gtk.GLArea object at 0x7f3654d10400 (GtkGLArea at 0x4acd990)>
2024-04-27 00:08:03,919 client 3 @46.681 draw_fbo(<cairo.Context object at 0x7f363b713670>)
2024-04-27 00:08:03,921 client 3 @46.681 on_render(<Gtk.GLArea object at 0x7f3654d10400 (GtkGLArea at 0x4acd990)>, <__gi__.GdkWaylandGLContext object at 0x7f365d7ba240 (GdkWaylandGLContext at 0x4b7e280)>)
2024-04-27 00:08:03,921 client 3 @46.681 do_present_fbo(<__gi__.GdkWaylandGLContext object at 0x7f365d7ba240 (GdkWaylandGLContext at 0x4b7e280)>) will blit [(0, 0, 447, 601)]
2024-04-27 00:08:03,921 client 3 @46.681 window viewport for self.render_size=(447, 601) and (0, 0, 0, 0) with scale factor 1: (0, 0, 447, 601)
2024-04-27 00:08:03,921 client 3 @46.681 do_gl_show(0)
2024-04-27 00:08:03,921 client 3 @46.681 GLAreaBacking(0x2, (447, 601)).do_present_fbo() done
2024-04-27 00:08:03,945 client 3 @46.706 draw_fbo(<cairo.Context object at 0x7f363b713670>)
I did trim the log from before the distortion began; I can try to get a more complete log if it would be helpful.