Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2361)

Unified Diff: webrtc/base/asyncinvoker.h

Issue 2877023002: Move webrtc/{base => rtc_base} (Closed)
Patch Set: update presubmit.py and DEPS include rules Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/base/arraysize.h ('k') | webrtc/base/asyncinvoker.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/base/asyncinvoker.h
diff --git a/webrtc/base/asyncinvoker.h b/webrtc/base/asyncinvoker.h
index 541486741841b82b09b936cf6aceb65d56f4872a..0fcfc04947bd9f93b48e4ec49af9c65c6624a6d8 100644
--- a/webrtc/base/asyncinvoker.h
+++ b/webrtc/base/asyncinvoker.h
@@ -11,211 +11,9 @@
#ifndef WEBRTC_BASE_ASYNCINVOKER_H_
#define WEBRTC_BASE_ASYNCINVOKER_H_
-#include <memory>
-#include <utility>
-#include "webrtc/base/asyncinvoker-inl.h"
-#include "webrtc/base/bind.h"
-#include "webrtc/base/constructormagic.h"
-#include "webrtc/base/event.h"
-#include "webrtc/base/sigslot.h"
-#include "webrtc/base/thread.h"
-
-namespace rtc {
-
-// Invokes function objects (aka functors) asynchronously on a Thread, and
-// owns the lifetime of calls (ie, when this object is destroyed, calls in
-// flight are cancelled). AsyncInvoker can optionally execute a user-specified
-// function when the asynchronous call is complete, or operates in
-// fire-and-forget mode otherwise.
-//
-// AsyncInvoker does not own the thread it calls functors on.
-//
-// A note about async calls and object lifetimes: users should
-// be mindful of object lifetimes when calling functions asynchronously and
-// ensure objects used by the function _cannot_ be deleted between the
-// invocation and execution of the functor. AsyncInvoker is designed to
-// help: any calls in flight will be cancelled when the AsyncInvoker used to
-// make the call is destructed, and any calls executing will be allowed to
-// complete before AsyncInvoker destructs.
-//
-// The easiest way to ensure lifetimes are handled correctly is to create a
-// class that owns the Thread and AsyncInvoker objects, and then call its
-// methods asynchronously as needed.
-//
-// Example:
-// class MyClass {
-// public:
-// void FireAsyncTaskWithResult(Thread* thread, int x) {
-// // Specify a callback to get the result upon completion.
-// invoker_.AsyncInvoke<int>(RTC_FROM_HERE,
-// thread, Bind(&MyClass::AsyncTaskWithResult, this, x),
-// &MyClass::OnTaskComplete, this);
-// }
-// void FireAnotherAsyncTask(Thread* thread) {
-// // No callback specified means fire-and-forget.
-// invoker_.AsyncInvoke<void>(RTC_FROM_HERE,
-// thread, Bind(&MyClass::AnotherAsyncTask, this));
-//
-// private:
-// int AsyncTaskWithResult(int x) {
-// // Some long running process...
-// return x * x;
-// }
-// void AnotherAsyncTask() {
-// // Some other long running process...
-// }
-// void OnTaskComplete(int result) { result_ = result; }
-//
-// AsyncInvoker invoker_;
-// int result_;
-// };
-class AsyncInvoker : public MessageHandler {
- public:
- AsyncInvoker();
- ~AsyncInvoker() override;
-
- // Call |functor| asynchronously on |thread|, with no callback upon
- // completion. Returns immediately.
- template <class ReturnT, class FunctorT>
- void AsyncInvoke(const Location& posted_from,
- Thread* thread,
- const FunctorT& functor,
- uint32_t id = 0) {
- std::unique_ptr<AsyncClosure> closure(
- new FireAndForgetAsyncClosure<FunctorT>(this, functor));
- DoInvoke(posted_from, thread, std::move(closure), id);
- }
-
- // Call |functor| asynchronously on |thread| with |delay_ms|, with no callback
- // upon completion. Returns immediately.
- template <class ReturnT, class FunctorT>
- void AsyncInvokeDelayed(const Location& posted_from,
- Thread* thread,
- const FunctorT& functor,
- uint32_t delay_ms,
- uint32_t id = 0) {
- std::unique_ptr<AsyncClosure> closure(
- new FireAndForgetAsyncClosure<FunctorT>(this, functor));
- DoInvokeDelayed(posted_from, thread, std::move(closure), delay_ms, id);
- }
-
- // Synchronously execute on |thread| all outstanding calls we own
- // that are pending on |thread|, and wait for calls to complete
- // before returning. Optionally filter by message id.
- // The destructor will not wait for outstanding calls, so if that
- // behavior is desired, call Flush() before destroying this object.
- void Flush(Thread* thread, uint32_t id = MQID_ANY);
-
- private:
- void OnMessage(Message* msg) override;
- void DoInvoke(const Location& posted_from,
- Thread* thread,
- std::unique_ptr<AsyncClosure> closure,
- uint32_t id);
- void DoInvokeDelayed(const Location& posted_from,
- Thread* thread,
- std::unique_ptr<AsyncClosure> closure,
- uint32_t delay_ms,
- uint32_t id);
- volatile int pending_invocations_ = 0;
- Event invocation_complete_;
- bool destroying_ = false;
- friend class AsyncClosure;
-
- RTC_DISALLOW_COPY_AND_ASSIGN(AsyncInvoker);
-};
-
-// Similar to AsyncInvoker, but guards against the Thread being destroyed while
-// there are outstanding dangling pointers to it. It will connect to the current
-// thread in the constructor, and will get notified when that thread is
-// destroyed. After GuardedAsyncInvoker is constructed, it can be used from
-// other threads to post functors to the thread it was constructed on. If that
-// thread dies, any further calls to AsyncInvoke() will be safely ignored.
-class GuardedAsyncInvoker : public sigslot::has_slots<> {
- public:
- GuardedAsyncInvoker();
- ~GuardedAsyncInvoker() override;
-
- // Synchronously execute all outstanding calls we own, and wait for calls to
- // complete before returning. Optionally filter by message id. The destructor
- // will not wait for outstanding calls, so if that behavior is desired, call
- // Flush() first. Returns false if the thread has died.
- bool Flush(uint32_t id = MQID_ANY);
-
- // Call |functor| asynchronously with no callback upon completion. Returns
- // immediately. Returns false if the thread has died.
- template <class ReturnT, class FunctorT>
- bool AsyncInvoke(const Location& posted_from,
- const FunctorT& functor,
- uint32_t id = 0) {
- rtc::CritScope cs(&crit_);
- if (thread_ == nullptr)
- return false;
- invoker_.AsyncInvoke<ReturnT, FunctorT>(posted_from, thread_, functor, id);
- return true;
- }
-
- // Call |functor| asynchronously with |delay_ms|, with no callback upon
- // completion. Returns immediately. Returns false if the thread has died.
- template <class ReturnT, class FunctorT>
- bool AsyncInvokeDelayed(const Location& posted_from,
- const FunctorT& functor,
- uint32_t delay_ms,
- uint32_t id = 0) {
- rtc::CritScope cs(&crit_);
- if (thread_ == nullptr)
- return false;
- invoker_.AsyncInvokeDelayed<ReturnT, FunctorT>(posted_from, thread_,
- functor, delay_ms, id);
- return true;
- }
-
- // Call |functor| asynchronously, calling |callback| when done. Returns false
- // if the thread has died.
- template <class ReturnT, class FunctorT, class HostT>
- bool AsyncInvoke(const Location& posted_from,
- const Location& callback_posted_from,
- const FunctorT& functor,
- void (HostT::*callback)(ReturnT),
- HostT* callback_host,
- uint32_t id = 0) {
- rtc::CritScope cs(&crit_);
- if (thread_ == nullptr)
- return false;
- invoker_.AsyncInvoke<ReturnT, FunctorT, HostT>(
- posted_from, callback_posted_from, thread_, functor, callback,
- callback_host, id);
- return true;
- }
-
- // Call |functor| asynchronously calling |callback| when done. Overloaded for
- // void return. Returns false if the thread has died.
- template <class ReturnT, class FunctorT, class HostT>
- bool AsyncInvoke(const Location& posted_from,
- const Location& callback_posted_from,
- const FunctorT& functor,
- void (HostT::*callback)(),
- HostT* callback_host,
- uint32_t id = 0) {
- rtc::CritScope cs(&crit_);
- if (thread_ == nullptr)
- return false;
- invoker_.AsyncInvoke<ReturnT, FunctorT, HostT>(
- posted_from, callback_posted_from, thread_, functor, callback,
- callback_host, id);
- return true;
- }
-
- private:
- // Callback when |thread_| is destroyed.
- void ThreadDestroyed();
-
- CriticalSection crit_;
- Thread* thread_ GUARDED_BY(crit_);
- AsyncInvoker invoker_ GUARDED_BY(crit_);
-};
-
-} // namespace rtc
+// This header is deprecated and is just left here temporarily during
+// refactoring. See https://bugs.webrtc.org/7634 for more details.
+#include "webrtc/rtc_base/asyncinvoker.h"
#endif // WEBRTC_BASE_ASYNCINVOKER_H_
« no previous file with comments | « webrtc/base/arraysize.h ('k') | webrtc/base/asyncinvoker.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698