| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2016 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2016 The WebRTC Project Authors. All rights reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 154 // | 154 // |
| 155 // A note on destruction: | 155 // A note on destruction: |
| 156 // | 156 // |
| 157 // When a TaskQueue is deleted, pending tasks will not be executed but they will | 157 // When a TaskQueue is deleted, pending tasks will not be executed but they will |
| 158 // be deleted. The deletion of tasks may happen asynchronously after the | 158 // be deleted. The deletion of tasks may happen asynchronously after the |
| 159 // TaskQueue itself has been deleted or it may happen synchronously while the | 159 // TaskQueue itself has been deleted or it may happen synchronously while the |
| 160 // TaskQueue instance is being deleted. This may vary from one OS to the next | 160 // TaskQueue instance is being deleted. This may vary from one OS to the next |
| 161 // so assumptions about lifetimes of pending tasks should not be made. | 161 // so assumptions about lifetimes of pending tasks should not be made. |
| 162 class LOCKABLE TaskQueue { | 162 class LOCKABLE TaskQueue { |
| 163 public: | 163 public: |
| 164 explicit TaskQueue(const char* queue_name); | 164 // TaskQueue priority levels. On some platforms these will map to thread |
| 165 // TODO(tommi): Implement move semantics? | 165 // priorities, on others such as Mac and iOS, GCD queue priorities. |
| 166 enum class Priority { |
| 167 NORMAL = 0, |
| 168 HIGH, |
| 169 LOW, |
| 170 }; |
| 171 |
| 172 explicit TaskQueue(const char* queue_name, |
| 173 Priority priority = Priority::NORMAL); |
| 166 ~TaskQueue(); | 174 ~TaskQueue(); |
| 167 | 175 |
| 168 static TaskQueue* Current(); | 176 static TaskQueue* Current(); |
| 169 | 177 |
| 170 // Used for DCHECKing the current queue. | 178 // Used for DCHECKing the current queue. |
| 171 static bool IsCurrent(const char* queue_name); | 179 static bool IsCurrent(const char* queue_name); |
| 172 bool IsCurrent() const; | 180 bool IsCurrent() const; |
| 173 | 181 |
| 174 // TODO(tommi): For better debuggability, implement RTC_FROM_HERE. | 182 // TODO(tommi): For better debuggability, implement RTC_FROM_HERE. |
| 175 | 183 |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 268 #elif defined(WEBRTC_WIN) | 276 #elif defined(WEBRTC_WIN) |
| 269 class MultimediaTimer; | 277 class MultimediaTimer; |
| 270 typedef std::unordered_map<UINT_PTR, std::unique_ptr<QueuedTask>> | 278 typedef std::unordered_map<UINT_PTR, std::unique_ptr<QueuedTask>> |
| 271 DelayedTasks; | 279 DelayedTasks; |
| 272 static void ThreadMain(void* context); | 280 static void ThreadMain(void* context); |
| 273 static bool ProcessQueuedMessages(DelayedTasks* delayed_tasks, | 281 static bool ProcessQueuedMessages(DelayedTasks* delayed_tasks, |
| 274 std::vector<MultimediaTimer>* timers); | 282 std::vector<MultimediaTimer>* timers); |
| 275 | 283 |
| 276 class WorkerThread : public PlatformThread { | 284 class WorkerThread : public PlatformThread { |
| 277 public: | 285 public: |
| 278 WorkerThread(ThreadRunFunction func, void* obj, const char* thread_name) | 286 WorkerThread(ThreadRunFunction func, |
| 279 : PlatformThread(func, obj, thread_name) {} | 287 void* obj, |
| 288 const char* thread_name, |
| 289 ThreadPriority priority) |
| 290 : PlatformThread(func, obj, thread_name, priority) {} |
| 280 | 291 |
| 281 bool QueueAPC(PAPCFUNC apc_function, ULONG_PTR data) { | 292 bool QueueAPC(PAPCFUNC apc_function, ULONG_PTR data) { |
| 282 return PlatformThread::QueueAPC(apc_function, data); | 293 return PlatformThread::QueueAPC(apc_function, data); |
| 283 } | 294 } |
| 284 }; | 295 }; |
| 285 WorkerThread thread_; | 296 WorkerThread thread_; |
| 286 #else | 297 #else |
| 287 #error not supported. | 298 #error not supported. |
| 288 #endif | 299 #endif |
| 289 | 300 |
| 290 RTC_DISALLOW_COPY_AND_ASSIGN(TaskQueue); | 301 RTC_DISALLOW_COPY_AND_ASSIGN(TaskQueue); |
| 291 }; | 302 }; |
| 292 | 303 |
| 293 } // namespace rtc | 304 } // namespace rtc |
| 294 | 305 |
| 295 #endif // WEBRTC_BASE_TASK_QUEUE_H_ | 306 #endif // WEBRTC_BASE_TASK_QUEUE_H_ |
| OLD | NEW |