[Spice-devel] [PATCH 04/18] worker: move attach_stream

Frediano Ziglio fziglio at redhat.com
Tue Nov 24 01:12:51 PST 2015


> 
> On Mon, Nov 23, 2015 at 6:01 PM, Frediano Ziglio <fziglio at redhat.com> wrote:
> > From: Marc-André Lureau <marcandre.lureau at gmail.com>
> >
> > ---
> >  server/red_worker.c | 56
> >  -----------------------------------------------------
> >  server/stream.c     | 56
> >  +++++++++++++++++++++++++++++++++++++++++++++++++++++
> >  server/stream.h     |  1 -
> >  3 files changed, 56 insertions(+), 57 deletions(-)
> >
> > diff --git a/server/red_worker.c b/server/red_worker.c
> > index 443e00a..f64befa 100644
> > --- a/server/red_worker.c
> > +++ b/server/red_worker.c
> > @@ -159,50 +159,6 @@ static void red_create_surface(DisplayChannel
> > *display, uint32_t surface_id, uin
> >                                 uint32_t height, int32_t stride, uint32_t
> >                                 format,
> >                                 void *line_0, int data_is_valid, int
> >                                 send_client);
> >
> > -void attach_stream(DisplayChannel *display, Drawable *drawable, Stream
> > *stream)
> > -{
> > -    DisplayChannelClient *dcc;
> > -    RingItem *item, *next;
> > -
> > -    spice_assert(!drawable->stream && !stream->current);
> > -    spice_assert(drawable && stream);
> > -    stream->current = drawable;
> > -    drawable->stream = stream;
> > -    stream->last_time = drawable->creation_time;
> > -
> > -    uint64_t duration = drawable->creation_time -
> > stream->input_fps_start_time;
> > -    if (duration >= RED_STREAM_INPUT_FPS_TIMEOUT) {
> > -        /* Round to the nearest integer, for instance 24 for 23.976 */
> > -        stream->input_fps = ((uint64_t)stream->num_input_frames * 1000 *
> > 1000 * 1000 + duration / 2) / duration;
> > -        spice_debug("input-fps=%u", stream->input_fps);
> > -        stream->num_input_frames = 0;
> > -        stream->input_fps_start_time = drawable->creation_time;
> > -    } else {
> > -        stream->num_input_frames++;
> > -    }
> > -
> > -    FOREACH_DCC(display, item, next, dcc) {
> > -        StreamAgent *agent;
> > -        QRegion clip_in_draw_dest;
> > -
> > -        agent = &dcc->stream_agents[get_stream_id(display, stream)];
> > -        region_or(&agent->vis_region, &drawable->tree_item.base.rgn);
> > -
> > -        region_init(&clip_in_draw_dest);
> > -        region_add(&clip_in_draw_dest, &drawable->red_drawable->bbox);
> > -        region_and(&clip_in_draw_dest, &agent->clip);
> > -
> > -        if (!region_is_equal(&clip_in_draw_dest,
> > &drawable->tree_item.base.rgn)) {
> > -            region_remove(&agent->clip, &drawable->red_drawable->bbox);
> > -            region_or(&agent->clip, &drawable->tree_item.base.rgn);
> > -            dcc_stream_agent_clip(dcc, agent);
> > -        }
> > -#ifdef STREAM_STATS
> > -        agent->stats.num_input_frames++;
> > -#endif
> > -    }
> > -}
> > -
> >  QXLInstance* red_worker_get_qxl(RedWorker *worker)
> >  {
> >      spice_return_val_if_fail(worker != NULL, NULL);
> > @@ -624,18 +580,6 @@ static void
> > red_clear_surface_drawables_from_pipes(DisplayChannel *display,
> >      }
> >  }
> >
> > -void detach_stream(DisplayChannel *display, Stream *stream,
> > -                   int detach_sized)
> > -{
> > -    spice_assert(stream->current && stream->current->stream);
> > -    spice_assert(stream->current->stream == stream);
> > -    stream->current->stream = NULL;
> > -    if (detach_sized) {
> > -        stream->current->sized_stream = NULL;
> > -    }
> > -    stream->current = NULL;
> > -}
> > -
> >  static int red_display_drawable_is_in_pipe(DisplayChannelClient *dcc,
> >  Drawable *drawable)
> >  {
> >      DrawablePipeItem *dpi;
> > diff --git a/server/stream.c b/server/stream.c
> > index 518e2d8..8d16658 100644
> > --- a/server/stream.c
> > +++ b/server/stream.c
> > @@ -258,6 +258,62 @@ static int is_next_stream_frame(DisplayChannel
> > *display,
> >      }
> >  }
> >
> > +static void attach_stream(DisplayChannel *display, Drawable *drawable,
> > Stream *stream)
> > +{
> > +    DisplayChannelClient *dcc;
> > +    RingItem *item, *next;
> > +
> > +    spice_assert(!drawable->stream && !stream->current);
> > +    spice_assert(drawable && stream);
> > +    stream->current = drawable;
> > +    drawable->stream = stream;
> > +    stream->last_time = drawable->creation_time;
> > +
> > +    uint64_t duration = drawable->creation_time -
> > stream->input_fps_start_time;
> > +    if (duration >= RED_STREAM_INPUT_FPS_TIMEOUT) {
> > +        /* Round to the nearest integer, for instance 24 for 23.976 */
> > +        stream->input_fps = ((uint64_t)stream->num_input_frames * 1000 *
> > 1000 * 1000 + duration / 2) / duration;
> > +        spice_debug("input-fps=%u", stream->input_fps);
> > +        stream->num_input_frames = 0;
> > +        stream->input_fps_start_time = drawable->creation_time;
> > +    } else {
> > +        stream->num_input_frames++;
> > +    }
> > +
> > +    FOREACH_DCC(display, item, next, dcc) {
> > +        StreamAgent *agent;
> > +        QRegion clip_in_draw_dest;
> > +
> > +        agent = &dcc->stream_agents[get_stream_id(display, stream)];
> > +        region_or(&agent->vis_region, &drawable->tree_item.base.rgn);
> > +
> > +        region_init(&clip_in_draw_dest);
> > +        region_add(&clip_in_draw_dest, &drawable->red_drawable->bbox);
> > +        region_and(&clip_in_draw_dest, &agent->clip);
> > +
> > +        if (!region_is_equal(&clip_in_draw_dest,
> > &drawable->tree_item.base.rgn)) {
> > +            region_remove(&agent->clip, &drawable->red_drawable->bbox);
> > +            region_or(&agent->clip, &drawable->tree_item.base.rgn);
> > +            dcc_stream_agent_clip(dcc, agent);
> > +        }
> > +#ifdef STREAM_STATS
> > +        agent->stats.num_input_frames++;
> > +#endif
> > +    }
> > +}
> > +
> > +void detach_stream(DisplayChannel *display, Stream *stream,
> > +                   int detach_sized)
> > +{
> > +    spice_assert(stream->current && stream->current->stream);
> > +    spice_assert(stream->current->stream == stream);
> > +    stream->current->stream = NULL;
> > +    if (detach_sized) {
> > +        stream->current->sized_stream = NULL;
> > +    }
> > +    stream->current = NULL;
> > +}
> > +
> >  static void before_reattach_stream(DisplayChannel *display,
> >                                     Stream *stream, Drawable *new_frame)
> >  {
> > diff --git a/server/stream.h b/server/stream.h
> > index 65de2f4..7c589e4 100644
> > --- a/server/stream.h
> > +++ b/server/stream.h
> > @@ -154,7 +154,6 @@ void                  stream_agent_unref
> > (DisplayChan
> >  void                  stream_agent_stats_print
> >  (StreamAgent *agent);
> >  void                  stream_agent_stop
> >  (StreamAgent *agent);
> >
> > -void attach_stream(DisplayChannel *display, Drawable *drawable, Stream
> > *stream);
> >  void detach_stream(DisplayChannel *display, Stream *stream, int
> >  detach_sized);
> >
> >  #endif /* STREAM_H */
> > --
> > 2.4.3
> >
> > _______________________________________________
> > Spice-devel mailing list
> > Spice-devel at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/spice-devel
> 
> Acked-by: Fabiano FidĂȘncio <fidencio at redhat.com>
> 

Merged

Frediano


More information about the Spice-devel mailing list