From: Marc-André Lureau <marcandre.lureau@xxxxxxxxx> Signed-off-by: Marc-André Lureau <marcandre.lureau@xxxxxxxxx> Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx> --- server/Makefile.am | 1 + server/red_worker.c | 52 ++--------------------------------------- server/stream.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++ server/stream.h | 5 ++++ 4 files changed, 74 insertions(+), 50 deletions(-) create mode 100644 server/stream.c diff --git a/server/Makefile.am b/server/Makefile.am index 8ccf614..52703c9 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 d68a009..f855765 100644 --- a/server/red_worker.c +++ b/server/red_worker.c @@ -1530,21 +1530,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) { @@ -1618,42 +1606,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; @@ -1681,7 +1633,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 0000000..53d05f3 --- /dev/null +++ b/server/stream.c @@ -0,0 +1,66 @@ +/* + 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 <http://www.gnu.org/licenses/>. +*/ +#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 210abd7..f77fa96 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); + typedef struct ItemTrace { red_time_t time; int frames_count; @@ -129,4 +132,6 @@ struct Stream { uint32_t input_fps; }; +void stream_agent_stats_print(StreamAgent *agent); + #endif /* STREAM_H */ -- 2.4.3 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel