[Spice-devel] [PATCH spice-server] display-channel: Make private some declarations

Frediano Ziglio fziglio at redhat.com
Fri Sep 1 11:34:53 UTC 2017


display-channel.h contains lots of information used by different
DisplayChannel components.
In the past all RedWorker, CursorChannel and DisplayChannel
code was in a single file. Lots of code to handle DisplayChannel
is still in RedWorker and display-channel.h contains for this
purpose.
Moving declarations not needed by RedWorker and other external
class components helps reducing dependencies between RedWorker
and DisplayChannel.

Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
---
 server/display-channel-private.h | 214 +++++++++++++++++++++++++++++++++++++++
 server/display-channel.h         | 214 ---------------------------------------
 2 files changed, 214 insertions(+), 214 deletions(-)

diff --git a/server/display-channel-private.h b/server/display-channel-private.h
index da807d11..fb5d6158 100644
--- a/server/display-channel-private.h
+++ b/server/display-channel-private.h
@@ -20,6 +20,48 @@
 
 #include "display-channel.h"
 
+#define TRACE_ITEMS_SHIFT 3
+#define NUM_TRACE_ITEMS (1 << TRACE_ITEMS_SHIFT)
+#define ITEMS_TRACE_MASK (NUM_TRACE_ITEMS - 1)
+
+typedef struct DrawContext {
+    SpiceCanvas *canvas;
+    int canvas_draws_on_surface;
+    int top_down;
+    uint32_t width;
+    uint32_t height;
+    int32_t stride;
+    uint32_t format;
+    void *line_0;
+} DrawContext;
+
+typedef struct RedSurface {
+    uint32_t refs;
+    /* A Ring representing a hierarchical tree structure. This tree includes
+     * DrawItems, Containers, and Shadows. It is used to efficiently determine
+     * which drawables overlap, and to exclude regions of drawables that are
+     * obscured by other drawables */
+    Ring current;
+    /* A ring of pending Drawables associated with this surface. This ring is
+     * actually used for drawing. The ring is maintained in order of age, the
+     * tail being the oldest drawable. */
+    Ring current_list;
+    DrawContext context;
+
+    Ring depend_on_me;
+    QRegion draw_dirty_region;
+
+    //fix me - better handling here
+    QXLReleaseInfoExt create, destroy;
+} RedSurface;
+
+typedef struct MonitorsConfig {
+    int refs;
+    int count;
+    int max_allowed;
+    QXLHead heads[0];
+} MonitorsConfig;
+
 #define NUM_DRAWABLES 1000
 typedef struct _Drawable _Drawable;
 struct _Drawable {
@@ -83,4 +125,176 @@ struct DisplayChannelPrivate
     ImageEncoderSharedData encoder_shared_data;
 };
 
