From 885557f117b77b4fb2e8cd92d90a90b961081af8 Mon Sep 17 00:00:00 2001 From: Marc-André Lureau Date: Tue, 10 Nov 2015 11:57:38 +0000 Subject: worker: move stream functions to a new stream.c file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Marc-André Lureau Signed-off-by: Frediano Ziglio Acked-by: Jonathon Jongsma Acked-by: Fabiano Fidêncio --- server/Makefile.am | 1 + server/red_worker.c | 52 ++------------------------------------- server/stream.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++ server/stream.h | 5 ++++ 4 files changed, 78 insertions(+), 50 deletions(-) create mode 100644 server/stream.c diff --git a/server/Makefile.am b/server/Makefile.am index 8ccf614c..52703c98 100644 --- a/server/Makefile.am +++ b/server/Makefile.am @@ -136,6 +136,7 @@ libspice_server_la_SOURCES = \ spice-bitmap-utils.h \ spice-bitmap-utils.c \ utils.h \ + stream.c \ stream.h \ $(NULL) diff --git a/server/red_worker.c b/server/red_worker.c index b7428f17..1d525515 100644 --- a/server/red_worker.c +++ b/server/red_worker.c @@ -1540,21 +1540,9 @@ static inline void red_detach_stream(RedWorker *worker, Stream *stream, int deta stream->current = NULL; } -static StreamClipItem *__new_stream_clip(DisplayChannelClient* dcc, StreamAgent *agent) -{ - StreamClipItem *item = spice_new(StreamClipItem, 1); - red_channel_pipe_item_init(RED_CHANNEL_CLIENT(dcc)->channel, - (PipeItem *)item, PIPE_ITEM_TYPE_STREAM_CLIP); - - item->stream_agent = agent; - agent->stream->refs++; - item->refs = 1; - return item; -} - static void push_stream_clip(DisplayChannelClient* dcc, StreamAgent *agent) { - StreamClipItem *item = __new_stream_clip(dcc, agent); + StreamClipItem *item = stream_clip_item_new(dcc, agent); int n_rects; if (!item) { @@ -1628,42 +1616,6 @@ static void red_attach_stream(RedWorker *worker, Drawable *drawable, Stream *str } } -static void red_print_stream_stats(DisplayChannelClient *dcc, StreamAgent *agent) -{ -#ifdef STREAM_STATS - StreamStats *stats = &agent->stats; - double passed_mm_time = (stats->end - stats->start) / 1000.0; - MJpegEncoderStats encoder_stats = {0}; - - if (agent->mjpeg_encoder) { - mjpeg_encoder_get_stats(agent->mjpeg_encoder, &encoder_stats); - } - - spice_debug("stream=%"PRIdPTR" dim=(%dx%d) #in-frames=%"PRIu64" #in-avg-fps=%.2f #out-frames=%"PRIu64" " - "out/in=%.2f #drops=%"PRIu64" (#pipe=%"PRIu64" #fps=%"PRIu64") out-avg-fps=%.2f " - "passed-mm-time(sec)=%.2f size-total(MB)=%.2f size-per-sec(Mbps)=%.2f " - "size-per-frame(KBpf)=%.2f avg-quality=%.2f " - "start-bit-rate(Mbps)=%.2f end-bit-rate(Mbps)=%.2f", - agent - dcc->stream_agents, agent->stream->width, agent->stream->height, - stats->num_input_frames, - stats->num_input_frames / passed_mm_time, - stats->num_frames_sent, - (stats->num_frames_sent + 0.0) / stats->num_input_frames, - stats->num_drops_pipe + - stats->num_drops_fps, - stats->num_drops_pipe, - stats->num_drops_fps, - stats->num_frames_sent / passed_mm_time, - passed_mm_time, - stats->size_sent / 1024.0 / 1024.0, - ((stats->size_sent * 8.0) / (1024.0 * 1024)) / passed_mm_time, - stats->size_sent / 1000.0 / stats->num_frames_sent, - encoder_stats.avg_quality, - encoder_stats.starting_bit_rate / (1024.0 * 1024), - encoder_stats.cur_bit_rate / (1024.0 * 1024)); -#endif -} - static void red_stop_stream(RedWorker *worker, Stream *stream) { DisplayChannelClient *dcc; @@ -1691,7 +1643,7 @@ static void red_stop_stream(RedWorker *worker, Stream *stream) } stream->refs++; red_channel_client_pipe_add(RED_CHANNEL_CLIENT(dcc), &stream_agent->destroy_item); - red_print_stream_stats(dcc, stream_agent); + stream_agent_stats_print(stream_agent); } worker->streams_size_total -= stream->width * stream->height; ring_remove(&stream->link); diff --git a/server/stream.c b/server/stream.c new file mode 100644 index 00000000..45459635 --- /dev/null +++ b/server/stream.c @@ -0,0 +1,70 @@ +/* + Copyright (C) 2009-2015 Red Hat, Inc. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, see . +*/ +#ifdef HAVE_CONFIG_H +#include +#endif + +#include "stream.h" +#include "display-channel.h" + +void stream_agent_stats_print(StreamAgent *agent) +{ +#ifdef STREAM_STATS + StreamStats *stats = &agent->stats; + double passed_mm_time = (stats->end - stats->start) / 1000.0; + MJpegEncoderStats encoder_stats = {0}; + + if (agent->mjpeg_encoder) { + mjpeg_encoder_get_stats(agent->mjpeg_encoder, &encoder_stats); + } + + spice_debug("stream=%p dim=(%dx%d) #in-frames=%"PRIu64" #in-avg-fps=%.2f #out-frames=%"PRIu64" " + "out/in=%.2f #drops=%"PRIu64" (#pipe=%"PRIu64" #fps=%"PRIu64") out-avg-fps=%.2f " + "passed-mm-time(sec)=%.2f size-total(MB)=%.2f size-per-sec(Mbps)=%.2f " + "size-per-frame(KBpf)=%.2f avg-quality=%.2f " + "start-bit-rate(Mbps)=%.2f end-bit-rate(Mbps)=%.2f", + agent, agent->stream->width, agent->stream->height, + stats->num_input_frames, + stats->num_input_frames / passed_mm_time, + stats->num_frames_sent, + (stats->num_frames_sent + 0.0) / stats->num_input_frames, + stats->num_drops_pipe + + stats->num_drops_fps, + stats->num_drops_pipe, + stats->num_drops_fps, + stats->num_frames_sent / passed_mm_time, + passed_mm_time, + stats->size_sent / 1024.0 / 1024.0, + ((stats->size_sent * 8.0) / (1024.0 * 1024)) / passed_mm_time, + stats->size_sent / 1000.0 / stats->num_frames_sent, + encoder_stats.avg_quality, + encoder_stats.starting_bit_rate / (1024.0 * 1024), + encoder_stats.cur_bit_rate / (1024.0 * 1024)); +#endif +} + +StreamClipItem *stream_clip_item_new(DisplayChannelClient* dcc, StreamAgent *agent) +{ + StreamClipItem *item = spice_new(StreamClipItem, 1); + red_channel_pipe_item_init(RED_CHANNEL_CLIENT(dcc)->channel, + (PipeItem *)item, PIPE_ITEM_TYPE_STREAM_CLIP); + + item->stream_agent = agent; + agent->stream->refs++; + item->refs = 1; + return item; +} diff --git a/server/stream.h b/server/stream.h index 1587d4e6..30b86244 100644 --- a/server/stream.h +++ b/server/stream.h @@ -103,6 +103,9 @@ typedef struct StreamClipItem { SpiceClipRects *rects; } StreamClipItem; +StreamClipItem *stream_clip_item_new(DisplayChannelClient* dcc, + StreamAgent *agent); + struct Stream { uint8_t refs; Drawable *current; @@ -119,4 +122,6 @@ struct Stream { uint32_t input_fps; }; +void stream_agent_stats_print(StreamAgent *agent); + #endif /* STREAM_H */ -- cgit