blob: 06054c3d22c59a8fc0b7a2e59aacf86d70d87b48 [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
Henrik Kjellanderff761fb2015-11-04 08:31:52 +010011#ifndef WEBRTC_MODULES_INCLUDE_MODULE_H_
12#define WEBRTC_MODULES_INCLUDE_MODULE_H_
13
14#pragma message("WARNING: webrtc/modules/include is DEPRECATED; use webrtc/modules/include")
niklase@google.com470e71d2011-07-07 08:21:25 +000015
pbos@webrtc.org57eb8582013-11-11 10:20:27 +000016#include "webrtc/typedefs.h"
niklase@google.com470e71d2011-07-07 08:21:25 +000017
perkj@google.comef04cf42011-09-02 09:47:28 +000018namespace webrtc {
niklase@google.com470e71d2011-07-07 08:21:25 +000019
tommi@webrtc.org3985f012015-02-27 13:36:34 +000020class ProcessThread;
21
perkj@google.comef04cf42011-09-02 09:47:28 +000022class Module {
23 public:
tommi@webrtc.org41617152015-01-29 12:12:49 +000024 // Returns the number of milliseconds until the module wants a worker
perkj@google.comef04cf42011-09-02 09:47:28 +000025 // thread to call Process.
tommi@webrtc.org41617152015-01-29 12:12:49 +000026 // This method is called on the same worker thread as Process will
27 // be called on.
tommi@webrtc.org0c3e12b2015-02-06 09:44:12 +000028 // TODO(tommi): Almost all implementations of this function, need to know
29 // the current tick count. Consider passing it as an argument. It could
30 // also improve the accuracy of when the next callback occurs since the
31 // thread that calls Process() will also have it's tick count reference
32 // which might not match with what the implementations use.
pkasting@chromium.org0b1534c2014-12-15 22:09:40 +000033 virtual int64_t TimeUntilNextProcess() = 0;
niklase@google.com470e71d2011-07-07 08:21:25 +000034
perkj@google.comef04cf42011-09-02 09:47:28 +000035 // Process any pending tasks such as timeouts.
tommi@webrtc.org41617152015-01-29 12:12:49 +000036 // Called on a worker thread.
perkj@google.comef04cf42011-09-02 09:47:28 +000037 virtual int32_t Process() = 0;
niklase@google.com470e71d2011-07-07 08:21:25 +000038
tommi@webrtc.org3985f012015-02-27 13:36:34 +000039 // This method is called when the module is attached to a *running* process
40 // thread or detached from one. In the case of detaching, |process_thread|
41 // will be nullptr.
42 //
43 // This method will be called in the following cases:
44 //
45 // * Non-null process_thread:
46 // * ProcessThread::RegisterModule() is called while the thread is running.
47 // * ProcessThread::Start() is called and RegisterModule has previously
48 // been called. The thread will be started immediately after notifying
49 // all modules.
50 //
51 // * Null process_thread:
52 // * ProcessThread::DeRegisterModule() is called while the thread is
53 // running.
54 // * ProcessThread::Stop() was called and the thread has been stopped.
55 //
56 // NOTE: This method is not called from the worker thread itself, but from
57 // the thread that registers/deregisters the module or calls Start/Stop.
58 virtual void ProcessThreadAttached(ProcessThread* process_thread) {}
59
perkj@google.comef04cf42011-09-02 09:47:28 +000060 protected:
61 virtual ~Module() {}
niklase@google.com470e71d2011-07-07 08:21:25 +000062};
63
tommi@webrtc.org41617152015-01-29 12:12:49 +000064// Reference counted version of the Module interface.
perkj@google.comef04cf42011-09-02 09:47:28 +000065class RefCountedModule : public Module {
66 public:
67 // Increase the reference count by one.
68 // Returns the incremented reference count.
Magnus Jedvert1b40a9a2015-10-12 15:50:43 +020069 virtual int32_t AddRef() const = 0;
niklase@google.com470e71d2011-07-07 08:21:25 +000070
perkj@google.comef04cf42011-09-02 09:47:28 +000071 // Decrease the reference count by one.
72 // Returns the decreased reference count.
73 // Returns 0 if the last reference was just released.
tommi@webrtc.org41617152015-01-29 12:12:49 +000074 // When the reference count reaches 0 the object will self-destruct.
Magnus Jedvert1b40a9a2015-10-12 15:50:43 +020075 virtual int32_t Release() const = 0;
perkj@google.comef04cf42011-09-02 09:47:28 +000076
77 protected:
Karl Wiberg2519c452015-04-07 16:12:57 +020078 ~RefCountedModule() override = default;
perkj@google.comef04cf42011-09-02 09:47:28 +000079};
80
81} // namespace webrtc
82
Henrik Kjellanderff761fb2015-11-04 08:31:52 +010083#endif // WEBRTC_MODULES_INCLUDE_MODULE_H_