Chromium Code Reviews| 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 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 59 case Priority::LOW: | 59 case Priority::LOW: |
| 60 return kLowPriority; | 60 return kLowPriority; |
| 61 case Priority::NORMAL: | 61 case Priority::NORMAL: |
| 62 return kNormalPriority; | 62 return kNormalPriority; |
| 63 default: | 63 default: |
| 64 RTC_NOTREACHED(); | 64 RTC_NOTREACHED(); |
| 65 break; | 65 break; |
| 66 } | 66 } |
| 67 return kNormalPriority; | 67 return kNormalPriority; |
| 68 } | 68 } |
| 69 | |
| 70 DWORD GetTick() { | |
| 71 static const UINT kPeriod = 1; | |
| 72 bool high_res = (timeBeginPeriod(kPeriod) == TIMERR_NOERROR); | |
| 73 DWORD ret = timeGetTime(); | |
|
henrika_webrtc
2017/03/03 12:24:55
What happens if high_res is false?
tommi
2017/03/03 12:39:01
Default behavior of timeGetTime():
https://msdn.m
henrika_webrtc
2017/03/03 12:42:32
Got it. I was more thinking about what will be ret
tommi
2017/03/03 12:59:34
TIMERR_NOCANDO is one possibility. I don't think t
henrika_webrtc
2017/03/03 13:00:53
Sorry. My brain added a {} below and I therefore f
tommi
2017/03/03 13:10:21
ack :)
| |
| 74 if (high_res) | |
| 75 timeEndPeriod(kPeriod); | |
| 76 return ret; | |
| 77 } | |
| 78 | |
| 69 } // namespace | 79 } // namespace |
| 70 | 80 |
| 71 class TaskQueue::MultimediaTimer { | 81 class TaskQueue::MultimediaTimer { |
| 72 public: | 82 public: |
| 73 // kMaxTimers defines the limit of how many MultimediaTimer instances should | 83 // kMaxTimers defines the limit of how many MultimediaTimer instances should |
| 74 // be created. | 84 // be created. |
| 75 // Background: The maximum number of supported handles for Wait functions, is | 85 // Background: The maximum number of supported handles for Wait functions, is |
| 76 // MAXIMUM_WAIT_OBJECTS - 1 (63). | 86 // MAXIMUM_WAIT_OBJECTS - 1 (63). |
| 77 // There are some ways to work around the limitation but as it turns out, the | 87 // There are some ways to work around the limitation but as it turns out, the |
| 78 // limit of concurrently active multimedia timers per process, is much lower, | 88 // limit of concurrently active multimedia timers per process, is much lower, |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 207 } | 217 } |
| 208 } | 218 } |
| 209 | 219 |
| 210 void TaskQueue::PostDelayedTask(std::unique_ptr<QueuedTask> task, | 220 void TaskQueue::PostDelayedTask(std::unique_ptr<QueuedTask> task, |
| 211 uint32_t milliseconds) { | 221 uint32_t milliseconds) { |
| 212 WPARAM wparam; | 222 WPARAM wparam; |
| 213 #if defined(_WIN64) | 223 #if defined(_WIN64) |
| 214 // GetTickCount() returns a fairly coarse tick count (resolution or about 8ms) | 224 // GetTickCount() returns a fairly coarse tick count (resolution or about 8ms) |
| 215 // so this compensation isn't that accurate, but since we have unused 32 bits | 225 // so this compensation isn't that accurate, but since we have unused 32 bits |
| 216 // on Win64, we might as well use them. | 226 // on Win64, we might as well use them. |
| 217 wparam = (static_cast<WPARAM>(::GetTickCount()) << 32) | milliseconds; | 227 wparam = (static_cast<WPARAM>(GetTick()) << 32) | milliseconds; |
| 218 #else | 228 #else |
| 219 wparam = milliseconds; | 229 wparam = milliseconds; |
| 220 #endif | 230 #endif |
| 221 if (::PostThreadMessage(thread_.GetThreadRef(), WM_QUEUE_DELAYED_TASK, wparam, | 231 if (::PostThreadMessage(thread_.GetThreadRef(), WM_QUEUE_DELAYED_TASK, wparam, |
| 222 reinterpret_cast<LPARAM>(task.get()))) { | 232 reinterpret_cast<LPARAM>(task.get()))) { |
| 223 task.release(); | 233 task.release(); |
| 224 } | 234 } |
| 225 } | 235 } |
| 226 | 236 |
| 227 void TaskQueue::PostTaskAndReply(std::unique_ptr<QueuedTask> task, | 237 void TaskQueue::PostTaskAndReply(std::unique_ptr<QueuedTask> task, |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 318 if (task->Run()) | 328 if (task->Run()) |
| 319 delete task; | 329 delete task; |
| 320 break; | 330 break; |
| 321 } | 331 } |
| 322 case WM_QUEUE_DELAYED_TASK: { | 332 case WM_QUEUE_DELAYED_TASK: { |
| 323 std::unique_ptr<QueuedTask> task( | 333 std::unique_ptr<QueuedTask> task( |
| 324 reinterpret_cast<QueuedTask*>(msg.lParam)); | 334 reinterpret_cast<QueuedTask*>(msg.lParam)); |
| 325 uint32_t milliseconds = msg.wParam & 0xFFFFFFFF; | 335 uint32_t milliseconds = msg.wParam & 0xFFFFFFFF; |
| 326 #if defined(_WIN64) | 336 #if defined(_WIN64) |
| 327 // Subtract the time it took to queue the timer. | 337 // Subtract the time it took to queue the timer. |
| 328 const DWORD now = GetTickCount(); | 338 const DWORD now = GetTick(); |
| 329 DWORD post_time = now - (msg.wParam >> 32); | 339 DWORD post_time = now - (msg.wParam >> 32); |
| 330 milliseconds = | 340 milliseconds = |
| 331 post_time > milliseconds ? 0 : milliseconds - post_time; | 341 post_time > milliseconds ? 0 : milliseconds - post_time; |
| 332 #endif | 342 #endif |
| 333 bool timer_queued = false; | 343 bool timer_queued = false; |
| 334 if (timers->size() < MultimediaTimer::kMaxTimers) { | 344 if (timers->size() < MultimediaTimer::kMaxTimers) { |
| 335 MultimediaTimer* timer = nullptr; | 345 MultimediaTimer* timer = nullptr; |
| 336 auto available = std::find_if( | 346 auto available = std::find_if( |
| 337 timers->begin(), timers->end(), | 347 timers->begin(), timers->end(), |
| 338 [](const MultimediaTimer& t) { return !t.is_active(); }); | 348 [](const MultimediaTimer& t) { return !t.is_active(); }); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 375 } | 385 } |
| 376 } else { | 386 } else { |
| 377 ::TranslateMessage(&msg); | 387 ::TranslateMessage(&msg); |
| 378 ::DispatchMessage(&msg); | 388 ::DispatchMessage(&msg); |
| 379 } | 389 } |
| 380 } | 390 } |
| 381 return msg.message != WM_QUIT; | 391 return msg.message != WM_QUIT; |
| 382 } | 392 } |
| 383 | 393 |
| 384 } // namespace rtc | 394 } // namespace rtc |
| OLD | NEW |