1/*
2 *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3 *
4 *  Use of this source code is governed by a BSD-style license
5 *  that can be found in the LICENSE file in the root of the source
6 *  tree. An additional intellectual property rights grant can be found
7 *  in the file PATENTS.  All contributing project authors may
8 *  be found in the AUTHORS file in the root of the source tree.
9 */
10
11// The TimeScheduler class keeps track of periodic events. It is non-drifting
12// and keeps track of any missed periods so that it is possible to catch up.
13// (compare to a metronome)
14
15#ifndef WEBRTC_MODULES_AUDIO_CONFERENCE_MIXER_SOURCE_TIME_SCHEDULER_H_
16#define WEBRTC_MODULES_AUDIO_CONFERENCE_MIXER_SOURCE_TIME_SCHEDULER_H_
17
18#include "webrtc/system_wrappers/interface/tick_util.h"
19
20namespace webrtc {
21class CriticalSectionWrapper;
22class TimeScheduler
23{
24public:
25    TimeScheduler(const uint32_t periodicityInMs);
26    ~TimeScheduler();
27
28    // Signal that a periodic event has been triggered.
29    int32_t UpdateScheduler();
30
31    // Set updateTimeInMs to the amount of time until UpdateScheduler() should
32    // be called. This time will never be negative.
33    int32_t TimeToNextUpdate(int32_t& updateTimeInMS) const;
34
35private:
36    CriticalSectionWrapper* _crit;
37
38    bool _isStarted;
39    TickTime _lastPeriodMark;
40
41    uint32_t _periodicityInMs;
42    int64_t  _periodicityInTicks;
43    uint32_t _missedPeriods;
44};
45}  // namespace webrtc
46
47#endif // WEBRTC_MODULES_AUDIO_CONFERENCE_MIXER_SOURCE_TIME_SCHEDULER_H_
48