| 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 BASE_OBSERVER_LIST_THREADSAFE_H_ | 5 #ifndef BASE_OBSERVER_LIST_THREADSAFE_H_ |
| 6 #define BASE_OBSERVER_LIST_THREADSAFE_H_ | 6 #define BASE_OBSERVER_LIST_THREADSAFE_H_ |
| 7 | 7 |
| 8 #include <algorithm> | 8 #include <algorithm> |
| 9 #include <map> | 9 #include <map> |
| 10 #include <tuple> |
| 10 | 11 |
| 11 #include "base/bind.h" | 12 #include "base/bind.h" |
| 12 #include "base/location.h" | 13 #include "base/location.h" |
| 13 #include "base/logging.h" | 14 #include "base/logging.h" |
| 14 #include "base/macros.h" | 15 #include "base/macros.h" |
| 15 #include "base/memory/ref_counted.h" | 16 #include "base/memory/ref_counted.h" |
| 16 #include "base/message_loop/message_loop.h" | 17 #include "base/message_loop/message_loop.h" |
| 17 #include "base/observer_list.h" | 18 #include "base/observer_list.h" |
| 18 #include "base/single_thread_task_runner.h" | 19 #include "base/single_thread_task_runner.h" |
| 19 #include "base/stl_util.h" | 20 #include "base/stl_util.h" |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 170 | 171 |
| 171 // Notify methods. | 172 // Notify methods. |
| 172 // Make a thread-safe callback to each Observer in the list. | 173 // Make a thread-safe callback to each Observer in the list. |
| 173 // Note, these calls are effectively asynchronous. You cannot assume | 174 // Note, these calls are effectively asynchronous. You cannot assume |
| 174 // that at the completion of the Notify call that all Observers have | 175 // that at the completion of the Notify call that all Observers have |
| 175 // been Notified. The notification may still be pending delivery. | 176 // been Notified. The notification may still be pending delivery. |
| 176 template <class Method, class... Params> | 177 template <class Method, class... Params> |
| 177 void Notify(const tracked_objects::Location& from_here, | 178 void Notify(const tracked_objects::Location& from_here, |
| 178 Method m, | 179 Method m, |
| 179 const Params&... params) { | 180 const Params&... params) { |
| 180 internal::UnboundMethod<ObserverType, Method, Tuple<Params...>> method( | 181 internal::UnboundMethod<ObserverType, Method, std::tuple<Params...>> method( |
| 181 m, MakeTuple(params...)); | 182 m, std::make_tuple(params...)); |
| 182 | 183 |
| 183 AutoLock lock(list_lock_); | 184 AutoLock lock(list_lock_); |
| 184 for (const auto& entry : observer_lists_) { | 185 for (const auto& entry : observer_lists_) { |
| 185 ObserverListContext* context = entry.second; | 186 ObserverListContext* context = entry.second; |
| 186 context->task_runner->PostTask( | 187 context->task_runner->PostTask( |
| 187 from_here, | 188 from_here, |
| 188 Bind(&ObserverListThreadSafe<ObserverType>::template NotifyWrapper< | 189 Bind(&ObserverListThreadSafe<ObserverType>::template NotifyWrapper< |
| 189 Method, Tuple<Params...>>, | 190 Method, std::tuple<Params...>>, |
| 190 this, context, method)); | 191 this, context, method)); |
| 191 } | 192 } |
| 192 } | 193 } |
| 193 | 194 |
| 194 private: | 195 private: |
| 195 // See comment above ObserverListThreadSafeTraits' definition. | 196 // See comment above ObserverListThreadSafeTraits' definition. |
| 196 friend struct ObserverListThreadSafeTraits<ObserverType>; | 197 friend struct ObserverListThreadSafeTraits<ObserverType>; |
| 197 | 198 |
| 198 struct ObserverListContext { | 199 struct ObserverListContext { |
| 199 explicit ObserverListContext(NotificationType type) | 200 explicit ObserverListContext(NotificationType type) |
| 200 : task_runner(ThreadTaskRunnerHandle::Get()), list(type) {} | 201 : task_runner(ThreadTaskRunnerHandle::Get()), list(type) {} |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 263 mutable Lock list_lock_; // Protects the observer_lists_. | 264 mutable Lock list_lock_; // Protects the observer_lists_. |
| 264 ObserversListMap observer_lists_; | 265 ObserversListMap observer_lists_; |
| 265 const NotificationType type_; | 266 const NotificationType type_; |
| 266 | 267 |
| 267 DISALLOW_COPY_AND_ASSIGN(ObserverListThreadSafe); | 268 DISALLOW_COPY_AND_ASSIGN(ObserverListThreadSafe); |
| 268 }; | 269 }; |
| 269 | 270 |
| 270 } // namespace base | 271 } // namespace base |
| 271 | 272 |
| 272 #endif // BASE_OBSERVER_LIST_THREADSAFE_H_ | 273 #endif // BASE_OBSERVER_LIST_THREADSAFE_H_ |
| OLD | NEW |