On Wed, Nov 25, 2015 at 5:42 PM, Fabiano Fidêncio <fidencio@xxxxxxxxxx> wrote: > 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> Suggested diff (can be squashed to the patch): http://paste.fedoraproject.org/294452/48469978 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel