From: Marc-André Lureau <marcandre.lureau@xxxxxxxxx> --- server/display-channel.c | 13 +++++++------ server/display-channel.h | 10 +++++++--- server/red_worker.c | 24 ++++++++++++------------ 3 files changed, 26 insertions(+), 21 deletions(-) diff --git a/server/display-channel.c b/server/display-channel.c index 7aa3ea9..0ec27e3 100644 --- a/server/display-channel.c +++ b/server/display-channel.c @@ -752,9 +752,10 @@ static int current_add(DisplayChannel *display, Ring *ring, Drawable *drawable) current_add_drawable(display, drawable, ring); } else { /* - * red_detach_streams_behind can affect the current tree since it may - * trigger calls to update_area. Thus, the drawable should be added to the tree - * before calling red_detach_streams_behind + * red_detach_streams_behind can affect the current tree since + * it may trigger calls to display_channel_draw. Thus, the + * drawable should be added to the tree before calling + * red_detach_streams_behind */ current_add_drawable(display, drawable, ring); if (is_primary_surface(display, drawable->surface_id)) { @@ -1109,7 +1110,7 @@ void display_channel_drawable_unref(DisplayChannel *display, Drawable *drawable) display->drawable_count--; } -static void drawable_deps_update(DisplayChannel *display, Drawable *drawable) +static void drawable_deps_draw(DisplayChannel *display, Drawable *drawable) { int x; int surface_id; @@ -1118,7 +1119,7 @@ static void drawable_deps_update(DisplayChannel *display, Drawable *drawable) surface_id = drawable->surface_deps[x]; if (surface_id != -1 && drawable->depend_items[x].drawable) { depended_item_remove(&drawable->depend_items[x]); - red_update_area(display, &drawable->red_drawable->surfaces_rects[x], surface_id); + display_channel_draw(display, &drawable->red_drawable->surfaces_rects[x], surface_id); } } } @@ -1129,7 +1130,7 @@ void drawable_draw(DisplayChannel *display, Drawable *drawable) SpiceCanvas *canvas; SpiceClip clip = drawable->red_drawable->clip; - drawable_deps_update(display, drawable); + drawable_deps_draw(display, drawable); surface = &display->surfaces[drawable->surface_id]; canvas = surface->context.canvas; diff --git a/server/display-channel.h b/server/display-channel.h index 266df2c..a454218 100644 --- a/server/display-channel.h +++ b/server/display-channel.h @@ -250,6 +250,13 @@ typedef struct UpgradeItem { } UpgradeItem; +void display_channel_draw (DisplayChannel *display, + const SpiceRect *area, + int surface_id); +void display_channel_draw_till (DisplayChannel *display, + const SpiceRect *area, + int surface_id, + Drawable *last); void display_channel_free_some (DisplayChannel *display); void display_channel_set_stream_video (DisplayChannel *display, int stream_video); @@ -395,8 +402,5 @@ void detach_streams_behind(DisplayChannel *display, QRegion *region, Drawable *d void drawable_draw(DisplayChannel *display, Drawable *item); void current_remove_all(DisplayChannel *display, int surface_id); void drawables_init(DisplayChannel *display); -void red_update_area(DisplayChannel *display, const SpiceRect *area, int surface_id); -void red_update_area_till(DisplayChannel *display, const SpiceRect *area, int surface_id, - Drawable *last); #endif /* DISPLAY_CHANNEL_H_ */ diff --git a/server/red_worker.c b/server/red_worker.c index ec488db..150b166 100644 --- a/server/red_worker.c +++ b/server/red_worker.c @@ -494,9 +494,9 @@ static void dcc_detach_stream_gracefully(DisplayChannelClient *dcc, stream_id, stream->current != NULL); rect_debug(&upgrade_area); if (update_area_limit) { - red_update_area_till(DCC_TO_DC(dcc), &upgrade_area, 0, update_area_limit); + display_channel_draw_till(DCC_TO_DC(dcc), &upgrade_area, 0, update_area_limit); } else { - red_update_area(DCC_TO_DC(dcc), &upgrade_area, 0); + display_channel_draw(DCC_TO_DC(dcc), &upgrade_area, 0); } dcc_add_surface_area_image(dcc, 0, &upgrade_area, NULL, FALSE); } @@ -601,7 +601,7 @@ static void red_get_area(DisplayChannel *display, int surface_id, const SpiceRec surface = &display->surfaces[surface_id]; if (update) { - red_update_area(display, area, surface_id); + display_channel_draw(display, area, surface_id); } canvas = surface->context.canvas; @@ -712,7 +712,7 @@ static inline int red_handle_depends_on_target_surface(DisplayChannel *display, Drawable *drawable; DependItem *depended_item = SPICE_CONTAINEROF(ring_item, DependItem, ring_item); drawable = depended_item->drawable; - red_update_area(display, &drawable->red_drawable->bbox, drawable->surface_id); + display_channel_draw(display, &drawable->red_drawable->bbox, drawable->surface_id); } return TRUE; @@ -925,7 +925,7 @@ static void validate_area(DisplayChannel *display, const SpiceRect *area, uint32 Renders drawables for updating the requested area, but only drawables that are older than 'last' (exclusive). */ -void red_update_area_till(DisplayChannel *display, const SpiceRect *area, int surface_id, +void display_channel_draw_till(DisplayChannel *display, const SpiceRect *area, int surface_id, Drawable *last) { RedSurface *surface; @@ -992,10 +992,10 @@ void red_update_area_till(DisplayChannel *display, const SpiceRect *area, int su container = now->tree_item.base.container; current_remove_drawable(display, now); container_cleanup(container); - /* drawable_draw may call red_update_area for the surfaces 'now' depends on. Notice, - that it is valid to call red_update_area in this case and not red_update_area_till: + /* drawable_draw may call display_channel_draw for the surfaces 'now' depends on. Notice, + that it is valid to call display_channel_draw in this case and not display_channel_draw_till: It is impossible that there was newer item then 'last' in one of the surfaces - that red_update_area is called for, Otherwise, 'now' would have already been rendered. + that display_channel_draw is called for, Otherwise, 'now' would have already been rendered. See the call for red_handle_depends_on_target_surface in red_process_draw */ drawable_draw(display, now); display_channel_drawable_unref(display, now); @@ -1003,7 +1003,7 @@ void red_update_area_till(DisplayChannel *display, const SpiceRect *area, int su validate_area(display, area, surface_id); } -void red_update_area(DisplayChannel *display, const SpiceRect *area, int surface_id) +void display_channel_draw(DisplayChannel *display, const SpiceRect *area, int surface_id) { RedSurface *surface; Ring *ring; @@ -1176,7 +1176,7 @@ static int red_process_commands(RedWorker *worker, uint32_t max_pipe_size, int * spice_warning("Invalid surface in QXL_CMD_UPDATE"); break; } - red_update_area(worker->display_channel, &update.area, update.surface_id); + display_channel_draw(worker->display_channel, &update.area, update.surface_id); worker->qxl->st->qif->notify_update(worker->qxl, update.update_id); release_info_ext.group_id = ext_cmd.group_id; release_info_ext.info = update.release_info; @@ -1826,7 +1826,7 @@ static void red_add_lossless_drawable_dependencies(RedChannelClient *rcc, } else { sync_rendered = FALSE; for (i = 0; i < num_deps; i++) { - red_update_area_till(display, deps_areas[i], + display_channel_draw_till(display, deps_areas[i], deps_surfaces_ids[i], item); } } @@ -4356,7 +4356,7 @@ void display_channel_update(DisplayChannel *display, spice_return_if_fail(validate_surface(display, surface_id)); red_get_rect_ptr(&rect, area); - red_update_area(display, &rect, surface_id); + display_channel_draw(display, &rect, surface_id); surface = &display->surfaces[surface_id]; if (!*qxl_dirty_rects) { -- 2.4.3 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel