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

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: 282a294f Rebase, rework, Created 7 years, 2 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
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 base::WaitableEvent waiter(false, false);
69 loop->PostTask(
70 FROM_HERE,
71 base::Bind(
72 &TrampolineSyncCaller,
73 base::Bind(cb),
74 &waiter));
75 waiter.Wait();
76 }
60 }; 77 };
61 78
62 79
63 template <typename A1> 80 template <typename A1>
64 struct TrampolineHelper<void(A1)> { 81 struct TrampolineHelper<void(A1)> {
65 static void Run( 82 static void Run(
66 const scoped_refptr<base::MessageLoopProxy>& loop, 83 const scoped_refptr<base::MessageLoopProxy>& loop,
67 const base::Callback<void(A1)>& cb, A1 a1) { 84 const base::Callback<void(A1)>& cb, A1 a1) {
68 loop->PostTask(FROM_HERE, base::Bind(cb, internal::TrampolineForward(a1))); 85 loop->PostTask(FROM_HERE, base::Bind(cb, internal::TrampolineForward(a1)));
69 } 86 }
87 static void RunSync(
88 const scoped_refptr<base::MessageLoopProxy>& loop,
89 const base::Callback<void(A1)>& cb, A1 a1) {
90 base::WaitableEvent waiter(false, false);
91 loop->PostTask(
92 FROM_HERE,
93 base::Bind(
94 &TrampolineSyncCaller,
95 base::Bind(cb, internal::TrampolineForward(a1)),
96 &waiter));
97 waiter.Wait();
98 }
70 }; 99 };
71 100
72 101
73 template <typename A1, typename A2> 102 template <typename A1, typename A2>
74 struct TrampolineHelper<void(A1, A2)> { 103 struct TrampolineHelper<void(A1, A2)> {
75 static void Run( 104 static void Run(
76 const scoped_refptr<base::MessageLoopProxy>& loop, 105 const scoped_refptr<base::MessageLoopProxy>& loop,
77 const base::Callback<void(A1, A2)>& cb, A1 a1, A2 a2) { 106 const base::Callback<void(A1, A2)>& cb, A1 a1, A2 a2) {
78 loop->PostTask(FROM_HERE, base::Bind(cb, internal::TrampolineForward(a1), 107 loop->PostTask(FROM_HERE, base::Bind(cb, internal::TrampolineForward(a1),
79 internal::TrampolineForward(a2))); 108 internal::TrampolineForward(a2)));
80 } 109 }
110 static void RunSync(
111 const scoped_refptr<base::MessageLoopProxy>& loop,
112 const base::Callback<void(A1, A2)>& cb, A1 a1, A2 a2) {
113 base::WaitableEvent waiter(false, false);
114 loop->PostTask(
115 FROM_HERE,
116 base::Bind(
117 &TrampolineSyncCaller,
118 base::Bind(cb, internal::TrampolineForward(a1),
119 internal::TrampolineForward(a2)),
120 &waiter));
121 waiter.Wait();
122 }
81 }; 123 };
82 124
83 125
84 template <typename A1, typename A2, typename A3> 126 template <typename A1, typename A2, typename A3>
85 struct TrampolineHelper<void(A1, A2, A3)> { 127 struct TrampolineHelper<void(A1, A2, A3)> {
86 static void Run( 128 static void Run(
87 const scoped_refptr<base::MessageLoopProxy>& loop, 129 const scoped_refptr<base::MessageLoopProxy>& loop,
88 const base::Callback<void(A1, A2, A3)>& cb, A1 a1, A2 a2, A3 a3) { 130 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), 131 loop->PostTask(FROM_HERE, base::Bind(cb, internal::TrampolineForward(a1),
90 internal::TrampolineForward(a2), internal::TrampolineForward(a3))); 132 internal::TrampolineForward(a2), internal::TrampolineForward(a3)));
91 } 133 }
134 static void RunSync(
135 const scoped_refptr<base::MessageLoopProxy>& loop,
136 const base::Callback<void(A1, A2, A3)>& cb, A1 a1, A2 a2, A3 a3) {
137 base::WaitableEvent waiter(false, false);
138 loop->PostTask(
139 FROM_HERE,
140 base::Bind(
141 &TrampolineSyncCaller,
142 base::Bind(cb, internal::TrampolineForward(a1),
143 internal::TrampolineForward(a2),
144 internal::TrampolineForward(a3)),
145 &waiter));
146 waiter.Wait();
147 }
92 }; 148 };
93 149
94 150
95 template <typename A1, typename A2, typename A3, typename A4> 151 template <typename A1, typename A2, typename A3, typename A4>
96 struct TrampolineHelper<void(A1, A2, A3, A4)> { 152 struct TrampolineHelper<void(A1, A2, A3, A4)> {
97 static void Run( 153 static void Run(
98 const scoped_refptr<base::MessageLoopProxy>& loop, 154 const scoped_refptr<base::MessageLoopProxy>& loop,
99 const base::Callback<void(A1, A2, A3, A4)>& cb, A1 a1, A2 a2, A3 a3, 155 const base::Callback<void(A1, A2, A3, A4)>& cb, A1 a1, A2 a2, A3 a3,
100 A4 a4) { 156 A4 a4) {
101 loop->PostTask(FROM_HERE, base::Bind(cb, internal::TrampolineForward(a1), 157 loop->PostTask(FROM_HERE, base::Bind(cb, internal::TrampolineForward(a1),
102 internal::TrampolineForward(a2), internal::TrampolineForward(a3), 158 internal::TrampolineForward(a2), internal::TrampolineForward(a3),
103 internal::TrampolineForward(a4))); 159 internal::TrampolineForward(a4)));
104 } 160 }
161 static void RunSync(
162 const scoped_refptr<base::MessageLoopProxy>& loop,
163 const base::Callback<void(A1, A2, A3, A4)>& cb, A1 a1, A2 a2, A3 a3,
164 A4 a4) {
165 base::WaitableEvent waiter(false, false);
166 loop->PostTask(
167 FROM_HERE,
168 base::Bind(
169 &TrampolineSyncCaller,
170 base::Bind(cb, internal::TrampolineForward(a1),
171 internal::TrampolineForward(a2),
172 internal::TrampolineForward(a3),
173 internal::TrampolineForward(a4)),
174 &waiter));
175 waiter.Wait();
176 }
105 }; 177 };
106 178
107 179
108 template <typename A1, typename A2, typename A3, typename A4, typename A5> 180 template <typename A1, typename A2, typename A3, typename A4, typename A5>
109 struct TrampolineHelper<void(A1, A2, A3, A4, A5)> { 181 struct TrampolineHelper<void(A1, A2, A3, A4, A5)> {
110 static void Run( 182 static void Run(
111 const scoped_refptr<base::MessageLoopProxy>& loop, 183 const scoped_refptr<base::MessageLoopProxy>& loop,
112 const base::Callback<void(A1, A2, A3, A4, A5)>& cb, A1 a1, A2 a2, A3 a3, 184 const base::Callback<void(A1, A2, A3, A4, A5)>& cb, A1 a1, A2 a2, A3 a3,
113 A4 a4, A5 a5) { 185 A4 a4, A5 a5) {
114 loop->PostTask(FROM_HERE, base::Bind(cb, internal::TrampolineForward(a1), 186 loop->PostTask(FROM_HERE, base::Bind(cb, internal::TrampolineForward(a1),
115 internal::TrampolineForward(a2), internal::TrampolineForward(a3), 187 internal::TrampolineForward(a2), internal::TrampolineForward(a3),
116 internal::TrampolineForward(a4), internal::TrampolineForward(a5))); 188 internal::TrampolineForward(a4), internal::TrampolineForward(a5)));
117 } 189 }
190 static void RunSync(
191 const scoped_refptr<base::MessageLoopProxy>& loop,
192 const base::Callback<void(A1, A2, A3, A4, A5)>& cb, A1 a1, A2 a2, A3 a3,
193 A4 a4, A5 a5) {
194 base::WaitableEvent waiter(false, false);
195 loop->PostTask(
196 FROM_HERE,
197 base::Bind(
198 &TrampolineSyncCaller,
199 base::Bind(cb, internal::TrampolineForward(a1),
200 internal::TrampolineForward(a2),
201 internal::TrampolineForward(a3),
202 internal::TrampolineForward(a4),
203 internal::TrampolineForward(a5)),
204 &waiter));
205 waiter.Wait();
206 }
118 }; 207 };
119 208
120 209
121 template <typename A1, typename A2, typename A3, typename A4, typename A5, 210 template <typename A1, typename A2, typename A3, typename A4, typename A5,
122 typename A6> 211 typename A6>
123 struct TrampolineHelper<void(A1, A2, A3, A4, A5, A6)> { 212 struct TrampolineHelper<void(A1, A2, A3, A4, A5, A6)> {
124 static void Run( 213 static void Run(
125 const scoped_refptr<base::MessageLoopProxy>& loop, 214 const scoped_refptr<base::MessageLoopProxy>& loop,
126 const base::Callback<void(A1, A2, A3, A4, A5, A6)>& cb, A1 a1, A2 a2, 215 const base::Callback<void(A1, A2, A3, A4, A5, A6)>& cb, A1 a1, A2 a2,
127 A3 a3, A4 a4, A5 a5, A6 a6) { 216 A3 a3, A4 a4, A5 a5, A6 a6) {
128 loop->PostTask(FROM_HERE, base::Bind(cb, internal::TrampolineForward(a1), 217 loop->PostTask(FROM_HERE, base::Bind(cb, internal::TrampolineForward(a1),
129 internal::TrampolineForward(a2), internal::TrampolineForward(a3), 218 internal::TrampolineForward(a2), internal::TrampolineForward(a3),
130 internal::TrampolineForward(a4), internal::TrampolineForward(a5), 219 internal::TrampolineForward(a4), internal::TrampolineForward(a5),
131 internal::TrampolineForward(a6))); 220 internal::TrampolineForward(a6)));
132 } 221 }
222 static void RunSync(
223 const scoped_refptr<base::MessageLoopProxy>& loop,
224 const base::Callback<void(A1, A2, A3, A4, A5, A6)>& cb, A1 a1, A2 a2,
225 A3 a3, A4 a4, A5 a5, A6 a6) {
226 base::WaitableEvent waiter(false, false);
227 loop->PostTask(
228 FROM_HERE,
229 base::Bind(
230 &TrampolineSyncCaller,
231 base::Bind(cb, internal::TrampolineForward(a1),
232 internal::TrampolineForward(a2),
233 internal::TrampolineForward(a3),
234 internal::TrampolineForward(a4),
235 internal::TrampolineForward(a5),
236 internal::TrampolineForward(a6)),
237 &waiter));
238 waiter.Wait();
239 }
133 }; 240 };
134 241
135 242
136 template <typename A1, typename A2, typename A3, typename A4, typename A5, 243 template <typename A1, typename A2, typename A3, typename A4, typename A5,
137 typename A6, typename A7> 244 typename A6, typename A7>
138 struct TrampolineHelper<void(A1, A2, A3, A4, A5, A6, A7)> { 245 struct TrampolineHelper<void(A1, A2, A3, A4, A5, A6, A7)> {
139 static void Run( 246 static void Run(
140 const scoped_refptr<base::MessageLoopProxy>& loop, 247 const scoped_refptr<base::MessageLoopProxy>& loop,
141 const base::Callback<void(A1, A2, A3, A4, A5, A6, A7)>& cb, A1 a1, A2 a2, 248 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) { 249 A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) {
143 loop->PostTask(FROM_HERE, base::Bind(cb, internal::TrampolineForward(a1), 250 loop->PostTask(FROM_HERE, base::Bind(cb, internal::TrampolineForward(a1),
144 internal::TrampolineForward(a2), internal::TrampolineForward(a3), 251 internal::TrampolineForward(a2), internal::TrampolineForward(a3),
145 internal::TrampolineForward(a4), internal::TrampolineForward(a5), 252 internal::TrampolineForward(a4), internal::TrampolineForward(a5),
146 internal::TrampolineForward(a6), internal::TrampolineForward(a7))); 253 internal::TrampolineForward(a6), internal::TrampolineForward(a7)));
147 } 254 }
255 static void RunSync(
256 const scoped_refptr<base::MessageLoopProxy>& loop,
257 const base::Callback<void(A1, A2, A3, A4, A5, A6, A7)>& cb, A1 a1, A2 a2,
258 A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) {
259 base::WaitableEvent waiter(false, false);
260 loop->PostTask(
261 FROM_HERE,
262 base::Bind(
263 &TrampolineSyncCaller,
264 base::Bind(cb, internal::TrampolineForward(a1),
265 internal::TrampolineForward(a2),
266 internal::TrampolineForward(a3),
267 internal::TrampolineForward(a4),
268 internal::TrampolineForward(a5),
269 internal::TrampolineForward(a6),
270 internal::TrampolineForward(a7)),
271 &waiter));
272 waiter.Wait();
273 }
148 }; 274 };
149 275
150 276
151 } // namespace internal 277 } // namespace internal
152 278
153 template<typename T> 279 template<typename T>
154 static base::Callback<T> BindToLoop( 280 static base::Callback<T> BindToLoop(
155 const scoped_refptr<base::MessageLoopProxy>& loop, 281 const scoped_refptr<base::MessageLoopProxy>& loop,
156 const base::Callback<T>& cb) { 282 const base::Callback<T>& cb) {
157 return base::Bind(&internal::TrampolineHelper<T>::Run, loop, cb); 283 return base::Bind(&internal::TrampolineHelper<T>::Run, loop, cb);
158 } 284 }
159 285
160 template<typename T> 286 template<typename T>
287 static base::Callback<T> BindToLoopSync(
288 const scoped_refptr<base::MessageLoopProxy>& loop,
289 const base::Callback<T>& cb) {
290 DCHECK(!loop->BelongsToCurrentThread());
291 return base::Bind(&internal::TrampolineHelper<T>::RunSync, loop, cb);
292 }
293
294 template<typename T>
161 static base::Callback<T> BindToCurrentLoop( 295 static base::Callback<T> BindToCurrentLoop(
162 const base::Callback<T>& cb) { 296 const base::Callback<T>& cb) {
163 return BindToLoop(base::MessageLoopProxy::current(), cb); 297 return BindToLoop(base::MessageLoopProxy::current(), cb);
164 } 298 }
165 299
166 } // namespace media 300 } // namespace media
167 301
168 #endif // MEDIA_BASE_BIND_TO_LOOP_H_ 302 #endif // MEDIA_BASE_BIND_TO_LOOP_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698