blob: dfa1ad4e7c5480906454c17090c4358c4debd059 [file] [log] [blame]
perkj@google.comef04cf42011-09-02 09:47:28 +00001/*
pwestin@webrtc.orgf6bb77a2012-01-24 17:16:59 +00002 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
perkj@google.comef04cf42011-09-02 09:47:28 +00003 *
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#ifndef MODULES_INTERFACE_MODULE_H_
12#define MODULES_INTERFACE_MODULE_H_
niklase@google.com470e71d2011-07-07 08:21:25 +000013
pbos@webrtc.org57eb8582013-11-11 10:20:27 +000014#include "webrtc/typedefs.h"
niklase@google.com470e71d2011-07-07 08:21:25 +000015
perkj@google.comef04cf42011-09-02 09:47:28 +000016namespace webrtc {
niklase@google.com470e71d2011-07-07 08:21:25 +000017
perkj@google.comef04cf42011-09-02 09:47:28 +000018class Module {
19 public:
tommi@webrtc.org41617152015-01-29 12:12:49 +000020 // Returns the number of milliseconds until the module wants a worker
perkj@google.comef04cf42011-09-02 09:47:28 +000021 // thread to call Process.
tommi@webrtc.org41617152015-01-29 12:12:49 +000022 // This method is called on the same worker thread as Process will
23 // be called on.
tommi@webrtc.org0c3e12b2015-02-06 09:44:12 +000024 // TODO(tommi): Almost all implementations of this function, need to know
25 // the current tick count. Consider passing it as an argument. It could
26 // also improve the accuracy of when the next callback occurs since the
27 // thread that calls Process() will also have it's tick count reference
28 // which might not match with what the implementations use.
pkasting@chromium.org0b1534c2014-12-15 22:09:40 +000029 virtual int64_t TimeUntilNextProcess() = 0;
niklase@google.com470e71d2011-07-07 08:21:25 +000030
perkj@google.comef04cf42011-09-02 09:47:28 +000031 // Process any pending tasks such as timeouts.
tommi@webrtc.org41617152015-01-29 12:12:49 +000032 // Called on a worker thread.
perkj@google.comef04cf42011-09-02 09:47:28 +000033 virtual int32_t Process() = 0;
niklase@google.com470e71d2011-07-07 08:21:25 +000034
perkj@google.comef04cf42011-09-02 09:47:28 +000035 protected:
36 virtual ~Module() {}
niklase@google.com470e71d2011-07-07 08:21:25 +000037};
38
tommi@webrtc.org41617152015-01-29 12:12:49 +000039// Reference counted version of the Module interface.
perkj@google.comef04cf42011-09-02 09:47:28 +000040class RefCountedModule : public Module {
41 public:
42 // Increase the reference count by one.
43 // Returns the incremented reference count.
tommi@webrtc.org41617152015-01-29 12:12:49 +000044 virtual int32_t AddRef() = 0;
niklase@google.com470e71d2011-07-07 08:21:25 +000045
perkj@google.comef04cf42011-09-02 09:47:28 +000046 // Decrease the reference count by one.
47 // Returns the decreased reference count.
48 // Returns 0 if the last reference was just released.
tommi@webrtc.org41617152015-01-29 12:12:49 +000049 // When the reference count reaches 0 the object will self-destruct.
50 virtual int32_t Release() = 0;
perkj@google.comef04cf42011-09-02 09:47:28 +000051
52 protected:
53 virtual ~RefCountedModule() {}
54};
55
56} // namespace webrtc
57
58#endif // MODULES_INTERFACE_MODULE_H_