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

Side by Side Diff: webrtc/base/asyncinvoker-inl.h

Issue 2019423006: Adding more detail to MessageQueue::Dispatch logging. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fixing one more place where RTC_FROM_HERE wasn't used. Created 4 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 unified diff | Download patch
« no previous file with comments | « webrtc/base/asyncinvoker.cc ('k') | webrtc/base/autodetectproxy.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2014 The WebRTC Project Authors. All rights reserved. 2 * Copyright 2014 The WebRTC Project Authors. All rights reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 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 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 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 51
52 // Base class for closures that may trigger a callback for the calling thread. 52 // Base class for closures that may trigger a callback for the calling thread.
53 // Listens for the "destroyed" signals from the calling thread and the invoker, 53 // Listens for the "destroyed" signals from the calling thread and the invoker,
54 // and cancels the callback to the calling thread if either is destroyed. 54 // and cancels the callback to the calling thread if either is destroyed.
55 class NotifyingAsyncClosureBase : public AsyncClosure, 55 class NotifyingAsyncClosureBase : public AsyncClosure,
56 public sigslot::has_slots<> { 56 public sigslot::has_slots<> {
57 public: 57 public:
58 ~NotifyingAsyncClosureBase() override; 58 ~NotifyingAsyncClosureBase() override;
59 59
60 protected: 60 protected:
61 NotifyingAsyncClosureBase(AsyncInvoker* invoker, Thread* calling_thread); 61 NotifyingAsyncClosureBase(AsyncInvoker* invoker,
62 const Location& callback_posted_from,
63 Thread* calling_thread);
62 void TriggerCallback(); 64 void TriggerCallback();
63 void SetCallback(const Callback0<void>& callback) { 65 void SetCallback(const Callback0<void>& callback) {
64 CritScope cs(&crit_); 66 CritScope cs(&crit_);
65 callback_ = callback; 67 callback_ = callback;
66 } 68 }
67 bool CallbackCanceled() const { return calling_thread_ == NULL; } 69 bool CallbackCanceled() const { return calling_thread_ == NULL; }
68 70
69 private: 71 private:
72 AsyncInvoker* invoker_;
73 Location callback_posted_from_;
70 Callback0<void> callback_; 74 Callback0<void> callback_;
71 CriticalSection crit_; 75 CriticalSection crit_;
72 AsyncInvoker* invoker_;
73 Thread* calling_thread_; 76 Thread* calling_thread_;
74 77
75 void CancelCallback(); 78 void CancelCallback();
76 }; 79 };
77 80
78 // Closures that have a non-void return value and require a callback. 81 // Closures that have a non-void return value and require a callback.
79 template <class ReturnT, class FunctorT, class HostT> 82 template <class ReturnT, class FunctorT, class HostT>
80 class NotifyingAsyncClosure : public NotifyingAsyncClosureBase { 83 class NotifyingAsyncClosure : public NotifyingAsyncClosureBase {
81 public: 84 public:
82 NotifyingAsyncClosure(AsyncInvoker* invoker, 85 NotifyingAsyncClosure(AsyncInvoker* invoker,
86 const Location& callback_posted_from,
83 Thread* calling_thread, 87 Thread* calling_thread,
84 const FunctorT& functor, 88 const FunctorT& functor,
85 void (HostT::*callback)(ReturnT), 89 void (HostT::*callback)(ReturnT),
86 HostT* callback_host) 90 HostT* callback_host)
87 : NotifyingAsyncClosureBase(invoker, calling_thread), 91 : NotifyingAsyncClosureBase(invoker,
88 functor_(functor), 92 callback_posted_from,
89 callback_(callback), 93 calling_thread),
90 callback_host_(callback_host) {} 94 functor_(functor),
95 callback_(callback),
96 callback_host_(callback_host) {}
91 virtual void Execute() { 97 virtual void Execute() {
92 ReturnT result = functor_(); 98 ReturnT result = functor_();
93 if (!CallbackCanceled()) { 99 if (!CallbackCanceled()) {
94 SetCallback(Callback0<void>(Bind(callback_, callback_host_, result))); 100 SetCallback(Callback0<void>(Bind(callback_, callback_host_, result)));
95 TriggerCallback(); 101 TriggerCallback();
96 } 102 }
97 } 103 }
98 104
99 private: 105 private:
100 FunctorT functor_; 106 FunctorT functor_;
101 void (HostT::*callback_)(ReturnT); 107 void (HostT::*callback_)(ReturnT);
102 HostT* callback_host_; 108 HostT* callback_host_;
103 }; 109 };
104 110
105 // Closures that have a void return value and require a callback. 111 // Closures that have a void return value and require a callback.
106 template <class FunctorT, class HostT> 112 template <class FunctorT, class HostT>
107 class NotifyingAsyncClosure<void, FunctorT, HostT> 113 class NotifyingAsyncClosure<void, FunctorT, HostT>
108 : public NotifyingAsyncClosureBase { 114 : public NotifyingAsyncClosureBase {
109 public: 115 public:
110 NotifyingAsyncClosure(AsyncInvoker* invoker, 116 NotifyingAsyncClosure(AsyncInvoker* invoker,
117 const Location& callback_posted_from,
111 Thread* calling_thread, 118 Thread* calling_thread,
112 const FunctorT& functor, 119 const FunctorT& functor,
113 void (HostT::*callback)(), 120 void (HostT::*callback)(),
114 HostT* callback_host) 121 HostT* callback_host)
115 : NotifyingAsyncClosureBase(invoker, calling_thread), 122 : NotifyingAsyncClosureBase(invoker,
123 callback_posted_from,
124 calling_thread),
116 functor_(functor) { 125 functor_(functor) {
117 SetCallback(Callback0<void>(Bind(callback, callback_host))); 126 SetCallback(Callback0<void>(Bind(callback, callback_host)));
118 } 127 }
119 virtual void Execute() { 128 virtual void Execute() {
120 functor_(); 129 functor_();
121 TriggerCallback(); 130 TriggerCallback();
122 } 131 }
123 132
124 private: 133 private:
125 FunctorT functor_; 134 FunctorT functor_;
126 }; 135 };
127 136
128 } // namespace rtc 137 } // namespace rtc
129 138
130 #endif // WEBRTC_BASE_ASYNCINVOKER_INL_H_ 139 #endif // WEBRTC_BASE_ASYNCINVOKER_INL_H_
OLDNEW
« no previous file with comments | « webrtc/base/asyncinvoker.cc ('k') | webrtc/base/autodetectproxy.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698