+#define FOREACH_DCC(_channel, _data) \
+    GLIST_FOREACH((_channel ? red_channel_get_clients(RED_CHANNEL(_channel)) : NULL), \
+                  DisplayChannelClient, _data)
+
+typedef struct RedMonitorsConfigItem {
+    RedPipeItem pipe_item;
+    MonitorsConfig *monitors_config;
+} RedMonitorsConfigItem;
+
+enum {
+    RED_PIPE_ITEM_TYPE_DRAW = RED_PIPE_ITEM_TYPE_COMMON_LAST,
+    RED_PIPE_ITEM_TYPE_IMAGE,
+    RED_PIPE_ITEM_TYPE_STREAM_CREATE,
+    RED_PIPE_ITEM_TYPE_STREAM_CLIP,
+    RED_PIPE_ITEM_TYPE_STREAM_DESTROY,
+    RED_PIPE_ITEM_TYPE_UPGRADE,
+    RED_PIPE_ITEM_TYPE_MIGRATE_DATA,
+    RED_PIPE_ITEM_TYPE_PIXMAP_SYNC,
+    RED_PIPE_ITEM_TYPE_PIXMAP_RESET,
+    RED_PIPE_ITEM_TYPE_INVAL_PALETTE_CACHE,
+    RED_PIPE_ITEM_TYPE_CREATE_SURFACE,
+    RED_PIPE_ITEM_TYPE_DESTROY_SURFACE,
+    RED_PIPE_ITEM_TYPE_MONITORS_CONFIG,
+    RED_PIPE_ITEM_TYPE_STREAM_ACTIVATE_REPORT,
+    RED_PIPE_ITEM_TYPE_GL_SCANOUT,
+    RED_PIPE_ITEM_TYPE_GL_DRAW,
+};
+
+void drawable_unref(Drawable *drawable);
+
+MonitorsConfig *monitors_config_ref(MonitorsConfig *config);
+void monitors_config_unref(MonitorsConfig *config);
+
+void display_channel_draw_until(DisplayChannel *display,
+                                const SpiceRect *area,
+                                int surface_id,
+                                Drawable *last);
+GArray* display_channel_get_video_codecs(DisplayChannel *display);
+int display_channel_get_stream_video(DisplayChannel *display);
+void display_channel_current_flush(DisplayChannel *display,
+                                   int surface_id);
+uint32_t display_channel_generate_uid(DisplayChannel *display);
+
+int display_channel_get_stream_id(DisplayChannel *display, Stream *stream);
+Stream *display_channel_get_nth_stream(DisplayChannel *display, gint i);
+
+typedef struct RedSurfaceDestroyItem {
+    RedPipeItem pipe_item;
+    SpiceMsgSurfaceDestroy surface_destroy;
+} RedSurfaceDestroyItem;
+
+typedef struct RedUpgradeItem {
+    RedPipeItem base;
+    Drawable *drawable;
+    SpiceClipRects *rects;
+} RedUpgradeItem;
+
+static inline int is_equal_path(SpicePath *path1, SpicePath *path2)
+{
+    SpicePathSeg *seg1, *seg2;
+    int i, j;
+
+    if (path1->num_segments != path2->num_segments)
+        return FALSE;
+
+    for (i = 0; i < path1->num_segments; i++) {
+        seg1 = path1->segments[i];
+        seg2 = path2->segments[i];
+
+        if (seg1->flags != seg2->flags ||
+            seg1->count != seg2->count) {
+            return FALSE;
+        }
+        for (j = 0; j < seg1->count; j++) {
+            if (seg1->points[j].x != seg2->points[j].x ||
+                seg1->points[j].y != seg2->points[j].y) {
+                return FALSE;
+            }
+        }
+    }
+
+    return TRUE;
+}
+
+// partial imp
+static inline int is_equal_brush(SpiceBrush *b1, SpiceBrush *b2)
+{
+    return b1->type == b2->type &&
+           b1->type == SPICE_BRUSH_TYPE_SOLID &&
+           b1->u.color == b2->u.color;
+}
+
+// partial imp
+static inline int is_equal_line_attr(SpiceLineAttr *a1, SpiceLineAttr *a2)
+{
+    return a1->flags == a2->flags &&
+           a1->style_nseg == a2->style_nseg &&
+           a1->style_nseg == 0;
+}
+
+// partial imp
+static inline int is_same_geometry(Drawable *d1, Drawable *d2)
+{
+    if (d1->red_drawable->type != d2->red_drawable->type) {
+        return FALSE;
+    }
+
+    switch (d1->red_drawable->type) {
+    case QXL_DRAW_STROKE:
+        return is_equal_line_attr(&d1->red_drawable->u.stroke.attr,
+                                  &d2->red_drawable->u.stroke.attr) &&
+               is_equal_path(d1->red_drawable->u.stroke.path,
+                             d2->red_drawable->u.stroke.path);
+    case QXL_DRAW_FILL:
+        return rect_is_equal(&d1->red_drawable->bbox, &d2->red_drawable->bbox);
+    default:
+        return FALSE;
+    }
+}
+
+static inline int is_same_drawable(Drawable *d1, Drawable *d2)
+{
+    if (!is_same_geometry(d1, d2)) {
+        return FALSE;
+    }
+
+    switch (d1->red_drawable->type) {
+    case QXL_DRAW_STROKE:
+        return is_equal_brush(&d1->red_drawable->u.stroke.brush,
+                              &d2->red_drawable->u.stroke.brush);
+    case QXL_DRAW_FILL:
+        return is_equal_brush(&d1->red_drawable->u.fill.brush,
+                              &d2->red_drawable->u.fill.brush);
+    default:
+        return FALSE;
+    }
+}
+
+static inline int is_drawable_independent_from_surfaces(Drawable *drawable)
+{
+    int x;
+
+    for (x = 0; x < 3; ++x) {
+        if (drawable->surface_deps[x] != -1) {
+            return FALSE;
+        }
+    }
+    return TRUE;
+}
+
+static inline int has_shadow(RedDrawable *drawable)
+{
+    return drawable->type == QXL_COPY_BITS;
+}
+
+static inline int is_primary_surface(DisplayChannel *display, uint32_t surface_id)
+{
+    if (surface_id == 0) {
+        return TRUE;
+    }
+    return FALSE;
+}
+
+static inline void region_add_clip_rects(QRegion *rgn, SpiceClipRects *data)
+{
+    int i;
+
+    for (i = 0; i < data->num_rects; i++) {
+        region_add(rgn, data->rects + i);
+    }
+}
+
 #endif /* DISPLAY_CHANNEL_PRIVATE_H_ */
