Re: [PATCH 18/18] display: factor out current_find_intersects_rect

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 11/23/2015 07:02 PM, Frediano Ziglio wrote:
From: Marc-André Lureau <marcandre.lureau@xxxxxxxxx>

---
  server/display-channel.c | 51 ++++++++++++++++++++++++++++--------------------
  1 file changed, 30 insertions(+), 21 deletions(-)

diff --git a/server/display-channel.c b/server/display-channel.c
index a78f86a..ab70947 100644
--- a/server/display-channel.c
+++ b/server/display-channel.c
@@ -1299,6 +1299,30 @@ static void draw_until(DisplayChannel *display, RedSurface *surface, Drawable *l
      } while (now != last);
  }

+static Drawable* current_find_intersects_rect(Ring *current, const SpiceRect *area)

s/current/ring/

+{
+    Ring *ring;

No need another ring here.

+    RingItem *ring_item;
+    QRegion rgn;
+    Drawable *last = NULL, *now;
+
+    ring = current;
+    ring_item = ring;
+    region_init(&rgn);
+    region_add(&rgn, area);
+
+    while ((ring_item = ring_next(ring, ring_item))) {
+        now = SPICE_CONTAINEROF(ring_item, Drawable, surface_list_link);
+        if (region_intersects(&rgn, &now->tree_item.base.rgn)) {
+            last = now;
+            break;
+        }
+    }
+
+    region_destroy(&rgn);
+    return last;
+}
+
  /*
   * Renders drawables for updating the requested area, but only drawables that are older
   * than 'last' (exclusive).
@@ -1376,10 +1400,8 @@ void display_channel_draw_till(DisplayChannel *display, const SpiceRect *area, i
  void display_channel_draw(DisplayChannel *display, const SpiceRect *area, int surface_id)
  {
      RedSurface *surface;
-    Ring *ring;
-    RingItem *ring_item;
-    QRegion rgn;
-    Drawable *last, *now;
+    Drawable *last;

btw, 'last' is really 'first intersecting drawable'

+
      spice_debug("surface %d: area ==>", surface_id);
      rect_debug(area);

@@ -1390,23 +1412,10 @@ void display_channel_draw(DisplayChannel *display, const SpiceRect *area, int su

      surface = &display->surfaces[surface_id];

-    last = NULL;
-    ring = &surface->current_list;
-    ring_item = ring;
-
-    region_init(&rgn);
-    region_add(&rgn, area);
-    while ((ring_item = ring_next(ring, ring_item))) {
-        now = SPICE_CONTAINEROF(ring_item, Drawable, surface_list_link);
-        if (region_intersects(&rgn, &now->tree_item.base.rgn)) {
-            last = now;
-            break;
-        }
-    }
-    region_destroy(&rgn);
-
-    if (last)
-        draw_until(display, surface, last);
+    last = current_find_intersects_rect(&surface->current_list, area);
+    if (!last)
+        return;

Note that this changes the behavior.
Before if !last , surface_update_dest is still being called.

Regards,
    Uri.


+    draw_until(display, surface, last);
      surface_update_dest(surface, area);
  }


_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/spice-devel




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]