From 405dffb98b841ed0ee3d6a9508cf6ae7bb323fa7 Mon Sep 17 00:00:00 2001 From: nebojsa Date: Thu, 5 Nov 2009 03:05:36 +0000 Subject: [PATCH] started work on offset propagation --- .../EventScheduler/ScheduledEventInterface.h | 2 +- .../eventScheduler/src/SchedulerThread.cxx | 26 +++++++++++++------ .../products/scheduler/src/PlaylistEvent.cxx | 2 +- .../products/scheduler/src/PlaylistEvent.h | 2 +- 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/campcaster/src/modules/eventScheduler/include/LiveSupport/EventScheduler/ScheduledEventInterface.h b/campcaster/src/modules/eventScheduler/include/LiveSupport/EventScheduler/ScheduledEventInterface.h index 7595ac3ed..e94016346 100644 --- a/campcaster/src/modules/eventScheduler/include/LiveSupport/EventScheduler/ScheduledEventInterface.h +++ b/campcaster/src/modules/eventScheduler/include/LiveSupport/EventScheduler/ScheduledEventInterface.h @@ -134,7 +134,7 @@ class ScheduledEventInterface * a separate thread, and return immediately. */ virtual void - start(void) throw () = 0; + start(Ptr::Ref offset) throw () = 0; /** * The length of the event. diff --git a/campcaster/src/modules/eventScheduler/src/SchedulerThread.cxx b/campcaster/src/modules/eventScheduler/src/SchedulerThread.cxx index 22309ac5d..9b014a840 100644 --- a/campcaster/src/modules/eventScheduler/src/SchedulerThread.cxx +++ b/campcaster/src/modules/eventScheduler/src/SchedulerThread.cxx @@ -105,8 +105,9 @@ SchedulerThread :: getCurrentEvent() throw () nextEvent = eventContainer->getCurrentEvent(); if (nextEvent.get()) { - nextEventTime = TimeConversion::now(); - nextInitTime.reset(new ptime(*nextEventTime)); + //fake these events here so we can preload + nextInitTime.reset(new ptime(*TimeConversion::now() + *granularity)); + nextEventTime.reset(new ptime(*nextInitTime + *nextEvent->maxTimeToInitialize())); nextEventEnd.reset(new ptime(*nextEvent->getScheduledTime() + *nextEvent->eventLength())); debug() << "::getCurrentEvent() - nextInitTime: " @@ -144,12 +145,21 @@ SchedulerThread :: nextStep(Ptr::Ref now) throw () << std::endl; } } else if (imminent(now, nextEventTime)) { - Ptr::Ref timeLeft(new time_duration(*nextEventTime - - *now)); - TimeConversion::sleep(timeLeft); - debug() << "::nextStep() - Start [" << *TimeConversion::now() - << "]" << endl; - nextEvent->start(); + Ptr::Ref timePassed(new time_duration(*now + - *nextEvent->getScheduledTime())); + Ptr::Ref timeNull(new time_duration(0, 0, 0, 0)); + if(*timePassed > *timeNull) { + debug() << "::nextStep() with offset - Start [" << *TimeConversion::now() + << "]" << endl; + nextEvent->start(timePassed); + } else { + Ptr::Ref timeLeft(new time_duration(*nextEventTime + - *now)); + TimeConversion::sleep(timeLeft); + debug() << "::nextStep() - Start [" << *TimeConversion::now() + << "]" << endl; + nextEvent->start(timeNull); + } currentEvent = nextEvent; currentEventEnd = nextEventEnd; getNextEvent(TimeConversion::now()); diff --git a/campcaster/src/products/scheduler/src/PlaylistEvent.cxx b/campcaster/src/products/scheduler/src/PlaylistEvent.cxx index aa68009dd..73ebc1080 100644 --- a/campcaster/src/products/scheduler/src/PlaylistEvent.cxx +++ b/campcaster/src/products/scheduler/src/PlaylistEvent.cxx @@ -149,7 +149,7 @@ PlaylistEvent :: deInitialize(void) throw () * Initialize the event object. *----------------------------------------------------------------------------*/ void -PlaylistEvent :: start(void) throw () +PlaylistEvent :: start(Ptr::Ref offset) throw () { DEBUG_BLOCK diff --git a/campcaster/src/products/scheduler/src/PlaylistEvent.h b/campcaster/src/products/scheduler/src/PlaylistEvent.h index 7facfa408..859a50ea2 100644 --- a/campcaster/src/products/scheduler/src/PlaylistEvent.h +++ b/campcaster/src/products/scheduler/src/PlaylistEvent.h @@ -207,7 +207,7 @@ class PlaylistEvent : public virtual ScheduledEventInterface * a separate thread, and return immediately. */ virtual void - start(void) throw (); + start(Ptr::Ref offset) throw (); /** * The length of the event.