worker: move stream to display channel

Acked-by: Jonathon Jongsma <jjongsma@redhat.com>
This commit is contained in:
Marc-André Lureau 2015-11-10 13:21:28 +00:00 committed by Frediano Ziglio
parent 5a216d2eb1
commit 4987df8e67
5 changed files with 323 additions and 320 deletions

View File

@ -225,3 +225,47 @@ void dcc_push_monitors_config(DisplayChannelClient *dcc)
red_monitors_config_item_add(dcc);
red_channel_client_push(&dcc->common.base);
}
int display_channel_get_streams_timeout(DisplayChannel *display)
{
int timeout = INT_MAX;
Ring *ring = &display->streams;
RingItem *item = ring;
red_time_t now = red_get_monotonic_time();
while ((item = ring_next(ring, item))) {
Stream *stream;
stream = SPICE_CONTAINEROF(item, Stream, link);
red_time_t delta = (stream->last_time + RED_STREAM_TIMEOUT) - now;
if (delta < 1000 * 1000) {
return 0;
}
timeout = MIN(timeout, (unsigned int)(delta / (1000 * 1000)));
}
return timeout;
}
void display_channel_set_stream_video(DisplayChannel *display, int stream_video)
{
spice_return_if_fail(display);
spice_return_if_fail(stream_video != SPICE_STREAM_VIDEO_INVALID);
switch (stream_video) {
case SPICE_STREAM_VIDEO_ALL:
spice_info("sv all");
break;
case SPICE_STREAM_VIDEO_FILTER:
spice_info("sv filter");
break;
case SPICE_STREAM_VIDEO_OFF:
spice_info("sv off");
break;
default:
spice_warn_if_reached();
return;
}
display->stream_video = stream_video;
}

View File

@ -57,9 +57,6 @@
#include "stream.h"
typedef struct DisplayChannel DisplayChannel;
typedef struct DisplayChannelClient DisplayChannelClient;
typedef struct Drawable Drawable;
#define PALETTE_CACHE_HASH_SHIFT 8
#define PALETTE_CACHE_HASH_SIZE (1 << PALETTE_CACHE_HASH_SHIFT)
@ -270,6 +267,10 @@ MonitorsConfig* monitors_config_new (QXLHead *h
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)
struct DisplayChannel {
CommonChannel common; // Must be the first thing
@ -286,6 +287,15 @@ struct DisplayChannel {
RedCompressBuf *free_compress_bufs;
int stream_video;
uint32_t stream_count;
Stream streams_buf[NUM_STREAMS];
Stream *free_streams;
Ring streams;
ItemTrace items_trace[NUM_TRACE_ITEMS];
uint32_t next_item_trace;
uint64_t streams_size_total;
ImageCache image_cache;
#ifdef RED_STATISTICS
@ -304,6 +314,12 @@ struct DisplayChannel {
#endif
};
void display_channel_set_stream_video (DisplayChannel *display,
int stream_video);
void display_channel_attach_stream (DisplayChannel *display,
Drawable *drawable,
Stream *stream);
int display_channel_get_streams_timeout (DisplayChannel *display);
void display_channel_compress_stats_print (const DisplayChannel *display);
void display_channel_compress_stats_reset (DisplayChannel *display);

File diff suppressed because it is too large Load Diff

View File

@ -32,8 +32,8 @@ void stream_agent_stats_print(StreamAgent *agent)
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 "
spice_debug("stream=%p dim=(%dx%d) #in-frames=%lu #in-avg-fps=%.2f #out-frames=%lu "
"out/in=%.2f #drops=%lu (#pipe=%lu #fps=%lu) 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",

View File

@ -106,6 +106,16 @@ typedef struct StreamClipItem {
StreamClipItem *stream_clip_item_new(DisplayChannelClient* dcc,
StreamAgent *agent);
typedef struct ItemTrace {
red_time_t time;
int frames_count;
int gradual_frames_count;
int last_gradual_frame;
int width;
int height;
SpiceRect dest_area;
} ItemTrace;
struct Stream {
uint8_t refs;
Drawable *current;