On Fri, Nov 14, 2014 at 01:55:27PM +0100, Marc-André Lureau wrote: > The multimedia time is defined by the server side monotonic time [1], > but the drawing time-stamp is done in guest side, so it requires > synchronization between host and guest. This is expensive, when no audio > is playing, there is a ~30x/sec wakeup to update the qxl device mmtime, > and it requires marking dirty the rom region. > > Instead, the video timestamping can be done more efficiently on server > side, without visible drawbacks. > > [1] a better timestamp could be the audio time, since audio players are > usually sync with audio time) > > Related to: > https://bugzilla.redhat.com/show_bug.cgi?id=912763 > --- > > This is a resend, as a non-RFC version this time. > > server/red_dispatcher.c | 9 --------- > server/red_worker.c | 1 + > server/reds-private.h | 2 -- > server/reds.c | 13 ------------- > server/snd_worker.c | 1 - > server/spice-qxl.h | 2 +- This file does not exist upstream > 6 files changed, 2 insertions(+), 26 deletions(-) > > diff --git a/server/red_dispatcher.c b/server/red_dispatcher.c > index a6ffe7b..d8389bc 100644 > --- a/server/red_dispatcher.c > +++ b/server/red_dispatcher.c > @@ -751,15 +751,6 @@ static void qxl_worker_loadvm_commands(QXLWorker *qxl_worker, > red_dispatcher_loadvm_commands((RedDispatcher*)qxl_worker, ext, count); > } > > -void red_dispatcher_set_mm_time(uint32_t mm_time) > -{ > - RedDispatcher *now = dispatchers; > - while (now) { > - now->qxl->st->qif->set_mm_time(now->qxl, mm_time); > - now = now->next; > - } > -} > - > static inline int calc_compression_level(void) > { > spice_assert(streaming_video != STREAM_VIDEO_INVALID); > diff --git a/server/red_worker.c b/server/red_worker.c > index 9f18495..cbb78a2 100644 > --- a/server/red_worker.c > +++ b/server/red_worker.c > @@ -4195,6 +4195,7 @@ static inline void red_process_drawable(RedWorker *worker, RedDrawable *red_draw > return; > } > > + red_drawable->mm_time = reds_get_mm_time(); > surface_id = drawable->surface_id; > > worker->surfaces[surface_id].refs++; > diff --git a/server/reds-private.h b/server/reds-private.h > index ee09e7c..0bfbf3b 100644 > --- a/server/reds-private.h > +++ b/server/reds-private.h > @@ -6,7 +6,6 @@ > #include <spice/protocol.h> > > #define MIGRATE_TIMEOUT (1000 * 10) /* 10sec */ > -#define MM_TIMER_GRANULARITY_MS (1000 / 30) > #define MM_TIME_DELTA 400 /*ms*/ > > typedef struct TicketAuthentication { > @@ -159,7 +158,6 @@ typedef struct RedsState { > int dispatcher_allows_client_mouse; > MonitorMode monitor_mode; > SpiceTimer *mig_timer; > - SpiceTimer *mm_timer; > > int vm_running; > Ring char_devs_states; /* list of SpiceCharDeviceStateItem */ > diff --git a/server/reds.c b/server/reds.c > index 505bacd..c2d71f6 100644 > --- a/server/reds.c > +++ b/server/reds.c > @@ -2799,7 +2799,6 @@ uint32_t reds_get_mm_time(void) > > void reds_enable_mm_timer(void) This could be renamed to reds_enable_mm_time in a followup patch as there is no longer a timer > { > - core->timer_start(reds->mm_timer, MM_TIMER_GRANULARITY_MS); > reds->mm_timer_enabled = TRUE; > reds->mm_time_latency = MM_TIME_DELTA; > reds_send_mm_time(); > @@ -2807,16 +2806,9 @@ void reds_enable_mm_timer(void) > > void reds_disable_mm_timer(void) Same here. ACK otherwise. Christophe
Attachment:
pgpkG2ISnyjMo.pgp
Description: PGP signature
_______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel