Summary: | integrated VNC/Spice viewer widget in virt-manager stops updating w/ xlib-xcb enabled cairo | ||
---|---|---|---|
Product: | cairo | Reporter: | Matthias Dahl <ua_bugzilla_freedesktop> |
Component: | xcb backend | Assignee: | Uli Schlachter <psychon> |
Status: | RESOLVED NOTOURBUG | QA Contact: | cairo-bugs mailing list <cairo-bugs> |
Severity: | normal | ||
Priority: | medium | CC: | fabio.coatti |
Version: | unspecified | ||
Hardware: | x86-64 (AMD64) | ||
OS: | Linux (All) | ||
Whiteboard: | |||
i915 platform: | i915 features: |
Description
Matthias Dahl
2014-10-14 14:50:51 UTC
Just for completeness, this is the bug report for virt-manager that I opened before I came to realize that this was a cairo problem: https://bugzilla.redhat.com/show_bug.cgi?id=1151830 This seems to be still present in cairo 1.14.2, any news on this bug? Thanks Sigh. The bug is in spice. In `spike-gtk-0.25` (I'm looking at the version in debian testing), go to `gtk/spice-widget-cairo.c`, line 126. After the `if (d->ximage) {` add `cairo_surface_mark_dirty(d->ximage)` and see if that fixes the problem. It might also make everything die with an assertion failure. I cannot find any code that draws to the cairo image surface that is saved in `d->ximage`, but from what I see is that spice is modifying the image data inside of an image surface behind of cairo's back. Spice has to call `cairo_surface_flush()` before drawing directly to that data and `cairo_surface_mark_dirty()` or `cairo_surface_mark_dirty_area()` afterwards. Without this, cairo assumes that the pixel content of the image surface did not change and thus does some clever caching to speed things up. This might only break with `xlib-xcb`, but is still a bug in spice. It seems like the function `invalidate()` in spice-widget.c gets notified about changes part of the image. I guess this should call `cairo_surface_mark_dirty_rectangle()` with the right arguments (directly the arguments of the function?). |
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.