20 #if defined(BUILD_FEATURE_DETECTORGRAPH_CONFIG_LITE) 22 const TimeoutPublisherHandle TestTimeoutPublisherService::kMetronomeId = TimeOffsetsContainer::max_size - 1;
24 const TimeOffset TestTimeoutPublisherService::kInvalidMaxOffset = std::numeric_limits<TimeOffset>::max();
31 #if defined(BUILD_FEATURE_DETECTORGRAPH_CONFIG_LITE) 32 for (
unsigned i = 0; i < TimeOffsetsContainer::max_size; i++)
34 mTimerDeadlines.push_back(TimeOffsetPairType(i, kInvalidMaxOffset));
41 #if defined(BUILD_FEATURE_DETECTORGRAPH_CONFIG_LITE) 42 mTimerDeadlines[aTimerId] = TimeOffsetPairType(aTimerId, aMillisecondsFromNow + mElapsedTime);
44 mTimerDeadlines[aTimerId] = aMillisecondsFromNow + mElapsedTime;
55 #if defined(BUILD_FEATURE_DETECTORGRAPH_CONFIG_LITE) 56 mTimerDeadlines[aTimerId] = TimeOffsetPairType(aTimerId, kInvalidMaxOffset);
58 mTimerDeadlines[aTimerId] = kInvalidMaxOffset;
64 mMetronomeTimerPeriod = aPeriodInMilliseconds;
65 SetTimeout(mMetronomeTimerPeriod, kMetronomeId);
76 mWallClockOffset = aWallClockOffset;
81 TimeOffsetsIterator minIt = GetNextTimeout();
82 if (minIt != mTimerDeadlines.end())
84 mElapsedTime = minIt->second;
86 if (minIt->first == kMetronomeId)
89 SetTimeout(mMetronomeTimerPeriod, kMetronomeId);
95 minIt->second = kInvalidMaxOffset;
106 bool firedAtLeastOne =
false;
107 TimeOffset finalDeadline = mElapsedTime + aFwdTime;
119 TimeOffsetsIterator minIt = GetNextTimeout();
121 while (minIt != mTimerDeadlines.end())
124 if (nextDeadline > finalDeadline)
129 mElapsedTime = nextDeadline;
131 if (minIt->first == kMetronomeId)
134 SetTimeout(mMetronomeTimerPeriod, kMetronomeId);
140 minIt->second = kInvalidMaxOffset;
143 firedAtLeastOne =
true;
153 if (nextDeadline == finalDeadline)
159 minIt = GetNextTimeout();
162 mElapsedTime = finalDeadline;
164 return firedAtLeastOne;
169 return mElapsedTime + mWallClockOffset;
177 TestTimeoutPublisherService::TimeOffsetsIterator TestTimeoutPublisherService::GetNextTimeout()
180 TimeOffsetsIterator minIt = mTimerDeadlines.end();
181 TimeOffsetsIterator it = mTimerDeadlines.begin();
182 while (it != mTimerDeadlines.end())
184 if (it->second < nextDeadline)
187 nextDeadline = it->second;
197 return mMetronomeTimerPeriod;
virtual void SetTimeout(const TimeOffset aMillisecondsFromNow, const TimeoutPublisherHandle aTimerId)
Should setup a timeout for the given handle.
Implements a graph of Topics & Detectors with Input/Output APIs.
virtual TimeOffset GetTime() const
Should return the time offset to Epoch.
virtual void Start(const TimeoutPublisherHandle aTimerId)
Should start a timer for the given handle.
A service that provides Timer function to DetectorGraph Detectors.
int TimeoutPublisherHandle
virtual TimeOffset GetMonotonicTime() const
Should return monotonic time since some unspecified starting point.
TimeOffset GetMetronomePeriod()
void TimeoutExpired(const TimeoutPublisherHandle aTimerHandle)
Fires/Dispatches a TopicState that was pending on a timeout.
virtual void CancelMetronome()
Should stop the metronome.
bool HasDataPending()
Returns true if there is data pending evaluation.
void MetronomeFired()
Update metronome counters and Fires/Dispatches TopicStates that was pending on scheduled period...
void SetWallClockOffset(int64_t aWallClockOffset)
virtual void StartMetronome(const TimeOffset aPeriodInMilliseconds)
Should start the metronome (periodic timer) for the given period.
TestTimeoutPublisherService(Graph &arGraph)
ErrorType EvaluateGraph()
Evaluate the whole graph.
bool ForwardTimeAndEvaluate(TimeOffset aFwdTime, Graph &aGraphToEvaluate)
virtual void Cancel(const TimeoutPublisherHandle aTimerId)
Should cancel the timer the given handle.