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

Side by Side Diff: media/base/bind_to_loop.h

Issue 27420004: Remove threading from RendererGpuVideoAcceleratorFactories (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@dthread
Patch Set: f77fc38a Unittest fixes. Created 7 years, 1 month 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
OLDNEW
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
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_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698