[Spice-devel] [PATCH spice-server] display-channel: Make private some declarations
Jonathon Jongsma
jjongsma at redhat.com
Fri Sep 1 19:05:17 UTC 2017
Shortlog: "Make some declarations private"
On Fri, 2017-09-01 at 12:34 +0100, Frediano Ziglio wrote:
> 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.
"Since lots of code to handle DisplayChannel is still in RedWorker,
display-channel.h contains a lot of declarations so that they can be
accessed from RedWorker"
> Moving declarations not needed by RedWorker and other external
"declarations that are not needed"
> class components helps reducing dependencies between RedWorker
"helps to reduce"
> 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_fre
> e(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_ */
Acked-by: Jonathon Jongsma <jjongsma at redhat.com>
More information about the Spice-devel
mailing list