aboutsummaryrefslogtreecommitdiff
path: root/webrtc/modules/include/module.h
diff options
context:
space:
mode:
Diffstat (limited to 'webrtc/modules/include/module.h')
-rw-r--r--webrtc/modules/include/module.h81
1 files changed, 81 insertions, 0 deletions
diff --git a/webrtc/modules/include/module.h b/webrtc/modules/include/module.h
new file mode 100644
index 0000000000..d02aa95dc8
--- /dev/null
+++ b/webrtc/modules/include/module.h
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#ifndef WEBRTC_MODULES_INCLUDE_MODULE_H_
+#define WEBRTC_MODULES_INCLUDE_MODULE_H_
+
+#include "webrtc/typedefs.h"
+
+namespace webrtc {
+
+class ProcessThread;
+
+class Module {
+ public:
+ // Returns the number of milliseconds until the module wants a worker
+ // thread to call Process.
+ // This method is called on the same worker thread as Process will
+ // be called on.
+ // TODO(tommi): Almost all implementations of this function, need to know
+ // the current tick count. Consider passing it as an argument. It could
+ // also improve the accuracy of when the next callback occurs since the
+ // thread that calls Process() will also have it's tick count reference
+ // which might not match with what the implementations use.
+ virtual int64_t TimeUntilNextProcess() = 0;
+
+ // Process any pending tasks such as timeouts.
+ // Called on a worker thread.
+ virtual int32_t Process() = 0;
+
+ // This method is called when the module is attached to a *running* process
+ // thread or detached from one. In the case of detaching, |process_thread|
+ // will be nullptr.
+ //
+ // This method will be called in the following cases:
+ //
+ // * Non-null process_thread:
+ // * ProcessThread::RegisterModule() is called while the thread is running.
+ // * ProcessThread::Start() is called and RegisterModule has previously
+ // been called. The thread will be started immediately after notifying
+ // all modules.
+ //
+ // * Null process_thread:
+ // * ProcessThread::DeRegisterModule() is called while the thread is
+ // running.
+ // * ProcessThread::Stop() was called and the thread has been stopped.
+ //
+ // NOTE: This method is not called from the worker thread itself, but from
+ // the thread that registers/deregisters the module or calls Start/Stop.
+ virtual void ProcessThreadAttached(ProcessThread* process_thread) {}
+
+ protected:
+ virtual ~Module() {}
+};
+
+// Reference counted version of the Module interface.
+class RefCountedModule : public Module {
+ public:
+ // Increase the reference count by one.
+ // Returns the incremented reference count.
+ virtual int32_t AddRef() const = 0;
+
+ // Decrease the reference count by one.
+ // Returns the decreased reference count.
+ // Returns 0 if the last reference was just released.
+ // When the reference count reaches 0 the object will self-destruct.
+ virtual int32_t Release() const = 0;
+
+ protected:
+ ~RefCountedModule() override = default;
+};
+
+} // namespace webrtc
+
+#endif // WEBRTC_MODULES_INCLUDE_MODULE_H_