OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef PPAPI_SHARED_IMPL_PROXY_LOCK_H_ | 5 #ifndef PPAPI_SHARED_IMPL_PROXY_LOCK_H_ |
6 #define PPAPI_SHARED_IMPL_PROXY_LOCK_H_ | 6 #define PPAPI_SHARED_IMPL_PROXY_LOCK_H_ |
7 | 7 |
8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/callback.h" | 10 #include "base/callback.h" |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
110 // | 110 // |
111 // Example usage: | 111 // Example usage: |
112 // *result = CallWhileUnlocked(ppp_input_event_impl_->HandleInputEvent, | 112 // *result = CallWhileUnlocked(ppp_input_event_impl_->HandleInputEvent, |
113 // instance, | 113 // instance, |
114 // resource->pp_resource()); | 114 // resource->pp_resource()); |
115 template <class ReturnType> | 115 template <class ReturnType> |
116 ReturnType CallWhileUnlocked(ReturnType (*function)()) { | 116 ReturnType CallWhileUnlocked(ReturnType (*function)()) { |
117 ProxyAutoUnlock unlock; | 117 ProxyAutoUnlock unlock; |
118 return function(); | 118 return function(); |
119 } | 119 } |
120 template <class ReturnType, class P1> | 120 // Note we use 2 types for the params, even though for the most part we expect |
121 ReturnType CallWhileUnlocked(ReturnType (*function)(P1), const P1& p1) { | 121 // A1 to match P1. We let the compiler determine if P1 can convert safely to |
| 122 // A1. This allows callers to avoid having to do things like |
| 123 // const_cast to add const. |
| 124 template <class ReturnType, class A1, class P1> |
| 125 ReturnType CallWhileUnlocked(ReturnType (*function)(A1), const P1& p1) { |
122 ProxyAutoUnlock unlock; | 126 ProxyAutoUnlock unlock; |
123 return function(p1); | 127 return function(p1); |
124 } | 128 } |
125 template <class ReturnType, class P1, class P2> | 129 template <class ReturnType, class A1, class A2, class P1, class P2> |
126 ReturnType CallWhileUnlocked(ReturnType (*function)(P1, P2), | 130 ReturnType CallWhileUnlocked(ReturnType (*function)(A1, A2), |
127 const P1& p1, | 131 const P1& p1, |
128 const P2& p2) { | 132 const P2& p2) { |
129 ProxyAutoUnlock unlock; | 133 ProxyAutoUnlock unlock; |
130 return function(p1, p2); | 134 return function(p1, p2); |
131 } | 135 } |
132 template <class ReturnType, class P1, class P2, class P3> | 136 template <class ReturnType, class A1, class A2, class A3, class P1, class P2, |
133 ReturnType CallWhileUnlocked(ReturnType (*function)(P1, P2, P3), | 137 class P3> |
| 138 ReturnType CallWhileUnlocked(ReturnType (*function)(A1, A2, A3), |
134 const P1& p1, | 139 const P1& p1, |
135 const P2& p2, | 140 const P2& p2, |
136 const P3& p3) { | 141 const P3& p3) { |
137 ProxyAutoUnlock unlock; | 142 ProxyAutoUnlock unlock; |
138 return function(p1, p2, p3); | 143 return function(p1, p2, p3); |
139 } | 144 } |
140 template <class ReturnType, class P1, class P2, class P3, class P4> | 145 template <class ReturnType, class A1, class A2, class A3, class A4, class P1, |
141 ReturnType CallWhileUnlocked(ReturnType (*function)(P1, P2, P3, P4), | 146 class P2, class P3, class P4> |
| 147 ReturnType CallWhileUnlocked(ReturnType (*function)(A1, A2, A3, A4), |
142 const P1& p1, | 148 const P1& p1, |
143 const P2& p2, | 149 const P2& p2, |
144 const P3& p3, | 150 const P3& p3, |
145 const P4& p4) { | 151 const P4& p4) { |
146 ProxyAutoUnlock unlock; | 152 ProxyAutoUnlock unlock; |
147 return function(p1, p2, p3, p4); | 153 return function(p1, p2, p3, p4); |
148 } | 154 } |
149 template <class ReturnType, class P1, class P2, class P3, class P4, class P5> | 155 template <class ReturnType, class A1, class A2, class A3, class A4, class A5, |
150 ReturnType CallWhileUnlocked(ReturnType (*function)(P1, P2, P3, P4, P5), | 156 class P1, class P2, class P3, class P4, class P5> |
| 157 ReturnType CallWhileUnlocked(ReturnType (*function)(A1, A2, A3, A4, A5), |
151 const P1& p1, | 158 const P1& p1, |
152 const P2& p2, | 159 const P2& p2, |
153 const P3& p3, | 160 const P3& p3, |
154 const P4& p4, | 161 const P4& p4, |
155 const P5& p5) { | 162 const P5& p5) { |
156 ProxyAutoUnlock unlock; | 163 ProxyAutoUnlock unlock; |
157 return function(p1, p2, p3, p4, p5); | 164 return function(p1, p2, p3, p4, p5); |
158 } | 165 } |
159 void PPAPI_SHARED_EXPORT CallWhileUnlocked(const base::Closure& closure); | 166 void PPAPI_SHARED_EXPORT CallWhileUnlocked(const base::Closure& closure); |
160 | 167 |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
352 internal::RunWhileLockedHelper<FunctionType>* helper = | 359 internal::RunWhileLockedHelper<FunctionType>* helper = |
353 new internal::RunWhileLockedHelper<FunctionType>(callback); | 360 new internal::RunWhileLockedHelper<FunctionType>(callback); |
354 return base::Bind( | 361 return base::Bind( |
355 &internal::RunWhileLockedHelper<FunctionType>::CallWhileLocked, | 362 &internal::RunWhileLockedHelper<FunctionType>::CallWhileLocked, |
356 base::Owned(helper)); | 363 base::Owned(helper)); |
357 } | 364 } |
358 | 365 |
359 } // namespace ppapi | 366 } // namespace ppapi |
360 | 367 |
361 #endif // PPAPI_SHARED_IMPL_PROXY_LOCK_H_ | 368 #endif // PPAPI_SHARED_IMPL_PROXY_LOCK_H_ |
OLD | NEW |