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

Unified Diff: webrtc/api/proxy.h

Issue 2632613002: Adding OrtcFactory, and changing UdpTransport to match current plan. (Closed)
Patch Set: Created 3 years, 11 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/api/ortcfactory_unittest.cc ('k') | webrtc/api/udptransportinterface.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/api/proxy.h
diff --git a/webrtc/api/proxy.h b/webrtc/api/proxy.h
index 746a758ba4315181cfb04688487fa1d70179eb0c..896e6ddba37027951f7873d556fbbf907893bc85 100644
--- a/webrtc/api/proxy.h
+++ b/webrtc/api/proxy.h
@@ -318,7 +318,7 @@ class MethodCall5 : public rtc::Message,
: signaling_thread_(signaling_thread), c_(c) {} \
~c##ProxyWithInternal() { \
MethodCall0<c##ProxyWithInternal, void> call( \
- this, &c##ProxyWithInternal::Release_s); \
+ this, &c##ProxyWithInternal::ReleaseOnCorrectThread); \
call.Marshal(RTC_FROM_HERE, signaling_thread_); \
} \
\
@@ -348,7 +348,7 @@ class MethodCall5 : public rtc::Message,
c_(c) {} \
~c##ProxyWithInternal() { \
MethodCall0<c##ProxyWithInternal, void> call( \
- this, &c##ProxyWithInternal::Release_s); \
+ this, &c##ProxyWithInternal::ReleaseOnCorrectThread); \
call.Marshal(RTC_FROM_HERE, signaling_thread_); \
} \
\
@@ -363,6 +363,71 @@ class MethodCall5 : public rtc::Message,
const INTERNAL_CLASS* internal() const { return c_.get(); } \
INTERNAL_CLASS* internal() { return c_.get(); }
+#define BEGIN_NON_REFCOUNTED_PROXY_MAP(c) \
Taylor Brandstetter 2017/01/13 07:52:29 Before you say "wow these macros are getting out o
+ template <class INTERNAL_CLASS> \
+ class c##ProxyWithInternal; \
+ typedef c##ProxyWithInternal<c##Interface> c##Proxy; \
+ template <class INTERNAL_CLASS> \
+ class c##ProxyWithInternal : public c##Interface { \
+ protected: \
+ typedef c##Interface C; \
+ c##ProxyWithInternal(rtc::Thread* signaling_thread, \
+ rtc::Thread* worker_thread, \
+ INTERNAL_CLASS* c) \
+ : signaling_thread_(signaling_thread), \
+ worker_thread_(worker_thread), \
+ c_(c) {} \
+ \
+ public: \
+ ~c##ProxyWithInternal() { \
+ MethodCall0<c##ProxyWithInternal, void> call( \
+ this, &c##ProxyWithInternal::ReleaseOnCorrectThread); \
+ call.Marshal(RTC_FROM_HERE, signaling_thread_); \
+ } \
+ \
+ static std::unique_ptr<c##ProxyWithInternal> Create( \
+ rtc::Thread* signaling_thread, \
+ rtc::Thread* worker_thread, \
+ INTERNAL_CLASS* c) { \
+ return std::unique_ptr<c##ProxyWithInternal>( \
+ new c##ProxyWithInternal(signaling_thread, worker_thread, c)); \
+ } \
+ const INTERNAL_CLASS* internal() const { return c_.get(); } \
+ INTERNAL_CLASS* internal() { return c_.get(); }
+
+// Object that should be destroyed on the worker thread.
+#define BEGIN_NON_REFCOUNTED_WORKER_PROXY_MAP(c) \
+ template <class INTERNAL_CLASS> \
+ class c##ProxyWithInternal; \
+ typedef c##ProxyWithInternal<c##Interface> c##Proxy; \
+ template <class INTERNAL_CLASS> \
+ class c##ProxyWithInternal : public c##Interface { \
+ protected: \
+ typedef c##Interface C; \
+ c##ProxyWithInternal(rtc::Thread* signaling_thread, \
+ rtc::Thread* worker_thread, \
+ INTERNAL_CLASS* c) \
+ : signaling_thread_(signaling_thread), \
+ worker_thread_(worker_thread), \
+ c_(c) {} \
+ \
+ public: \
+ ~c##ProxyWithInternal() { \
+ MethodCall0<c##ProxyWithInternal, void> call( \
+ this, &c##ProxyWithInternal::ReleaseOnCorrectThread); \
+ call.Marshal(RTC_FROM_HERE, worker_thread_); \
+ } \
+ \
+ static std::unique_ptr<c##ProxyWithInternal> Create( \
+ rtc::Thread* signaling_thread, \
+ rtc::Thread* worker_thread, \
+ INTERNAL_CLASS* c) { \
+ return std::unique_ptr<c##ProxyWithInternal>( \
+ new c##ProxyWithInternal(signaling_thread, worker_thread, c)); \
+ } \
+ const INTERNAL_CLASS* internal() const { return c_.get(); } \
+ INTERNAL_CLASS* internal() { return c_.get(); }
+
#define PROXY_METHOD0(r, method) \
r method() override { \
MethodCall0<C, r> call(c_.get(), &C::method); \
@@ -414,33 +479,66 @@ class MethodCall5 : public rtc::Message,
}
// Define methods which should be invoked on the worker thread.
+#define PROXY_WORKER_METHOD0(r, method) \
+ r method() override { \
+ MethodCall0<C, r> call(c_.get(), &C::method); \
+ return call.Marshal(RTC_FROM_HERE, worker_thread_); \
+ }
+
+#define PROXY_WORKER_CONSTMETHOD0(r, method) \
+ r method() const override { \
+ ConstMethodCall0<C, r> call(c_.get(), &C::method); \
+ return call.Marshal(RTC_FROM_HERE, worker_thread_); \
+ }
+
#define PROXY_WORKER_METHOD1(r, method, t1) \
r method(t1 a1) override { \
MethodCall1<C, r, t1> call(c_.get(), &C::method, a1); \
return call.Marshal(RTC_FROM_HERE, worker_thread_); \
}
+#define PROXY_WORKER_CONSTMETHOD1(r, method, t1) \
+ r method(t1 a1) const override { \
+ ConstMethodCall1<C, r, t1> call(c_.get(), &C::method, a1); \
+ return call.Marshal(RTC_FROM_HERE, worker_thread_); \
+ }
+
#define PROXY_WORKER_METHOD2(r, method, t1, t2) \
r method(t1 a1, t2 a2) override { \
MethodCall2<C, r, t1, t2> call(c_.get(), &C::method, a1, a2); \
return call.Marshal(RTC_FROM_HERE, worker_thread_); \
}
-#define END_SIGNALING_PROXY() \
- private: \
- void Release_s() { c_ = NULL; } \
- mutable rtc::Thread* signaling_thread_; \
- rtc::scoped_refptr<INTERNAL_CLASS> c_; \
- } \
+#define PROXY_WORKER_CONSTMETHOD2(r, method, t1, t2) \
+ r method(t1 a1, t2 a2) const override { \
+ ConstMethodCall2<C, r, t1, t2> call(c_.get(), &C::method, a1, a2); \
+ return call.Marshal(RTC_FROM_HERE, worker_thread_); \
+ }
+
+#define END_SIGNALING_PROXY() \
+ private: \
+ void ReleaseOnCorrectThread() { c_ = NULL; } \
+ mutable rtc::Thread* signaling_thread_; \
+ rtc::scoped_refptr<INTERNAL_CLASS> c_; \
+ } \
+ ;
+
+#define END_PROXY() \
+ private: \
+ void ReleaseOnCorrectThread() { c_ = NULL; } \
+ mutable rtc::Thread* signaling_thread_; \
+ mutable rtc::Thread* worker_thread_; \
+ rtc::scoped_refptr<INTERNAL_CLASS> c_; \
+ } \
;
-#define END_PROXY() \
- private: \
- void Release_s() { c_ = NULL; } \
- mutable rtc::Thread* signaling_thread_; \
- mutable rtc::Thread* worker_thread_; \
- rtc::scoped_refptr<INTERNAL_CLASS> c_; \
- } \
+#define END_NON_REFCOUNTED_PROXY() \
+ private: \
+ void ReleaseOnCorrectThread() { c_.reset(nullptr); } \
+ mutable rtc::Thread* signaling_thread_; \
+ mutable rtc::Thread* worker_thread_; \
+ std::unique_ptr<INTERNAL_CLASS> c_; \
+ } \
;
} // namespace webrtc
« no previous file with comments | « webrtc/api/ortcfactory_unittest.cc ('k') | webrtc/api/udptransportinterface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698