On Wed, Nov 25, 2015 at 4:27 PM, Frediano Ziglio <fziglio@xxxxxxxxxx> wrote: > From: Marc-André Lureau <marcandre.lureau@xxxxxxxxx> > > --- > server/display-channel.c | 44 ++++++++++++-------------------------------- > server/display-channel.h | 2 +- > server/red_worker.c | 5 ++--- > 3 files changed, 15 insertions(+), 36 deletions(-) > > diff --git a/server/display-channel.c b/server/display-channel.c > index 65bcc1c..b8d5a81 100644 > --- a/server/display-channel.c > +++ b/server/display-channel.c > @@ -1305,20 +1305,18 @@ static void draw_until(DisplayChannel *display, RedSurface *surface, Drawable *l > } while (now != last); > } > > -static Drawable* current_find_intersects_rect(Ring *current, const SpiceRect *area) > +static Drawable* current_find_intersects_rect(Ring *current, RingItem *from, > + const SpiceRect *area) > { > - Ring *ring; > - RingItem *ring_item; > + RingItem *it; > QRegion rgn; > Drawable *last = NULL; > > - ring = current; > - ring_item = ring; > region_init(&rgn); > region_add(&rgn, area); > > - while ((ring_item = ring_next(ring, ring_item))) { > - Drawable *now = SPICE_CONTAINEROF(ring_item, Drawable, surface_list_link); > + for (it = from ?: ring_next(current, current); it != NULL; it = ring_next(current, it)) { Not sure if we should care, but Solaris CC doesn't support not expanded ternary expressions. > + Drawable *now = SPICE_CONTAINEROF(it, Drawable, surface_list_link); > if (region_intersects(&rgn, &now->tree_item.base.rgn)) { > last = now; > break; > @@ -1334,7 +1332,7 @@ static Drawable* current_find_intersects_rect(Ring *current, const SpiceRect *ar > * than 'last' (exclusive). > * FIXME: merge with display_channel_draw()? > */ > -void display_channel_draw_till(DisplayChannel *display, const SpiceRect *area, int surface_id, > +void display_channel_draw_until(DisplayChannel *display, const SpiceRect *area, int surface_id, > Drawable *last) > { > RedSurface *surface; > @@ -1342,7 +1340,6 @@ void display_channel_draw_till(DisplayChannel *display, const SpiceRect *area, i > Ring *ring; > RingItem *ring_item; > Drawable *now; > - QRegion rgn; > > spice_return_if_fail(last); > spice_return_if_fail(ring_item_is_linked(&last->list_link)); > @@ -1367,33 +1364,16 @@ void display_channel_draw_till(DisplayChannel *display, const SpiceRect *area, i > } > } > > - if (!surface_last) { > + if (!surface_last) > return; > - } Here we change from: if (foo) { returnl } to: if (foo) return; > - > - ring = &surface->current_list; > - ring_item = &surface_last->surface_list_link; > > - region_init(&rgn); > - region_add(&rgn, area); > - > - // find the first older drawable that intersects with the area > - do { > - now = SPICE_CONTAINEROF(ring_item, Drawable, surface_list_link); > - if (region_intersects(&rgn, &now->tree_item.base.rgn)) { > - surface_last = now; > - break; > - } > - } while ((ring_item = ring_next(ring, ring_item))); > - > - region_destroy(&rgn); > - > - if (!surface_last) { > + last = current_find_intersects_rect(&surface->current_list, > + &surface_last->surface_list_link, area); > + if (!last) { > return; > } But here we kept it as it is ... Personally I would remove from here as well. > > - draw_until(display, surface, surface_last); > - > + draw_until(display, surface, last); > surface_update_dest(surface, area); > } > > @@ -1412,7 +1392,7 @@ void display_channel_draw(DisplayChannel *display, const SpiceRect *area, int su > > surface = &display->surfaces[surface_id]; > > - last = current_find_intersects_rect(&surface->current_list, area); > + last = current_find_intersects_rect(&surface->current_list, NULL, area); > if (last) > draw_until(display, surface, last); > > diff --git a/server/display-channel.h b/server/display-channel.h > index 33caabe..0d79463 100644 > --- a/server/display-channel.h > +++ b/server/display-channel.h > @@ -262,7 +262,7 @@ void display_channel_create_surface (DisplayCha > void display_channel_draw (DisplayChannel *display, > const SpiceRect *area, > int surface_id); > -void display_channel_draw_till (DisplayChannel *display, > +void display_channel_draw_until (DisplayChannel *display, > const SpiceRect *area, > int surface_id, > Drawable *last); > diff --git a/server/red_worker.c b/server/red_worker.c > index 678b581..6ea7cd5 100644 > --- a/server/red_worker.c > +++ b/server/red_worker.c > @@ -405,7 +405,7 @@ static void dcc_detach_stream_gracefully(DisplayChannelClient *dcc, > stream_id, stream->current != NULL); > rect_debug(&upgrade_area); > if (update_area_limit) { > - display_channel_draw_till(DCC_TO_DC(dcc), &upgrade_area, 0, update_area_limit); > + display_channel_draw_until(DCC_TO_DC(dcc), &upgrade_area, 0, update_area_limit); > } else { > display_channel_draw(DCC_TO_DC(dcc), &upgrade_area, 0); > } > @@ -1524,8 +1524,7 @@ static void red_add_lossless_drawable_dependencies(RedChannelClient *rcc, > } else { > sync_rendered = FALSE; > for (i = 0; i < num_deps; i++) { > - display_channel_draw_till(display, deps_areas[i], > - deps_surfaces_ids[i], item); > + display_channel_draw_until(display, deps_areas[i], deps_surfaces_ids[i], item); > } > } > > -- > 2.4.3 > > _______________________________________________ > Spice-devel mailing list > Spice-devel@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/spice-devel Seems okay. Acked-by: Fabiano Fidêncio <fidencio@xxxxxxxxxx> _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel