| 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_SEQUENCED_TASK_RUNNER_H_ | 5 #ifndef BASE_SEQUENCED_TASK_RUNNER_H_ |
| 6 #define BASE_SEQUENCED_TASK_RUNNER_H_ | 6 #define BASE_SEQUENCED_TASK_RUNNER_H_ |
| 7 | 7 |
| 8 #include "base/base_export.h" | 8 #include "base/base_export.h" |
| 9 #include "base/sequenced_task_runner_helpers.h" | 9 #include "base/sequenced_task_runner_helpers.h" |
| 10 #include "base/task_runner.h" | 10 #include "base/task_runner.h" |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 115 const tracked_objects::Location& from_here, | 115 const tracked_objects::Location& from_here, |
| 116 const Closure& task, | 116 const Closure& task, |
| 117 base::TimeDelta delay) = 0; | 117 base::TimeDelta delay) = 0; |
| 118 | 118 |
| 119 // Submits a non-nestable task to delete the given object. Returns | 119 // Submits a non-nestable task to delete the given object. Returns |
| 120 // true if the object may be deleted at some point in the future, | 120 // true if the object may be deleted at some point in the future, |
| 121 // and false if the object definitely will not be deleted. | 121 // and false if the object definitely will not be deleted. |
| 122 template <class T> | 122 template <class T> |
| 123 bool DeleteSoon(const tracked_objects::Location& from_here, | 123 bool DeleteSoon(const tracked_objects::Location& from_here, |
| 124 const T* object) { | 124 const T* object) { |
| 125 return | 125 return DeleteOrReleaseSoonInternal(from_here, &DeleteHelper<T>::DoDelete, |
| 126 subtle::DeleteHelperInternal<T, bool>::DeleteViaSequencedTaskRunner( | 126 object); |
| 127 this, from_here, object); | |
| 128 } | 127 } |
| 129 | 128 |
| 130 // Submits a non-nestable task to release the given object. Returns | 129 // Submits a non-nestable task to release the given object. Returns |
| 131 // true if the object may be released at some point in the future, | 130 // true if the object may be released at some point in the future, |
| 132 // and false if the object definitely will not be released. | 131 // and false if the object definitely will not be released. |
| 133 template <class T> | 132 template <class T> |
| 134 bool ReleaseSoon(const tracked_objects::Location& from_here, | 133 bool ReleaseSoon(const tracked_objects::Location& from_here, |
| 135 T* object) { | 134 const T* object) { |
| 136 return | 135 return DeleteOrReleaseSoonInternal(from_here, &ReleaseHelper<T>::DoRelease, |
| 137 subtle::ReleaseHelperInternal<T, bool>::ReleaseViaSequencedTaskRunner( | 136 object); |
| 138 this, from_here, object); | |
| 139 } | 137 } |
| 140 | 138 |
| 141 protected: | 139 protected: |
| 142 ~SequencedTaskRunner() override {} | 140 ~SequencedTaskRunner() override {} |
| 143 | 141 |
| 144 private: | 142 private: |
| 145 template <class T, class R> friend class subtle::DeleteHelperInternal; | 143 bool DeleteOrReleaseSoonInternal(const tracked_objects::Location& from_here, |
| 146 template <class T, class R> friend class subtle::ReleaseHelperInternal; | 144 void (*deleter)(const void*), |
| 147 | 145 const void* object); |
| 148 bool DeleteSoonInternal(const tracked_objects::Location& from_here, | |
| 149 void(*deleter)(const void*), | |
| 150 const void* object); | |
| 151 | |
| 152 bool ReleaseSoonInternal(const tracked_objects::Location& from_here, | |
| 153 void(*releaser)(const void*), | |
| 154 const void* object); | |
| 155 }; | 146 }; |
| 156 | 147 |
| 157 struct BASE_EXPORT OnTaskRunnerDeleter { | 148 struct BASE_EXPORT OnTaskRunnerDeleter { |
| 158 explicit OnTaskRunnerDeleter(scoped_refptr<SequencedTaskRunner> task_runner); | 149 explicit OnTaskRunnerDeleter(scoped_refptr<SequencedTaskRunner> task_runner); |
| 159 ~OnTaskRunnerDeleter(); | 150 ~OnTaskRunnerDeleter(); |
| 160 | 151 |
| 161 OnTaskRunnerDeleter(OnTaskRunnerDeleter&&); | 152 OnTaskRunnerDeleter(OnTaskRunnerDeleter&&); |
| 162 OnTaskRunnerDeleter& operator=(OnTaskRunnerDeleter&&); | 153 OnTaskRunnerDeleter& operator=(OnTaskRunnerDeleter&&); |
| 163 | 154 |
| 164 template <typename T> | 155 template <typename T> |
| 165 void operator()(const T* ptr) { | 156 void operator()(const T* ptr) { |
| 166 if (ptr) | 157 if (ptr) |
| 167 task_runner_->DeleteSoon(FROM_HERE, ptr); | 158 task_runner_->DeleteSoon(FROM_HERE, ptr); |
| 168 } | 159 } |
| 169 | 160 |
| 170 scoped_refptr<SequencedTaskRunner> task_runner_; | 161 scoped_refptr<SequencedTaskRunner> task_runner_; |
| 171 }; | 162 }; |
| 172 | 163 |
| 173 } // namespace base | 164 } // namespace base |
| 174 | 165 |
| 175 #endif // BASE_SEQUENCED_TASK_RUNNER_H_ | 166 #endif // BASE_SEQUENCED_TASK_RUNNER_H_ |
| OLD | NEW |