-
Notifications
You must be signed in to change notification settings - Fork 632
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
GUACAMOLE-377: Add libguac "guac_display" API for easy and efficient rendering. #525
base: main
Are you sure you want to change the base?
Conversation
I've been using the following patch to observe the impact these changes: https://gist.github.com/mike-jumper/0afd41c9fbcbc764f719890fd0dd4e3b With the above patch in place, you can set
Behavior of
|
3b6293e
to
74b1bc0
Compare
b53e369
to
76425f0
Compare
f7c95e1
to
9d59da5
Compare
9d59da5
to
05166ae
Compare
530af79
to
871364d
Compare
871364d
to
0fc450b
Compare
… of unknown size).
With FreeRDP's GDI being used for ther other aspects of RDP drawing, using our own implementation of bitmap caching causes the FreeRDP's GDI to become out-of-sync with Guacamole's representation, producing graphical artifacts. We can't simply monkey-patch the GDI, as the functions used are internal and not part of the public FreeRDP API. There are likely other possible approaches, like manually updating FreeRDP's GDI surface in addition to Guacamole's surface, but this may not be worth the effort given that bitmap caching is not commonly used by modern RDP servers.
0fc450b
to
f508677
Compare
…erwise encumbering testing of terminal emulator refactor).
The new guac_display otherwise tends to run out of outbound, client-wide streams.
…vs. general failure of WaitForMultipleObjects(). The conversion of WAIT_FAILED to a signed int and back may cause the value of result to not actually match the value of the WAIT_FAILED macro due to the difference in size and sign extension during conversion.
…-critical operations (~3x faster).
… from src/common/.
…ining no graphics.
…r to be external.
It is otherwise difficult to guarantee that all operations touching the pending frame buffer will occur while holding an open raw context, resulting in unstable behavior.
No longer necessary now that the last and pending frame buffers are not interleaved.
…ursor for use by terminal.
bb7e363
to
693f0f2
Compare
…inations to aligned boundaries.
693f0f2
to
4df0b71
Compare
This change builds off the internal
guac_common_display
andguac_common_surface
structures to create a new publicguac_display
structure and surrounding API. The approach withinguac_display
improves on that ofguac_common_surface
in several ways:guac_display
is created.rect
followed bycfill
are automatically recognized and sent out as such.guac_display
may have been.With these changes, you can now throw virtually anything at the display and it will magically get decomposed into an efficient combination of copies, draws, and rectangles, even if the information regarding the nature of those updates is unavailable (ie: RDPGFX and SPICE).
Metrics covering rendering and optimization performance of
guac_display
are logged at the "trace" level.I'm opening this as a draft for now, as these changes are currently incomplete:
Once the above is finished, I'll delete the old
guac_common_display
,guac_common_surface
, etc. and this will be ready.