mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/spice
synced 2026-08-08 16:48:06 +00:00
worker: move red_process_draw to display-channel.c
Signed-off-by: Frediano Ziglio <fziglio@redhat.com> Acked-by: Fabiano Fidêncio <fidencio@redhat.com> Acked-by: Jonathon Jongsma <jjongsma@redhat.com>
This commit is contained in:
parent
dfaf83235f
commit
1940972ca9
@ -1098,9 +1098,9 @@ static int validate_drawable_bbox(DisplayChannel *display, RedDrawable *drawable
|
||||
*
|
||||
* @return initialized Drawable or NULL on failure
|
||||
*/
|
||||
Drawable *display_channel_get_drawable(DisplayChannel *display, uint8_t effect,
|
||||
RedDrawable *red_drawable, uint32_t group_id,
|
||||
uint32_t process_commands_generation)
|
||||
static Drawable *display_channel_get_drawable(DisplayChannel *display, uint8_t effect,
|
||||
RedDrawable *red_drawable, uint32_t group_id,
|
||||
uint32_t process_commands_generation)
|
||||
{
|
||||
Drawable *drawable;
|
||||
int x;
|
||||
@ -1145,7 +1145,7 @@ Drawable *display_channel_get_drawable(DisplayChannel *display, uint8_t effect,
|
||||
* Add a Drawable to the items to draw.
|
||||
* On failure the Drawable is not added.
|
||||
*/
|
||||
void display_channel_add_drawable(DisplayChannel *display, Drawable *drawable)
|
||||
static void display_channel_add_drawable(DisplayChannel *display, Drawable *drawable)
|
||||
{
|
||||
int success = FALSE, surface_id = drawable->surface_id;
|
||||
RedDrawable *red_drawable = drawable->red_drawable;
|
||||
@ -1195,6 +1195,23 @@ void display_channel_add_drawable(DisplayChannel *display, Drawable *drawable)
|
||||
#endif
|
||||
}
|
||||
|
||||
void display_channel_process_draw(DisplayChannel *display, RedDrawable *red_drawable,
|
||||
uint32_t group_id, int process_commands_generation)
|
||||
{
|
||||
Drawable *drawable =
|
||||
display_channel_get_drawable(display, red_drawable->effect, red_drawable, group_id,
|
||||
process_commands_generation);
|
||||
|
||||
if (!drawable) {
|
||||
return;
|
||||
}
|
||||
|
||||
display_channel_add_drawable(display, drawable);
|
||||
|
||||
display_channel_drawable_unref(display, drawable);
|
||||
}
|
||||
|
||||
|
||||
int display_channel_wait_for_migrate_data(DisplayChannel *display)
|
||||
{
|
||||
uint64_t end_time = red_get_monotonic_time() + DISPLAY_CLIENT_MIGRATE_DATA_TIMEOUT;
|
||||
|
||||
@ -286,8 +286,6 @@ void display_channel_surface_unref (DisplayCha
|
||||
uint32_t surface_id);
|
||||
bool display_channel_surface_has_canvas (DisplayChannel *display,
|
||||
uint32_t surface_id);
|
||||
void display_channel_add_drawable (DisplayChannel *display,
|
||||
Drawable *drawable);
|
||||
void display_channel_current_flush (DisplayChannel *display,
|
||||
int surface_id);
|
||||
int display_channel_wait_for_migrate_data (DisplayChannel *display);
|
||||
@ -300,11 +298,10 @@ void display_channel_destroy_surfaces (DisplayCha
|
||||
void display_channel_destroy_surface (DisplayChannel *display,
|
||||
uint32_t surface_id);
|
||||
uint32_t display_channel_generate_uid (DisplayChannel *display);
|
||||
Drawable * display_channel_get_drawable (DisplayChannel *display,
|
||||
uint8_t effect,
|
||||
void display_channel_process_draw (DisplayChannel *display,
|
||||
RedDrawable *red_drawable,
|
||||
uint32_t group_id,
|
||||
uint32_t process_commands_generation);
|
||||
int process_commands_generation);
|
||||
void display_channel_process_surface_cmd (DisplayChannel *display,
|
||||
RedSurfaceCmd *surface,
|
||||
uint32_t group_id,
|
||||
|
||||
@ -165,23 +165,6 @@ void red_drawable_unref(RedWorker *worker, RedDrawable *red_drawable,
|
||||
free(red_drawable);
|
||||
}
|
||||
|
||||
static inline void red_process_draw(RedWorker *worker, RedDrawable *red_drawable,
|
||||
uint32_t group_id)
|
||||
{
|
||||
DisplayChannel *display = worker->display_channel;
|
||||
Drawable *drawable =
|
||||
display_channel_get_drawable(display, red_drawable->effect, red_drawable, group_id,
|
||||
worker->process_display_generation);
|
||||
|
||||
if (!drawable) {
|
||||
return;
|
||||
}
|
||||
|
||||
display_channel_add_drawable(worker->display_channel, drawable);
|
||||
|
||||
display_channel_drawable_unref(display, drawable);
|
||||
}
|
||||
|
||||
static int red_process_cursor(RedWorker *worker, uint32_t max_pipe_size, int *ring_is_empty)
|
||||
{
|
||||
QXLCommandExt ext_cmd;
|
||||
@ -284,7 +267,8 @@ static int red_process_display(RedWorker *worker, uint32_t max_pipe_size, int *r
|
||||
|
||||
if (!red_get_drawable(&worker->mem_slots, ext_cmd.group_id,
|
||||
red_drawable, ext_cmd.cmd.data, ext_cmd.flags)) {
|
||||
red_process_draw(worker, red_drawable, ext_cmd.group_id);
|
||||
display_channel_process_draw(worker->display_channel, red_drawable, ext_cmd.group_id,
|
||||
worker->process_display_generation);
|
||||
}
|
||||
// release the red_drawable
|
||||
red_drawable_unref(worker, red_drawable, ext_cmd.group_id);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user