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

Side by Side Diff: Source/core/dom/CrossThreadTask.h

Issue 934963003: Apply WTF::ParamStorageTraits<> to CrossThreadTaskN. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « Source/core/core.gypi ('k') | Source/core/dom/CrossThreadTaskTest.cpp » ('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 (C) 2009-2010 Google Inc. All rights reserved. 2 * Copyright (C) 2009-2010 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 22 matching lines...) Expand all
33 33
34 #include "core/dom/ExecutionContext.h" 34 #include "core/dom/ExecutionContext.h"
35 #include "core/dom/ExecutionContextTask.h" 35 #include "core/dom/ExecutionContextTask.h"
36 #include "platform/CrossThreadCopier.h" 36 #include "platform/CrossThreadCopier.h"
37 #include "wtf/PassOwnPtr.h" 37 #include "wtf/PassOwnPtr.h"
38 #include "wtf/PassRefPtr.h" 38 #include "wtf/PassRefPtr.h"
39 #include "wtf/TypeTraits.h" 39 #include "wtf/TypeTraits.h"
40 40
41 namespace blink { 41 namespace blink {
42 42
43 // Traits for the CrossThreadTask. 43 // Traits for the CrossThreadTask. They are used to map a cross-thread-capable
44 // copied type to a CrossThreadTask constructor parameter type.
44 template<typename T> struct CrossThreadTaskTraits { 45 template<typename T> struct CrossThreadTaskTraits {
45 typedef const T& ParamType; 46 typedef const T& ParamType;
46 }; 47 };
47 48
49 // We can copy pointer-like values.
48 template<typename T> struct CrossThreadTaskTraits<T*> { 50 template<typename T> struct CrossThreadTaskTraits<T*> {
49 typedef T* ParamType; 51 typedef T* ParamType;
50 }; 52 };
51
52 template<typename T> struct CrossThreadTaskTraits<PassRefPtr<T> > { 53 template<typename T> struct CrossThreadTaskTraits<PassRefPtr<T> > {
53 typedef PassRefPtr<T> ParamType; 54 typedef PassRefPtr<T> ParamType;
54 }; 55 };
55
56 template<typename T> struct CrossThreadTaskTraits<PassOwnPtr<T> > { 56 template<typename T> struct CrossThreadTaskTraits<PassOwnPtr<T> > {
57 typedef PassOwnPtr<T> ParamType; 57 typedef PassOwnPtr<T> ParamType;
58 }; 58 };
59
60 // FIXME: Oilpan: Using a RawPtr is not safe, because the RawPtr does not keep
61 // the pointee alive while the ExecutionContextTask holds the RawPtr.
62 //
63 // - Ideally, we want to move the ExecutionContextTask to Oilpan's heap and use a Member.
64 // However we cannot do that easily because the ExecutionContextTask outlives th e thread
65 // that created the ExecutionContextTask. Oilpan does not support objects that
66 // outlives the thread that created the objects.
67 //
68 // - It's not either easy to keep the ExecutionContextTask off-heap
69 // and use a Persistent handle. This is because the Persistent handle can cause a cycle.
70 // It's possible that the ExecutionContextTask holds a Persistent handle to the object
71 // that owns the ExecutionContextTask.
72 //
73 // Given the above, we cannot avoid using a RawPtr at the moment.
74 // It's a responsibility of the caller sites to manage the lifetime of the point ee.
75 template<typename T> struct CrossThreadTaskTraits<RawPtr<T> > { 59 template<typename T> struct CrossThreadTaskTraits<RawPtr<T> > {
76 typedef RawPtr<T> ParamType; 60 typedef RawPtr<T> ParamType;
77 }; 61 };
78 62
79 template<typename P1, typename MP1> 63 template<typename P1, typename MP1>
80 class GC_PLUGIN_IGNORE("crbug.com/378192") CrossThreadTask1 : public ExecutionCo ntextTask { 64 class CrossThreadTask1 : public ExecutionContextTask {
81 public: 65 public:
82 typedef void (*Method)(ExecutionContext*, MP1); 66 typedef void (*Method)(ExecutionContext*, MP1);
83 typedef CrossThreadTask1<P1, MP1> CrossThreadTask; 67 typedef CrossThreadTask1<P1, MP1> CrossThreadTask;
84 typedef typename CrossThreadTaskTraits<P1>::ParamType Param1; 68 typedef typename CrossThreadTaskTraits<P1>::ParamType Param1;
85 69
86 static PassOwnPtr<CrossThreadTask> create(Method method, Param1 parameter1) 70 static PassOwnPtr<CrossThreadTask> create(Method method, Param1 parameter1)
87 { 71 {
88 return adoptPtr(new CrossThreadTask(method, parameter1)); 72 return adoptPtr(new CrossThreadTask(method, parameter1));
89 } 73 }
90 74
91 private: 75 private:
92 CrossThreadTask1(Method method, Param1 parameter1) 76 CrossThreadTask1(Method method, Param1 parameter1)
93 : m_method(method) 77 : m_method(method)
94 , m_parameter1(parameter1) 78 , m_parameter1(WTF::ParamStorageTraits<P1>::wrap(parameter1))
95 { 79 {
96 } 80 }
97 81
98 virtual void performTask(ExecutionContext* context) 82 virtual void performTask(ExecutionContext* context)
99 { 83 {
100 (*m_method)(context, m_parameter1); 84 (*m_method)(context, WTF::ParamStorageTraits<P1>::unwrap(m_parameter1));
101 } 85 }
102 86
103 private: 87 private:
104 Method m_method; 88 Method m_method;
105 P1 m_parameter1; 89 typename WTF::ParamStorageTraits<P1>::StorageType m_parameter1;
106 }; 90 };
107 91
108 template<typename P1, typename MP1, typename P2, typename MP2> 92 template<typename P1, typename MP1, typename P2, typename MP2>
109 class GC_PLUGIN_IGNORE("crbug.com/378192") CrossThreadTask2 : public ExecutionCo ntextTask { 93 class CrossThreadTask2 : public ExecutionContextTask {
110 public: 94 public:
111 typedef void (*Method)(ExecutionContext*, MP1, MP2); 95 typedef void (*Method)(ExecutionContext*, MP1, MP2);
112 typedef CrossThreadTask2<P1, MP1, P2, MP2> CrossThreadTask; 96 typedef CrossThreadTask2<P1, MP1, P2, MP2> CrossThreadTask;
113 typedef typename CrossThreadTaskTraits<P1>::ParamType Param1; 97 typedef typename CrossThreadTaskTraits<P1>::ParamType Param1;
114 typedef typename CrossThreadTaskTraits<P2>::ParamType Param2; 98 typedef typename CrossThreadTaskTraits<P2>::ParamType Param2;
115 99
116 static PassOwnPtr<CrossThreadTask> create(Method method, Param1 parameter1, Param2 parameter2) 100 static PassOwnPtr<CrossThreadTask> create(Method method, Param1 parameter1, Param2 parameter2)
117 { 101 {
118 return adoptPtr(new CrossThreadTask(method, parameter1, parameter2)); 102 return adoptPtr(new CrossThreadTask(method, parameter1, parameter2));
119 } 103 }
120 104
121 private: 105 private:
122 CrossThreadTask2(Method method, Param1 parameter1, Param2 parameter2) 106 CrossThreadTask2(Method method, Param1 parameter1, Param2 parameter2)
123 : m_method(method) 107 : m_method(method)
124 , m_parameter1(parameter1) 108 , m_parameter1(WTF::ParamStorageTraits<P1>::wrap(parameter1))
125 , m_parameter2(parameter2) 109 , m_parameter2(WTF::ParamStorageTraits<P2>::wrap(parameter2))
126 { 110 {
127 } 111 }
128 112
129 virtual void performTask(ExecutionContext* context) 113 virtual void performTask(ExecutionContext* context)
130 { 114 {
131 (*m_method)(context, m_parameter1, m_parameter2); 115 (*m_method)(context,
116 WTF::ParamStorageTraits<P1>::unwrap(m_parameter1),
117 WTF::ParamStorageTraits<P2>::unwrap(m_parameter2));
132 } 118 }
133 119
134 private: 120 private:
135 Method m_method; 121 Method m_method;
136 P1 m_parameter1; 122 typename WTF::ParamStorageTraits<P1>::StorageType m_parameter1;
137 P2 m_parameter2; 123 typename WTF::ParamStorageTraits<P2>::StorageType m_parameter2;
138 }; 124 };
139 125
140 template<typename P1, typename MP1, typename P2, typename MP2, typename P3, type name MP3> 126 template<typename P1, typename MP1, typename P2, typename MP2, typename P3, type name MP3>
141 class GC_PLUGIN_IGNORE("crbug.com/378192") CrossThreadTask3 : public ExecutionCo ntextTask { 127 class CrossThreadTask3 : public ExecutionContextTask {
142 public: 128 public:
143 typedef void (*Method)(ExecutionContext*, MP1, MP2, MP3); 129 typedef void (*Method)(ExecutionContext*, MP1, MP2, MP3);
144 typedef CrossThreadTask3<P1, MP1, P2, MP2, P3, MP3> CrossThreadTask; 130 typedef CrossThreadTask3<P1, MP1, P2, MP2, P3, MP3> CrossThreadTask;
145 typedef typename CrossThreadTaskTraits<P1>::ParamType Param1; 131 typedef typename CrossThreadTaskTraits<P1>::ParamType Param1;
146 typedef typename CrossThreadTaskTraits<P2>::ParamType Param2; 132 typedef typename CrossThreadTaskTraits<P2>::ParamType Param2;
147 typedef typename CrossThreadTaskTraits<P3>::ParamType Param3; 133 typedef typename CrossThreadTaskTraits<P3>::ParamType Param3;
148 134
149 static PassOwnPtr<CrossThreadTask> create(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3) 135 static PassOwnPtr<CrossThreadTask> create(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3)
150 { 136 {
151 return adoptPtr(new CrossThreadTask(method, parameter1, parameter2, para meter3)); 137 return adoptPtr(new CrossThreadTask(method, parameter1, parameter2, para meter3));
152 } 138 }
153 139
154 private: 140 private:
155 CrossThreadTask3(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3) 141 CrossThreadTask3(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3)
156 : m_method(method) 142 : m_method(method)
157 , m_parameter1(parameter1) 143 , m_parameter1(WTF::ParamStorageTraits<P1>::wrap(parameter1))
158 , m_parameter2(parameter2) 144 , m_parameter2(WTF::ParamStorageTraits<P2>::wrap(parameter2))
159 , m_parameter3(parameter3) 145 , m_parameter3(WTF::ParamStorageTraits<P3>::wrap(parameter3))
160 { 146 {
161 } 147 }
162 148
163 virtual void performTask(ExecutionContext* context) 149 virtual void performTask(ExecutionContext* context)
164 { 150 {
165 (*m_method)(context, m_parameter1, m_parameter2, m_parameter3); 151 (*m_method)(context,
152 WTF::ParamStorageTraits<P1>::unwrap(m_parameter1),
153 WTF::ParamStorageTraits<P2>::unwrap(m_parameter2),
154 WTF::ParamStorageTraits<P3>::unwrap(m_parameter3));
166 } 155 }
167 156
168 private: 157 private:
169 Method m_method; 158 Method m_method;
170 P1 m_parameter1; 159 typename WTF::ParamStorageTraits<P1>::StorageType m_parameter1;
171 P2 m_parameter2; 160 typename WTF::ParamStorageTraits<P2>::StorageType m_parameter2;
172 P3 m_parameter3; 161 typename WTF::ParamStorageTraits<P3>::StorageType m_parameter3;
173 }; 162 };
174 163
175 template<typename P1, typename MP1, typename P2, typename MP2, typename P3, type name MP3, typename P4, typename MP4> 164 template<typename P1, typename MP1, typename P2, typename MP2, typename P3, type name MP3, typename P4, typename MP4>
176 class GC_PLUGIN_IGNORE("crbug.com/378192") CrossThreadTask4 : public ExecutionCo ntextTask { 165 class CrossThreadTask4 : public ExecutionContextTask {
177 public: 166 public:
178 typedef void (*Method)(ExecutionContext*, MP1, MP2, MP3, MP4); 167 typedef void (*Method)(ExecutionContext*, MP1, MP2, MP3, MP4);
179 typedef CrossThreadTask4<P1, MP1, P2, MP2, P3, MP3, P4, MP4> CrossThreadTask ; 168 typedef CrossThreadTask4<P1, MP1, P2, MP2, P3, MP3, P4, MP4> CrossThreadTask ;
180 typedef typename CrossThreadTaskTraits<P1>::ParamType Param1; 169 typedef typename CrossThreadTaskTraits<P1>::ParamType Param1;
181 typedef typename CrossThreadTaskTraits<P2>::ParamType Param2; 170 typedef typename CrossThreadTaskTraits<P2>::ParamType Param2;
182 typedef typename CrossThreadTaskTraits<P3>::ParamType Param3; 171 typedef typename CrossThreadTaskTraits<P3>::ParamType Param3;
183 typedef typename CrossThreadTaskTraits<P4>::ParamType Param4; 172 typedef typename CrossThreadTaskTraits<P4>::ParamType Param4;
184 173
185 static PassOwnPtr<CrossThreadTask> create(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4) 174 static PassOwnPtr<CrossThreadTask> create(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4)
186 { 175 {
187 return adoptPtr(new CrossThreadTask(method, parameter1, parameter2, para meter3, parameter4)); 176 return adoptPtr(new CrossThreadTask(method, parameter1, parameter2, para meter3, parameter4));
188 } 177 }
189 178
190 private: 179 private:
191 CrossThreadTask4(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4) 180 CrossThreadTask4(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4)
192 : m_method(method) 181 : m_method(method)
193 , m_parameter1(parameter1) 182 , m_parameter1(WTF::ParamStorageTraits<P1>::wrap(parameter1))
194 , m_parameter2(parameter2) 183 , m_parameter2(WTF::ParamStorageTraits<P2>::wrap(parameter2))
195 , m_parameter3(parameter3) 184 , m_parameter3(WTF::ParamStorageTraits<P3>::wrap(parameter3))
196 , m_parameter4(parameter4) 185 , m_parameter4(WTF::ParamStorageTraits<P4>::wrap(parameter4))
197 { 186 {
198 } 187 }
199 188
200 virtual void performTask(ExecutionContext* context) 189 virtual void performTask(ExecutionContext* context)
201 { 190 {
202 (*m_method)(context, m_parameter1, m_parameter2, m_parameter3, m_paramet er4); 191 (*m_method)(context,
192 WTF::ParamStorageTraits<P1>::unwrap(m_parameter1),
193 WTF::ParamStorageTraits<P2>::unwrap(m_parameter2),
194 WTF::ParamStorageTraits<P3>::unwrap(m_parameter3),
195 WTF::ParamStorageTraits<P4>::unwrap(m_parameter4));
203 } 196 }
204 197
205 private: 198 private:
206 Method m_method; 199 Method m_method;
207 P1 m_parameter1; 200 typename WTF::ParamStorageTraits<P1>::StorageType m_parameter1;
208 P2 m_parameter2; 201 typename WTF::ParamStorageTraits<P2>::StorageType m_parameter2;
209 P3 m_parameter3; 202 typename WTF::ParamStorageTraits<P3>::StorageType m_parameter3;
210 P4 m_parameter4; 203 typename WTF::ParamStorageTraits<P4>::StorageType m_parameter4;
211 }; 204 };
212 205
213 template<typename P1, typename MP1, typename P2, typename MP2, typename P3, type name MP3, typename P4, typename MP4, typename P5, typename MP5> 206 template<typename P1, typename MP1, typename P2, typename MP2, typename P3, type name MP3, typename P4, typename MP4, typename P5, typename MP5>
214 class GC_PLUGIN_IGNORE("crbug.com/378192") CrossThreadTask5 : public ExecutionCo ntextTask { 207 class CrossThreadTask5 : public ExecutionContextTask {
215 public: 208 public:
216 typedef void (*Method)(ExecutionContext*, MP1, MP2, MP3, MP4, MP5); 209 typedef void (*Method)(ExecutionContext*, MP1, MP2, MP3, MP4, MP5);
217 typedef CrossThreadTask5<P1, MP1, P2, MP2, P3, MP3, P4, MP4, P5, MP5> CrossT hreadTask; 210 typedef CrossThreadTask5<P1, MP1, P2, MP2, P3, MP3, P4, MP4, P5, MP5> CrossT hreadTask;
218 typedef typename CrossThreadTaskTraits<P1>::ParamType Param1; 211 typedef typename CrossThreadTaskTraits<P1>::ParamType Param1;
219 typedef typename CrossThreadTaskTraits<P2>::ParamType Param2; 212 typedef typename CrossThreadTaskTraits<P2>::ParamType Param2;
220 typedef typename CrossThreadTaskTraits<P3>::ParamType Param3; 213 typedef typename CrossThreadTaskTraits<P3>::ParamType Param3;
221 typedef typename CrossThreadTaskTraits<P4>::ParamType Param4; 214 typedef typename CrossThreadTaskTraits<P4>::ParamType Param4;
222 typedef typename CrossThreadTaskTraits<P5>::ParamType Param5; 215 typedef typename CrossThreadTaskTraits<P5>::ParamType Param5;
223 216
224 static PassOwnPtr<CrossThreadTask> create(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5) 217 static PassOwnPtr<CrossThreadTask> create(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5)
225 { 218 {
226 return adoptPtr(new CrossThreadTask(method, parameter1, parameter2, para meter3, parameter4, parameter5)); 219 return adoptPtr(new CrossThreadTask(method, parameter1, parameter2, para meter3, parameter4, parameter5));
227 } 220 }
228 221
229 private: 222 private:
230 CrossThreadTask5(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5) 223 CrossThreadTask5(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5)
231 : m_method(method) 224 : m_method(method)
232 , m_parameter1(parameter1) 225 , m_parameter1(WTF::ParamStorageTraits<P1>::wrap(parameter1))
233 , m_parameter2(parameter2) 226 , m_parameter2(WTF::ParamStorageTraits<P2>::wrap(parameter2))
234 , m_parameter3(parameter3) 227 , m_parameter3(WTF::ParamStorageTraits<P3>::wrap(parameter3))
235 , m_parameter4(parameter4) 228 , m_parameter4(WTF::ParamStorageTraits<P4>::wrap(parameter4))
236 , m_parameter5(parameter5) 229 , m_parameter5(WTF::ParamStorageTraits<P5>::wrap(parameter5))
237 { 230 {
238 } 231 }
239 232
240 virtual void performTask(ExecutionContext* context) 233 virtual void performTask(ExecutionContext* context)
241 { 234 {
242 (*m_method)(context, m_parameter1, m_parameter2, m_parameter3, m_paramet er4, m_parameter5); 235 (*m_method)(context,
236 WTF::ParamStorageTraits<P1>::unwrap(m_parameter1),
237 WTF::ParamStorageTraits<P2>::unwrap(m_parameter2),
238 WTF::ParamStorageTraits<P3>::unwrap(m_parameter3),
239 WTF::ParamStorageTraits<P4>::unwrap(m_parameter4),
240 WTF::ParamStorageTraits<P5>::unwrap(m_parameter5));
243 } 241 }
244 242
245 private: 243 private:
246 Method m_method; 244 Method m_method;
247 P1 m_parameter1; 245 typename WTF::ParamStorageTraits<P1>::StorageType m_parameter1;
248 P2 m_parameter2; 246 typename WTF::ParamStorageTraits<P2>::StorageType m_parameter2;
249 P3 m_parameter3; 247 typename WTF::ParamStorageTraits<P3>::StorageType m_parameter3;
250 P4 m_parameter4; 248 typename WTF::ParamStorageTraits<P4>::StorageType m_parameter4;
251 P5 m_parameter5; 249 typename WTF::ParamStorageTraits<P5>::StorageType m_parameter5;
252 }; 250 };
253 251
254 template<typename P1, typename MP1, typename P2, typename MP2, typename P3, type name MP3, typename P4, typename MP4, typename P5, typename MP5, typename P6, typ ename MP6> 252 template<typename P1, typename MP1, typename P2, typename MP2, typename P3, type name MP3, typename P4, typename MP4, typename P5, typename MP5, typename P6, typ ename MP6>
255 class GC_PLUGIN_IGNORE("crbug.com/378192") CrossThreadTask6 : public ExecutionCo ntextTask { 253 class CrossThreadTask6 : public ExecutionContextTask {
256 public: 254 public:
257 typedef void (*Method)(ExecutionContext*, MP1, MP2, MP3, MP4, MP5, MP6); 255 typedef void (*Method)(ExecutionContext*, MP1, MP2, MP3, MP4, MP5, MP6);
258 typedef CrossThreadTask6<P1, MP1, P2, MP2, P3, MP3, P4, MP4, P5, MP5, P6, MP 6> CrossThreadTask; 256 typedef CrossThreadTask6<P1, MP1, P2, MP2, P3, MP3, P4, MP4, P5, MP5, P6, MP 6> CrossThreadTask;
259 typedef typename CrossThreadTaskTraits<P1>::ParamType Param1; 257 typedef typename CrossThreadTaskTraits<P1>::ParamType Param1;
260 typedef typename CrossThreadTaskTraits<P2>::ParamType Param2; 258 typedef typename CrossThreadTaskTraits<P2>::ParamType Param2;
261 typedef typename CrossThreadTaskTraits<P3>::ParamType Param3; 259 typedef typename CrossThreadTaskTraits<P3>::ParamType Param3;
262 typedef typename CrossThreadTaskTraits<P4>::ParamType Param4; 260 typedef typename CrossThreadTaskTraits<P4>::ParamType Param4;
263 typedef typename CrossThreadTaskTraits<P5>::ParamType Param5; 261 typedef typename CrossThreadTaskTraits<P5>::ParamType Param5;
264 typedef typename CrossThreadTaskTraits<P6>::ParamType Param6; 262 typedef typename CrossThreadTaskTraits<P6>::ParamType Param6;
265 263
266 static PassOwnPtr<CrossThreadTask> create(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5, Para m6 parameter6) 264 static PassOwnPtr<CrossThreadTask> create(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5, Para m6 parameter6)
267 { 265 {
268 return adoptPtr(new CrossThreadTask(method, parameter1, parameter2, para meter3, parameter4, parameter5, parameter6)); 266 return adoptPtr(new CrossThreadTask(method, parameter1, parameter2, para meter3, parameter4, parameter5, parameter6));
269 } 267 }
270 268
271 private: 269 private:
272 CrossThreadTask6(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5, Param6 parameter6) 270 CrossThreadTask6(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5, Param6 parameter6)
273 : m_method(method) 271 : m_method(method)
274 , m_parameter1(parameter1) 272 , m_parameter1(WTF::ParamStorageTraits<P1>::wrap(parameter1))
275 , m_parameter2(parameter2) 273 , m_parameter2(WTF::ParamStorageTraits<P2>::wrap(parameter2))
276 , m_parameter3(parameter3) 274 , m_parameter3(WTF::ParamStorageTraits<P3>::wrap(parameter3))
277 , m_parameter4(parameter4) 275 , m_parameter4(WTF::ParamStorageTraits<P4>::wrap(parameter4))
278 , m_parameter5(parameter5) 276 , m_parameter5(WTF::ParamStorageTraits<P5>::wrap(parameter5))
279 , m_parameter6(parameter6) 277 , m_parameter6(WTF::ParamStorageTraits<P6>::wrap(parameter6))
280 { 278 {
281 } 279 }
282 280
283 virtual void performTask(ExecutionContext* context) 281 virtual void performTask(ExecutionContext* context)
284 { 282 {
285 (*m_method)(context, m_parameter1, m_parameter2, m_parameter3, m_paramet er4, m_parameter5, m_parameter6); 283 (*m_method)(context,
284 WTF::ParamStorageTraits<P1>::unwrap(m_parameter1),
285 WTF::ParamStorageTraits<P2>::unwrap(m_parameter2),
286 WTF::ParamStorageTraits<P3>::unwrap(m_parameter3),
287 WTF::ParamStorageTraits<P4>::unwrap(m_parameter4),
288 WTF::ParamStorageTraits<P5>::unwrap(m_parameter5),
289 WTF::ParamStorageTraits<P6>::unwrap(m_parameter6));
286 } 290 }
287 291
288 private: 292 private:
289 Method m_method; 293 Method m_method;
290 P1 m_parameter1; 294 typename WTF::ParamStorageTraits<P1>::StorageType m_parameter1;
291 P2 m_parameter2; 295 typename WTF::ParamStorageTraits<P2>::StorageType m_parameter2;
292 P3 m_parameter3; 296 typename WTF::ParamStorageTraits<P3>::StorageType m_parameter3;
293 P4 m_parameter4; 297 typename WTF::ParamStorageTraits<P4>::StorageType m_parameter4;
294 P5 m_parameter5; 298 typename WTF::ParamStorageTraits<P5>::StorageType m_parameter5;
295 P6 m_parameter6; 299 typename WTF::ParamStorageTraits<P6>::StorageType m_parameter6;
296 }; 300 };
297 301
298 template<typename P1, typename MP1, typename P2, typename MP2, typename P3, type name MP3, typename P4, typename MP4, typename P5, typename MP5, typename P6, typ ename MP6, typename P7, typename MP7> 302 template<typename P1, typename MP1, typename P2, typename MP2, typename P3, type name MP3, typename P4, typename MP4, typename P5, typename MP5, typename P6, typ ename MP6, typename P7, typename MP7>
299 class GC_PLUGIN_IGNORE("crbug.com/378192") CrossThreadTask7 : public ExecutionCo ntextTask { 303 class CrossThreadTask7 : public ExecutionContextTask {
300 public: 304 public:
301 typedef void (*Method)(ExecutionContext*, MP1, MP2, MP3, MP4, MP5, MP6, MP7) ; 305 typedef void (*Method)(ExecutionContext*, MP1, MP2, MP3, MP4, MP5, MP6, MP7) ;
302 typedef CrossThreadTask7<P1, MP1, P2, MP2, P3, MP3, P4, MP4, P5, MP5, P6, MP 6, P7, MP7> CrossThreadTask; 306 typedef CrossThreadTask7<P1, MP1, P2, MP2, P3, MP3, P4, MP4, P5, MP5, P6, MP 6, P7, MP7> CrossThreadTask;
303 typedef typename CrossThreadTaskTraits<P1>::ParamType Param1; 307 typedef typename CrossThreadTaskTraits<P1>::ParamType Param1;
304 typedef typename CrossThreadTaskTraits<P2>::ParamType Param2; 308 typedef typename CrossThreadTaskTraits<P2>::ParamType Param2;
305 typedef typename CrossThreadTaskTraits<P3>::ParamType Param3; 309 typedef typename CrossThreadTaskTraits<P3>::ParamType Param3;
306 typedef typename CrossThreadTaskTraits<P4>::ParamType Param4; 310 typedef typename CrossThreadTaskTraits<P4>::ParamType Param4;
307 typedef typename CrossThreadTaskTraits<P5>::ParamType Param5; 311 typedef typename CrossThreadTaskTraits<P5>::ParamType Param5;
308 typedef typename CrossThreadTaskTraits<P6>::ParamType Param6; 312 typedef typename CrossThreadTaskTraits<P6>::ParamType Param6;
309 typedef typename CrossThreadTaskTraits<P7>::ParamType Param7; 313 typedef typename CrossThreadTaskTraits<P7>::ParamType Param7;
310 314
311 static PassOwnPtr<CrossThreadTask> create(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5, Para m6 parameter6, Param7 parameter7) 315 static PassOwnPtr<CrossThreadTask> create(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5, Para m6 parameter6, Param7 parameter7)
312 { 316 {
313 return adoptPtr(new CrossThreadTask(method, parameter1, parameter2, para meter3, parameter4, parameter5, parameter6, parameter7)); 317 return adoptPtr(new CrossThreadTask(method, parameter1, parameter2, para meter3, parameter4, parameter5, parameter6, parameter7));
314 } 318 }
315 319
316 private: 320 private:
317 CrossThreadTask7(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5, Param6 parameter6, Param7 par ameter7) 321 CrossThreadTask7(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5, Param6 parameter6, Param7 par ameter7)
318 : m_method(method) 322 : m_method(method)
319 , m_parameter1(parameter1) 323 , m_parameter1(WTF::ParamStorageTraits<P1>::wrap(parameter1))
320 , m_parameter2(parameter2) 324 , m_parameter2(WTF::ParamStorageTraits<P2>::wrap(parameter2))
321 , m_parameter3(parameter3) 325 , m_parameter3(WTF::ParamStorageTraits<P3>::wrap(parameter3))
322 , m_parameter4(parameter4) 326 , m_parameter4(WTF::ParamStorageTraits<P4>::wrap(parameter4))
323 , m_parameter5(parameter5) 327 , m_parameter5(WTF::ParamStorageTraits<P5>::wrap(parameter5))
324 , m_parameter6(parameter6) 328 , m_parameter6(WTF::ParamStorageTraits<P6>::wrap(parameter6))
325 , m_parameter7(parameter7) 329 , m_parameter7(WTF::ParamStorageTraits<P7>::wrap(parameter7))
326 { 330 {
327 } 331 }
328 332
329 virtual void performTask(ExecutionContext* context) 333 virtual void performTask(ExecutionContext* context)
330 { 334 {
331 (*m_method)(context, m_parameter1, m_parameter2, m_parameter3, m_paramet er4, m_parameter5, m_parameter6, m_parameter7); 335 (*m_method)(context,
336 WTF::ParamStorageTraits<P1>::unwrap(m_parameter1),
337 WTF::ParamStorageTraits<P2>::unwrap(m_parameter2),
338 WTF::ParamStorageTraits<P3>::unwrap(m_parameter3),
339 WTF::ParamStorageTraits<P4>::unwrap(m_parameter4),
340 WTF::ParamStorageTraits<P5>::unwrap(m_parameter5),
341 WTF::ParamStorageTraits<P6>::unwrap(m_parameter6),
342 WTF::ParamStorageTraits<P7>::unwrap(m_parameter7));
332 } 343 }
333 344
334 private: 345 private:
335 Method m_method; 346 Method m_method;
336 P1 m_parameter1; 347 typename WTF::ParamStorageTraits<P1>::StorageType m_parameter1;
337 P2 m_parameter2; 348 typename WTF::ParamStorageTraits<P2>::StorageType m_parameter2;
338 P3 m_parameter3; 349 typename WTF::ParamStorageTraits<P3>::StorageType m_parameter3;
339 P4 m_parameter4; 350 typename WTF::ParamStorageTraits<P4>::StorageType m_parameter4;
340 P5 m_parameter5; 351 typename WTF::ParamStorageTraits<P5>::StorageType m_parameter5;
341 P6 m_parameter6; 352 typename WTF::ParamStorageTraits<P6>::StorageType m_parameter6;
342 P7 m_parameter7; 353 typename WTF::ParamStorageTraits<P7>::StorageType m_parameter7;
343 }; 354 };
344 355
345 template<typename P1, typename MP1, typename P2, typename MP2, typename P3, type name MP3, typename P4, typename MP4, typename P5, typename MP5, typename P6, typ ename MP6, typename P7, typename MP7, typename P8, typename MP8> 356 template<typename P1, typename MP1, typename P2, typename MP2, typename P3, type name MP3, typename P4, typename MP4, typename P5, typename MP5, typename P6, typ ename MP6, typename P7, typename MP7, typename P8, typename MP8>
346 class GC_PLUGIN_IGNORE("crbug.com/378192") CrossThreadTask8 : public ExecutionCo ntextTask { 357 class CrossThreadTask8 : public ExecutionContextTask {
347 public: 358 public:
348 typedef void (*Method)(ExecutionContext*, MP1, MP2, MP3, MP4, MP5, MP6, MP7, MP8); 359 typedef void (*Method)(ExecutionContext*, MP1, MP2, MP3, MP4, MP5, MP6, MP7, MP8);
349 typedef CrossThreadTask8<P1, MP1, P2, MP2, P3, MP3, P4, MP4, P5, MP5, P6, MP 6, P7, MP7, P8, MP8> CrossThreadTask; 360 typedef CrossThreadTask8<P1, MP1, P2, MP2, P3, MP3, P4, MP4, P5, MP5, P6, MP 6, P7, MP7, P8, MP8> CrossThreadTask;
350 typedef typename CrossThreadTaskTraits<P1>::ParamType Param1; 361 typedef typename CrossThreadTaskTraits<P1>::ParamType Param1;
351 typedef typename CrossThreadTaskTraits<P2>::ParamType Param2; 362 typedef typename CrossThreadTaskTraits<P2>::ParamType Param2;
352 typedef typename CrossThreadTaskTraits<P3>::ParamType Param3; 363 typedef typename CrossThreadTaskTraits<P3>::ParamType Param3;
353 typedef typename CrossThreadTaskTraits<P4>::ParamType Param4; 364 typedef typename CrossThreadTaskTraits<P4>::ParamType Param4;
354 typedef typename CrossThreadTaskTraits<P5>::ParamType Param5; 365 typedef typename CrossThreadTaskTraits<P5>::ParamType Param5;
355 typedef typename CrossThreadTaskTraits<P6>::ParamType Param6; 366 typedef typename CrossThreadTaskTraits<P6>::ParamType Param6;
356 typedef typename CrossThreadTaskTraits<P7>::ParamType Param7; 367 typedef typename CrossThreadTaskTraits<P7>::ParamType Param7;
357 typedef typename CrossThreadTaskTraits<P8>::ParamType Param8; 368 typedef typename CrossThreadTaskTraits<P8>::ParamType Param8;
358 369
359 static PassOwnPtr<CrossThreadTask> create(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5, Para m6 parameter6, Param7 parameter7, Param8 parameter8) 370 static PassOwnPtr<CrossThreadTask> create(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5, Para m6 parameter6, Param7 parameter7, Param8 parameter8)
360 { 371 {
361 return adoptPtr(new CrossThreadTask(method, parameter1, parameter2, para meter3, parameter4, parameter5, parameter6, parameter7, parameter8)); 372 return adoptPtr(new CrossThreadTask(method, parameter1, parameter2, para meter3, parameter4, parameter5, parameter6, parameter7, parameter8));
362 } 373 }
363 374
364 private: 375 private:
365 CrossThreadTask8(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5, Param6 parameter6, Param7 par ameter7, Param8 parameter8) 376 CrossThreadTask8(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5, Param6 parameter6, Param7 par ameter7, Param8 parameter8)
366 : m_method(method) 377 : m_method(method)
367 , m_parameter1(parameter1) 378 , m_parameter1(WTF::ParamStorageTraits<P1>::wrap(parameter1))
368 , m_parameter2(parameter2) 379 , m_parameter2(WTF::ParamStorageTraits<P2>::wrap(parameter2))
369 , m_parameter3(parameter3) 380 , m_parameter3(WTF::ParamStorageTraits<P3>::wrap(parameter3))
370 , m_parameter4(parameter4) 381 , m_parameter4(WTF::ParamStorageTraits<P4>::wrap(parameter4))
371 , m_parameter5(parameter5) 382 , m_parameter5(WTF::ParamStorageTraits<P5>::wrap(parameter5))
372 , m_parameter6(parameter6) 383 , m_parameter6(WTF::ParamStorageTraits<P6>::wrap(parameter6))
373 , m_parameter7(parameter7) 384 , m_parameter7(WTF::ParamStorageTraits<P7>::wrap(parameter7))
374 , m_parameter8(parameter8) 385 , m_parameter8(WTF::ParamStorageTraits<P8>::wrap(parameter8))
375 { 386 {
376 } 387 }
377 388
378 virtual void performTask(ExecutionContext* context) 389 virtual void performTask(ExecutionContext* context)
379 { 390 {
380 (*m_method)(context, m_parameter1, m_parameter2, m_parameter3, m_paramet er4, m_parameter5, m_parameter6, m_parameter7, m_parameter8); 391 (*m_method)(context,
392 WTF::ParamStorageTraits<P1>::unwrap(m_parameter1),
393 WTF::ParamStorageTraits<P2>::unwrap(m_parameter2),
394 WTF::ParamStorageTraits<P3>::unwrap(m_parameter3),
395 WTF::ParamStorageTraits<P4>::unwrap(m_parameter4),
396 WTF::ParamStorageTraits<P5>::unwrap(m_parameter5),
397 WTF::ParamStorageTraits<P6>::unwrap(m_parameter6),
398 WTF::ParamStorageTraits<P7>::unwrap(m_parameter7),
399 WTF::ParamStorageTraits<P8>::unwrap(m_parameter8));
381 } 400 }
382 401
383 private: 402 private:
384 Method m_method; 403 Method m_method;
385 P1 m_parameter1; 404 typename WTF::ParamStorageTraits<P1>::StorageType m_parameter1;
386 P2 m_parameter2; 405 typename WTF::ParamStorageTraits<P2>::StorageType m_parameter2;
387 P3 m_parameter3; 406 typename WTF::ParamStorageTraits<P3>::StorageType m_parameter3;
388 P4 m_parameter4; 407 typename WTF::ParamStorageTraits<P4>::StorageType m_parameter4;
389 P5 m_parameter5; 408 typename WTF::ParamStorageTraits<P5>::StorageType m_parameter5;
390 P6 m_parameter6; 409 typename WTF::ParamStorageTraits<P6>::StorageType m_parameter6;
391 P7 m_parameter7; 410 typename WTF::ParamStorageTraits<P7>::StorageType m_parameter7;
392 P8 m_parameter8; 411 typename WTF::ParamStorageTraits<P8>::StorageType m_parameter8;
393 }; 412 };
394 413
395 template<typename P1, typename MP1> 414 template<typename P1, typename MP1>
396 PassOwnPtr<ExecutionContextTask> createCrossThreadTask( 415 PassOwnPtr<ExecutionContextTask> createCrossThreadTask(
397 void (*method)(ExecutionContext*, MP1), 416 void (*method)(ExecutionContext*, MP1),
398 const P1& parameter1) 417 const P1& parameter1)
399 { 418 {
400 return CrossThreadTask1<typename CrossThreadCopier<P1>::Type, MP1>::create( 419 return CrossThreadTask1<typename CrossThreadCopier<P1>::Type, MP1>::create(
401 method, 420 method,
402 CrossThreadCopier<P1>::copy(parameter1)); 421 CrossThreadCopier<P1>::copy(parameter1));
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
726 CrossThreadCopier<P2>::copy(parameter2), 745 CrossThreadCopier<P2>::copy(parameter2),
727 CrossThreadCopier<P3>::copy(parameter3), 746 CrossThreadCopier<P3>::copy(parameter3),
728 CrossThreadCopier<P4>::copy(parameter4), 747 CrossThreadCopier<P4>::copy(parameter4),
729 CrossThreadCopier<P5>::copy(parameter5), 748 CrossThreadCopier<P5>::copy(parameter5),
730 CrossThreadCopier<P6>::copy(parameter6))); 749 CrossThreadCopier<P6>::copy(parameter6)));
731 } 750 }
732 751
733 } // namespace blink 752 } // namespace blink
734 753
735 #endif // CrossThreadTask_h 754 #endif // CrossThreadTask_h
OLDNEW
« no previous file with comments | « Source/core/core.gypi ('k') | Source/core/dom/CrossThreadTaskTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698