• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/include/tick_util.h"
19 
20 namespace webrtc {
21 class CriticalSectionWrapper;
22 class TimeScheduler
23 {
24 public:
25     TimeScheduler(const int64_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(int64_t& updateTimeInMS) const;
34 
35 private:
36     CriticalSectionWrapper* _crit;
37 
38     bool _isStarted;
39     TickTime _lastPeriodMark;
40 
41     int64_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