diff --git a/server/display-channel.h b/server/display-channel.h
index 75b1efea..d3fc41dd 100644
--- a/server/display-channel.h
+++ b/server/display-channel.h
@@ -108,96 +108,6 @@ struct Drawable {
     DisplayChannel *display;
 };
 
-void drawable_unref (Drawable *drawable);
-
-enum {
-    RED_PIPE_ITEM_TYPE_DRAW = RED_PIPE_ITEM_TYPE_COMMON_LAST,
-    RED_PIPE_ITEM_TYPE_IMAGE,
-    RED_PIPE_ITEM_TYPE_STREAM_CREATE,
-    RED_PIPE_ITEM_TYPE_STREAM_CLIP,
-    RED_PIPE_ITEM_TYPE_STREAM_DESTROY,
-    RED_PIPE_ITEM_TYPE_UPGRADE,
-    RED_PIPE_ITEM_TYPE_MIGRATE_DATA,
-    RED_PIPE_ITEM_TYPE_PIXMAP_SYNC,
-    RED_PIPE_ITEM_TYPE_PIXMAP_RESET,
-    RED_PIPE_ITEM_TYPE_INVAL_PALETTE_CACHE,
-    RED_PIPE_ITEM_TYPE_CREATE_SURFACE,
-    RED_PIPE_ITEM_TYPE_DESTROY_SURFACE,
-    RED_PIPE_ITEM_TYPE_MONITORS_CONFIG,
-    RED_PIPE_ITEM_TYPE_STREAM_ACTIVATE_REPORT,
-    RED_PIPE_ITEM_TYPE_GL_SCANOUT,
-    RED_PIPE_ITEM_TYPE_GL_DRAW,
-};
-
-typedef struct MonitorsConfig {
-    int refs;
-    int count;
-    int max_allowed;
-    QXLHead heads[0];
-} MonitorsConfig;
-
-typedef struct RedMonitorsConfigItem {
-    RedPipeItem pipe_item;
-    MonitorsConfig *monitors_config;
-} RedMonitorsConfigItem;
-
-MonitorsConfig *           monitors_config_ref                       (MonitorsConfig *config);
-void                       monitors_config_unref                     (MonitorsConfig *config);
-
-#define TRACE_ITEMS_SHIFT 3
-#define NUM_TRACE_ITEMS (1 << TRACE_ITEMS_SHIFT)
-#define ITEMS_TRACE_MASK (NUM_TRACE_ITEMS - 1)
-
-typedef struct DrawContext {
-    SpiceCanvas *canvas;
-    int canvas_draws_on_surface;
-    int top_down;
-    uint32_t width;
-    uint32_t height;
-    int32_t stride;
-    uint32_t format;
-    void *line_0;
-} DrawContext;
-
-typedef struct RedSurface {
-    uint32_t refs;
-    /* A Ring representing a hierarchical tree structure. This tree includes
-     * DrawItems, Containers, and Shadows. It is used to efficiently determine
-     * which drawables overlap, and to exclude regions of drawables that are
-     * obscured by other drawables */
-    Ring current;
-    /* A ring of pending Drawables associated with this surface. This ring is
-     * actually used for drawing. The ring is maintained in order of age, the
-     * tail being the oldest drawable. */
-    Ring current_list;
-    DrawContext context;
-
-    Ring depend_on_me;
-    QRegion draw_dirty_region;
-
-    //fix me - better handling here
-    QXLReleaseInfoExt create, destroy;
-} RedSurface;
-
-#define FOREACH_DCC(_channel, _data) \
-    GLIST_FOREACH((_channel ? red_channel_get_clients(RED_CHANNEL(_channel)) : NULL), \
-                  DisplayChannelClient, _data)
-
-int display_channel_get_stream_id(DisplayChannel *display, Stream *stream);
-Stream *display_channel_get_nth_stream(DisplayChannel *display, gint i);
-
-typedef struct RedSurfaceDestroyItem {
-    RedPipeItem pipe_item;
-    SpiceMsgSurfaceDestroy surface_destroy;
-} RedSurfaceDestroyItem;
-
-typedef struct RedUpgradeItem {
-    RedPipeItem base;
-    Drawable *drawable;
-    SpiceClipRects *rects;
-} RedUpgradeItem;
-
-
 DisplayChannel*            display_channel_new                       (RedsState *reds,
                                                                       QXLInstance *qxl,
                                                                       const SpiceCoreInterfaceInternal *core,
@@ -212,10 +122,6 @@ void                       display_channel_create_surface            (DisplayCha
 void                       display_channel_draw                      (DisplayChannel *display,
                                                                       const SpiceRect *area,
                                                                       int surface_id);
-void                       display_channel_draw_until                (DisplayChannel *display,
-                                                                      const SpiceRect *area,
-                                                                      int surface_id,
-                                                                      Drawable *last);
 void                       display_channel_update                    (DisplayChannel *display,
                                                                       uint32_t surface_id,
                                                                       const QXLRect *area,
@@ -227,15 +133,11 @@ void                       display_channel_set_stream_video          (DisplayCha
                                                                       int stream_video);
 void                       display_channel_set_video_codecs          (DisplayChannel *display,
                                                                       GArray *video_codecs);
-GArray*                    display_channel_get_video_codecs          (DisplayChannel *display);
-int                        display_channel_get_stream_video          (DisplayChannel *display);
 int                        display_channel_get_streams_timeout       (DisplayChannel *display);
 void                       display_channel_compress_stats_print      (DisplayChannel *display);
 void                       display_channel_compress_stats_reset      (DisplayChannel *display);
 void                       display_channel_surface_unref             (DisplayChannel *display,
                                                                       uint32_t surface_id);
-void                       display_channel_current_flush             (DisplayChannel *display,
-                                                                      int surface_id);
 bool                       display_channel_wait_for_migrate_data     (DisplayChannel *display);
 void                       display_channel_flush_all_surfaces        (DisplayChannel *display);
 void                       display_channel_free_glz_drawables_to_free(DisplayChannel *display);
@@ -243,7 +145,6 @@ void                       display_channel_free_glz_drawables        (DisplayCha
 void                       display_channel_destroy_surface_wait      (DisplayChannel *display,
                                                                       uint32_t surface_id);
 void                       display_channel_destroy_surfaces          (DisplayChannel *display);
-uint32_t                   display_channel_generate_uid              (DisplayChannel *display);
 void                       display_channel_process_draw              (DisplayChannel *display,
                                                                       RedDrawable *red_drawable,
                                                                       uint32_t process_commands_generation);
@@ -268,121 +169,6 @@ void display_channel_reset_image_cache(DisplayChannel *self);
 
 void display_channel_debug_oom(DisplayChannel *display, const char *msg);
 
-static inline int is_equal_path(SpicePath *path1, SpicePath *path2)
-{
-    SpicePathSeg *seg1, *seg2;
-    int i, j;
-
-    if (path1->num_segments != path2->num_segments)
-        return FALSE;
-
-    for (i = 0; i < path1->num_segments; i++) {
-        seg1 = path1->segments[i];
-        seg2 = path2->segments[i];
-
-        if (seg1->flags != seg2->flags ||
-            seg1->count != seg2->count) {
-            return FALSE;
-        }
-        for (j = 0; j < seg1->count; j++) {
-            if (seg1->points[j].x != seg2->points[j].x ||
-                seg1->points[j].y != seg2->points[j].y) {
-                return FALSE;
-            }
-        }
-    }
-
-    return TRUE;
-}
-
-// partial imp
-static inline int is_equal_brush(SpiceBrush *b1, SpiceBrush *b2)
-{
-    return b1->type == b2->type &&
-           b1->type == SPICE_BRUSH_TYPE_SOLID &&
-           b1->u.color == b2->u.color;
-}
-
-// partial imp
-static inline int is_equal_line_attr(SpiceLineAttr *a1, SpiceLineAttr *a2)
-{
-    return a1->flags == a2->flags &&
-           a1->style_nseg == a2->style_nseg &&
-           a1->style_nseg == 0;
-}
-
-// partial imp
-static inline int is_same_geometry(Drawable *d1, Drawable *d2)
-{
-    if (d1->red_drawable->type != d2->red_drawable->type) {
-        return FALSE;
-    }
-
-    switch (d1->red_drawable->type) {
-    case QXL_DRAW_STROKE:
-        return is_equal_line_attr(&d1->red_drawable->u.stroke.attr,
-                                  &d2->red_drawable->u.stroke.attr) &&
-               is_equal_path(d1->red_drawable->u.stroke.path,
-                             d2->red_drawable->u.stroke.path);
-    case QXL_DRAW_FILL:
-        return rect_is_equal(&d1->red_drawable->bbox, &d2->red_drawable->bbox);
-    default:
-        return FALSE;
-    }
-}
-
-static inline int is_same_drawable(Drawable *d1, Drawable *d2)
-{
-    if (!is_same_geometry(d1, d2)) {
-        return FALSE;
-    }
-
-    switch (d1->red_drawable->type) {
-    case QXL_DRAW_STROKE:
-        return is_equal_brush(&d1->red_drawable->u.stroke.brush,
-                              &d2->red_drawable->u.stroke.brush);
-    case QXL_DRAW_FILL:
-        return is_equal_brush(&d1->red_drawable->u.fill.brush,
-                              &d2->red_drawable->u.fill.brush);
-    default:
-        return FALSE;
-    }
-}
-
-static inline int is_drawable_independent_from_surfaces(Drawable *drawable)
-{
-    int x;
-
-    for (x = 0; x < 3; ++x) {
-        if (drawable->surface_deps[x] != -1) {
-            return FALSE;
-        }
-    }
-    return TRUE;
-}
-
-static inline int has_shadow(RedDrawable *drawable)
-{
-    return drawable->type == QXL_COPY_BITS;
-}
-
-static inline int is_primary_surface(DisplayChannel *display, uint32_t surface_id)
-{
-    if (surface_id == 0) {
-        return TRUE;
-    }
-    return FALSE;
-}
-
-static inline void region_add_clip_rects(QRegion *rgn, SpiceClipRects *data)
-{
-    int i;
-
-    for (i = 0; i < data->num_rects; i++) {
-        region_add(rgn, data->rects + i);
-    }
-}
-
 G_END_DECLS
 
 #endif /* DISPLAY_CHANNEL_H_ */
-- 
2.13.5



More information about the Spice-devel mailing list