OLD | NEW |
1 // This file was GENERATED by command: | 1 // This file was GENERATED by command: |
2 // pump.py bind_to_loop.h.pump | 2 // pump.py bind_to_loop.h.pump |
3 // DO NOT EDIT BY HAND!!! | 3 // DO NOT EDIT BY HAND!!! |
4 | 4 |
5 | 5 |
6 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 6 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
7 // Use of this source code is governed by a BSD-style license that can be | 7 // Use of this source code is governed by a BSD-style license that can be |
8 // found in the LICENSE file. | 8 // found in the LICENSE file. |
9 | 9 |
10 #ifndef MEDIA_BASE_BIND_TO_LOOP_H_ | 10 #ifndef MEDIA_BASE_BIND_TO_LOOP_H_ |
11 #define MEDIA_BASE_BIND_TO_LOOP_H_ | 11 #define MEDIA_BASE_BIND_TO_LOOP_H_ |
12 | 12 |
13 #include "base/bind.h" | 13 #include "base/bind.h" |
14 #include "base/location.h" | 14 #include "base/location.h" |
15 #include "base/message_loop/message_loop_proxy.h" | 15 #include "base/message_loop/message_loop_proxy.h" |
| 16 #include "base/synchronization/waitable_event.h" |
16 | 17 |
17 // This is a helper utility for base::Bind()ing callbacks on to particular | 18 // This is a helper utility for base::Bind()ing callbacks on to particular |
18 // MessageLoops. A typical use is when |a| (of class |A|) wants to hand a | 19 // MessageLoops. A typical use is when |a| (of class |A|) wants to hand a |
19 // callback such as base::Bind(&A::AMethod, a) to |b|, but needs to ensure that | 20 // callback such as base::Bind(&A::AMethod, a) to |b|, but needs to ensure that |
20 // when |b| executes the callback, it does so on a particular MessageLoop. | 21 // when |b| executes the callback, it does so on a particular MessageLoop. |
21 // | 22 // |
22 // Typical usage: request to be called back on the current thread: | 23 // Typical usage: request to be called back on the current thread: |
23 // other->StartAsyncProcessAndCallMeBack( | 24 // other->StartAsyncProcessAndCallMeBack( |
24 // media::BindToLoop(MessageLoopProxy::current(), | 25 // media::BindToLoop(MessageLoopProxy::current(), |
25 // base::Bind(&MyClass::MyMethod, this))); | 26 // base::Bind(&MyClass::MyMethod, this))); |
(...skipping 17 matching lines...) Expand all Loading... |
43 template <typename T, typename R> | 44 template <typename T, typename R> |
44 base::internal::PassedWrapper<scoped_ptr_malloc<T, R> > TrampolineForward( | 45 base::internal::PassedWrapper<scoped_ptr_malloc<T, R> > TrampolineForward( |
45 scoped_ptr_malloc<T, R>& p) { return base::Passed(&p); } | 46 scoped_ptr_malloc<T, R>& p) { return base::Passed(&p); } |
46 | 47 |
47 template <typename T> | 48 template <typename T> |
48 base::internal::PassedWrapper<ScopedVector<T> > TrampolineForward( | 49 base::internal::PassedWrapper<ScopedVector<T> > TrampolineForward( |
49 ScopedVector<T>& p) { return base::Passed(&p); } | 50 ScopedVector<T>& p) { return base::Passed(&p); } |
50 | 51 |
51 template <typename T> struct TrampolineHelper; | 52 template <typename T> struct TrampolineHelper; |
52 | 53 |
| 54 // Caller helper to call a base::Closure synchronously |
| 55 void TrampolineSyncCaller(const base::Closure& closure, |
| 56 base::WaitableEvent* waiter); |
| 57 |
53 template <> | 58 template <> |
54 struct TrampolineHelper<void()> { | 59 struct TrampolineHelper<void()> { |
55 static void Run( | 60 static void Run( |
56 const scoped_refptr<base::MessageLoopProxy>& loop, | 61 const scoped_refptr<base::MessageLoopProxy>& loop, |
57 const base::Callback<void()>& cb) { | 62 const base::Callback<void()>& cb) { |
58 loop->PostTask(FROM_HERE, base::Bind(cb)); | 63 loop->PostTask(FROM_HERE, base::Bind(cb)); |
59 } | 64 } |
| 65 static void RunSync( |
| 66 const scoped_refptr<base::MessageLoopProxy>& loop, |
| 67 const base::Callback<void()>& cb) { |
| 68 DCHECK(!loop->BelongsToCurrentThread()); |
| 69 base::WaitableEvent waiter(false, false); |
| 70 loop->PostTask( |
| 71 FROM_HERE, |
| 72 base::Bind( |
| 73 &TrampolineSyncCaller, |
| 74 base::Bind(cb), |
| 75 &waiter)); |
| 76 waiter.Wait(); |
| 77 } |
60 }; | 78 }; |
61 | 79 |
62 | 80 |
63 template <typename A1> | 81 template <typename A1> |
64 struct TrampolineHelper<void(A1)> { | 82 struct TrampolineHelper<void(A1)> { |
65 static void Run( | 83 static void Run( |
66 const scoped_refptr<base::MessageLoopProxy>& loop, | 84 const scoped_refptr<base::MessageLoopProxy>& loop, |
67 const base::Callback<void(A1)>& cb, A1 a1) { | 85 const base::Callback<void(A1)>& cb, A1 a1) { |
68 loop->PostTask(FROM_HERE, base::Bind(cb, internal::TrampolineForward(a1))); | 86 loop->PostTask(FROM_HERE, base::Bind(cb, internal::TrampolineForward(a1))); |
69 } | 87 } |
| 88 static void RunSync( |
| 89 const scoped_refptr<base::MessageLoopProxy>& loop, |
| 90 const base::Callback<void(A1)>& cb, A1 a1) { |
| 91 DCHECK(!loop->BelongsToCurrentThread()); |
| 92 base::WaitableEvent waiter(false, false); |
| 93 loop->PostTask( |
| 94 FROM_HERE, |
| 95 base::Bind( |
| 96 &TrampolineSyncCaller, |
| 97 base::Bind(cb, internal::TrampolineForward(a1)), |
| 98 &waiter)); |
| 99 waiter.Wait(); |
| 100 } |
70 }; | 101 }; |
71 | 102 |
72 | 103 |
73 template <typename A1, typename A2> | 104 template <typename A1, typename A2> |
74 struct TrampolineHelper<void(A1, A2)> { | 105 struct TrampolineHelper<void(A1, A2)> { |
75 static void Run( | 106 static void Run( |
76 const scoped_refptr<base::MessageLoopProxy>& loop, | 107 const scoped_refptr<base::MessageLoopProxy>& loop, |
77 const base::Callback<void(A1, A2)>& cb, A1 a1, A2 a2) { | 108 const base::Callback<void(A1, A2)>& cb, A1 a1, A2 a2) { |
78 loop->PostTask(FROM_HERE, base::Bind(cb, internal::TrampolineForward(a1), | 109 loop->PostTask(FROM_HERE, base::Bind(cb, internal::TrampolineForward(a1), |
79 internal::TrampolineForward(a2))); | 110 internal::TrampolineForward(a2))); |
80 } | 111 } |
| 112 static void RunSync( |
| 113 const scoped_refptr<base::MessageLoopProxy>& loop, |
| 114 const base::Callback<void(A1, A2)>& cb, A1 a1, A2 a2) { |
| 115 DCHECK(!loop->BelongsToCurrentThread()); |
| 116 base::WaitableEvent waiter(false, false); |
| 117 loop->PostTask( |
| 118 FROM_HERE, |
| 119 base::Bind( |
| 120 &TrampolineSyncCaller, |
| 121 base::Bind(cb, internal::TrampolineForward(a1), |
| 122 internal::TrampolineForward(a2)), |
| 123 &waiter)); |
| 124 waiter.Wait(); |
| 125 } |
81 }; | 126 }; |
82 | 127 |
83 | 128 |
84 template <typename A1, typename A2, typename A3> | 129 template <typename A1, typename A2, typename A3> |
85 struct TrampolineHelper<void(A1, A2, A3)> { | 130 struct TrampolineHelper<void(A1, A2, A3)> { |
86 static void Run( | 131 static void Run( |
87 const scoped_refptr<base::MessageLoopProxy>& loop, | 132 const scoped_refptr<base::MessageLoopProxy>& loop, |
88 const base::Callback<void(A1, A2, A3)>& cb, A1 a1, A2 a2, A3 a3) { | 133 const base::Callback<void(A1, A2, A3)>& cb, A1 a1, A2 a2, A3 a3) { |
89 loop->PostTask(FROM_HERE, base::Bind(cb, internal::TrampolineForward(a1), | 134 loop->PostTask(FROM_HERE, base::Bind(cb, internal::TrampolineForward(a1), |
90 internal::TrampolineForward(a2), internal::TrampolineForward(a3))); | 135 internal::TrampolineForward(a2), internal::TrampolineForward(a3))); |
91 } | 136 } |
| 137 static void RunSync( |
| 138 const scoped_refptr<base::MessageLoopProxy>& loop, |
| 139 const base::Callback<void(A1, A2, A3)>& cb, A1 a1, A2 a2, A3 a3) { |
| 140 DCHECK(!loop->BelongsToCurrentThread()); |
| 141 base::WaitableEvent waiter(false, false); |
| 142 loop->PostTask( |
| 143 FROM_HERE, |
| 144 base::Bind( |
| 145 &TrampolineSyncCaller, |
| 146 base::Bind(cb, internal::TrampolineForward(a1), |
| 147 internal::TrampolineForward(a2), |
| 148 internal::TrampolineForward(a3)), |
| 149 &waiter)); |
| 150 waiter.Wait(); |
| 151 } |
92 }; | 152 }; |
93 | 153 |
94 | 154 |
95 template <typename A1, typename A2, typename A3, typename A4> | 155 template <typename A1, typename A2, typename A3, typename A4> |
96 struct TrampolineHelper<void(A1, A2, A3, A4)> { | 156 struct TrampolineHelper<void(A1, A2, A3, A4)> { |
97 static void Run( | 157 static void Run( |
98 const scoped_refptr<base::MessageLoopProxy>& loop, | 158 const scoped_refptr<base::MessageLoopProxy>& loop, |
99 const base::Callback<void(A1, A2, A3, A4)>& cb, A1 a1, A2 a2, A3 a3, | 159 const base::Callback<void(A1, A2, A3, A4)>& cb, A1 a1, A2 a2, A3 a3, |
100 A4 a4) { | 160 A4 a4) { |
101 loop->PostTask(FROM_HERE, base::Bind(cb, internal::TrampolineForward(a1), | 161 loop->PostTask(FROM_HERE, base::Bind(cb, internal::TrampolineForward(a1), |
102 internal::TrampolineForward(a2), internal::TrampolineForward(a3), | 162 internal::TrampolineForward(a2), internal::TrampolineForward(a3), |
103 internal::TrampolineForward(a4))); | 163 internal::TrampolineForward(a4))); |
104 } | 164 } |
| 165 static void RunSync( |
| 166 const scoped_refptr<base::MessageLoopProxy>& loop, |
| 167 const base::Callback<void(A1, A2, A3, A4)>& cb, A1 a1, A2 a2, A3 a3, |
| 168 A4 a4) { |
| 169 DCHECK(!loop->BelongsToCurrentThread()); |
| 170 base::WaitableEvent waiter(false, false); |
| 171 loop->PostTask( |
| 172 FROM_HERE, |
| 173 base::Bind( |
| 174 &TrampolineSyncCaller, |
| 175 base::Bind(cb, internal::TrampolineForward(a1), |
| 176 internal::TrampolineForward(a2), |
| 177 internal::TrampolineForward(a3), |
| 178 internal::TrampolineForward(a4)), |
| 179 &waiter)); |
| 180 waiter.Wait(); |
| 181 } |
105 }; | 182 }; |
106 | 183 |
107 | 184 |
108 template <typename A1, typename A2, typename A3, typename A4, typename A5> | 185 template <typename A1, typename A2, typename A3, typename A4, typename A5> |
109 struct TrampolineHelper<void(A1, A2, A3, A4, A5)> { | 186 struct TrampolineHelper<void(A1, A2, A3, A4, A5)> { |
110 static void Run( | 187 static void Run( |
111 const scoped_refptr<base::MessageLoopProxy>& loop, | 188 const scoped_refptr<base::MessageLoopProxy>& loop, |
112 const base::Callback<void(A1, A2, A3, A4, A5)>& cb, A1 a1, A2 a2, A3 a3, | 189 const base::Callback<void(A1, A2, A3, A4, A5)>& cb, A1 a1, A2 a2, A3 a3, |
113 A4 a4, A5 a5) { | 190 A4 a4, A5 a5) { |
114 loop->PostTask(FROM_HERE, base::Bind(cb, internal::TrampolineForward(a1), | 191 loop->PostTask(FROM_HERE, base::Bind(cb, internal::TrampolineForward(a1), |
115 internal::TrampolineForward(a2), internal::TrampolineForward(a3), | 192 internal::TrampolineForward(a2), internal::TrampolineForward(a3), |
116 internal::TrampolineForward(a4), internal::TrampolineForward(a5))); | 193 internal::TrampolineForward(a4), internal::TrampolineForward(a5))); |
117 } | 194 } |
| 195 static void RunSync( |
| 196 const scoped_refptr<base::MessageLoopProxy>& loop, |
| 197 const base::Callback<void(A1, A2, A3, A4, A5)>& cb, A1 a1, A2 a2, A3 a3, |
| 198 A4 a4, A5 a5) { |
| 199 DCHECK(!loop->BelongsToCurrentThread()); |
| 200 base::WaitableEvent waiter(false, false); |
| 201 loop->PostTask( |
| 202 FROM_HERE, |
| 203 base::Bind( |
| 204 &TrampolineSyncCaller, |
| 205 base::Bind(cb, internal::TrampolineForward(a1), |
| 206 internal::TrampolineForward(a2), |
| 207 internal::TrampolineForward(a3), |
| 208 internal::TrampolineForward(a4), |
| 209 internal::TrampolineForward(a5)), |
| 210 &waiter)); |
| 211 waiter.Wait(); |
| 212 } |
118 }; | 213 }; |
119 | 214 |
120 | 215 |
121 template <typename A1, typename A2, typename A3, typename A4, typename A5, | 216 template <typename A1, typename A2, typename A3, typename A4, typename A5, |
122 typename A6> | 217 typename A6> |
123 struct TrampolineHelper<void(A1, A2, A3, A4, A5, A6)> { | 218 struct TrampolineHelper<void(A1, A2, A3, A4, A5, A6)> { |
124 static void Run( | 219 static void Run( |
125 const scoped_refptr<base::MessageLoopProxy>& loop, | 220 const scoped_refptr<base::MessageLoopProxy>& loop, |
126 const base::Callback<void(A1, A2, A3, A4, A5, A6)>& cb, A1 a1, A2 a2, | 221 const base::Callback<void(A1, A2, A3, A4, A5, A6)>& cb, A1 a1, A2 a2, |
127 A3 a3, A4 a4, A5 a5, A6 a6) { | 222 A3 a3, A4 a4, A5 a5, A6 a6) { |
128 loop->PostTask(FROM_HERE, base::Bind(cb, internal::TrampolineForward(a1), | 223 loop->PostTask(FROM_HERE, base::Bind(cb, internal::TrampolineForward(a1), |
129 internal::TrampolineForward(a2), internal::TrampolineForward(a3), | 224 internal::TrampolineForward(a2), internal::TrampolineForward(a3), |
130 internal::TrampolineForward(a4), internal::TrampolineForward(a5), | 225 internal::TrampolineForward(a4), internal::TrampolineForward(a5), |
131 internal::TrampolineForward(a6))); | 226 internal::TrampolineForward(a6))); |
132 } | 227 } |
| 228 static void RunSync( |
| 229 const scoped_refptr<base::MessageLoopProxy>& loop, |
| 230 const base::Callback<void(A1, A2, A3, A4, A5, A6)>& cb, A1 a1, A2 a2, |
| 231 A3 a3, A4 a4, A5 a5, A6 a6) { |
| 232 DCHECK(!loop->BelongsToCurrentThread()); |
| 233 base::WaitableEvent waiter(false, false); |
| 234 loop->PostTask( |
| 235 FROM_HERE, |
| 236 base::Bind( |
| 237 &TrampolineSyncCaller, |
| 238 base::Bind(cb, internal::TrampolineForward(a1), |
| 239 internal::TrampolineForward(a2), |
| 240 internal::TrampolineForward(a3), |
| 241 internal::TrampolineForward(a4), |
| 242 internal::TrampolineForward(a5), |
| 243 internal::TrampolineForward(a6)), |
| 244 &waiter)); |
| 245 waiter.Wait(); |
| 246 } |
133 }; | 247 }; |
134 | 248 |
135 | 249 |
136 template <typename A1, typename A2, typename A3, typename A4, typename A5, | 250 template <typename A1, typename A2, typename A3, typename A4, typename A5, |
137 typename A6, typename A7> | 251 typename A6, typename A7> |
138 struct TrampolineHelper<void(A1, A2, A3, A4, A5, A6, A7)> { | 252 struct TrampolineHelper<void(A1, A2, A3, A4, A5, A6, A7)> { |
139 static void Run( | 253 static void Run( |
140 const scoped_refptr<base::MessageLoopProxy>& loop, | 254 const scoped_refptr<base::MessageLoopProxy>& loop, |
141 const base::Callback<void(A1, A2, A3, A4, A5, A6, A7)>& cb, A1 a1, A2 a2, | 255 const base::Callback<void(A1, A2, A3, A4, A5, A6, A7)>& cb, A1 a1, A2 a2, |
142 A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) { | 256 A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) { |
143 loop->PostTask(FROM_HERE, base::Bind(cb, internal::TrampolineForward(a1), | 257 loop->PostTask(FROM_HERE, base::Bind(cb, internal::TrampolineForward(a1), |
144 internal::TrampolineForward(a2), internal::TrampolineForward(a3), | 258 internal::TrampolineForward(a2), internal::TrampolineForward(a3), |
145 internal::TrampolineForward(a4), internal::TrampolineForward(a5), | 259 internal::TrampolineForward(a4), internal::TrampolineForward(a5), |
146 internal::TrampolineForward(a6), internal::TrampolineForward(a7))); | 260 internal::TrampolineForward(a6), internal::TrampolineForward(a7))); |
147 } | 261 } |
| 262 static void RunSync( |
| 263 const scoped_refptr<base::MessageLoopProxy>& loop, |
| 264 const base::Callback<void(A1, A2, A3, A4, A5, A6, A7)>& cb, A1 a1, A2 a2, |
| 265 A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) { |
| 266 DCHECK(!loop->BelongsToCurrentThread()); |
| 267 base::WaitableEvent waiter(false, false); |
| 268 loop->PostTask( |
| 269 FROM_HERE, |
| 270 base::Bind( |
| 271 &TrampolineSyncCaller, |
| 272 base::Bind(cb, internal::TrampolineForward(a1), |
| 273 internal::TrampolineForward(a2), |
| 274 internal::TrampolineForward(a3), |
| 275 internal::TrampolineForward(a4), |
| 276 internal::TrampolineForward(a5), |
| 277 internal::TrampolineForward(a6), |
| 278 internal::TrampolineForward(a7)), |
| 279 &waiter)); |
| 280 waiter.Wait(); |
| 281 } |
148 }; | 282 }; |
149 | 283 |
150 | 284 |
151 } // namespace internal | 285 } // namespace internal |
152 | 286 |
153 template<typename T> | 287 template<typename T> |
154 static base::Callback<T> BindToLoop( | 288 static base::Callback<T> BindToLoop( |
155 const scoped_refptr<base::MessageLoopProxy>& loop, | 289 const scoped_refptr<base::MessageLoopProxy>& loop, |
156 const base::Callback<T>& cb) { | 290 const base::Callback<T>& cb) { |
157 return base::Bind(&internal::TrampolineHelper<T>::Run, loop, cb); | 291 return base::Bind(&internal::TrampolineHelper<T>::Run, loop, cb); |
158 } | 292 } |
159 | 293 |
160 template<typename T> | 294 template<typename T> |
| 295 static base::Callback<T> BindToLoopSync( |
| 296 const scoped_refptr<base::MessageLoopProxy>& loop, |
| 297 const base::Callback<T>& cb) { |
| 298 return base::Bind(&internal::TrampolineHelper<T>::RunSync, loop, cb); |
| 299 } |
| 300 |
| 301 template<typename T> |
161 static base::Callback<T> BindToCurrentLoop( | 302 static base::Callback<T> BindToCurrentLoop( |
162 const base::Callback<T>& cb) { | 303 const base::Callback<T>& cb) { |
163 return BindToLoop(base::MessageLoopProxy::current(), cb); | 304 return BindToLoop(base::MessageLoopProxy::current(), cb); |
164 } | 305 } |
165 | 306 |
166 } // namespace media | 307 } // namespace media |
167 | 308 |
168 #endif // MEDIA_BASE_BIND_TO_LOOP_H_ | 309 #endif // MEDIA_BASE_BIND_TO_LOOP_H_ |
OLD | NEW |