OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2004 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 474 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
485 *smsg.ready = true; | 485 *smsg.ready = true; |
486 smsg.thread->socketserver()->WakeUp(); | 486 smsg.thread->socketserver()->WakeUp(); |
487 continue; | 487 continue; |
488 } | 488 } |
489 ++iter; | 489 ++iter; |
490 } | 490 } |
491 | 491 |
492 MessageQueue::Clear(phandler, id, removed); | 492 MessageQueue::Clear(phandler, id, removed); |
493 } | 493 } |
494 | 494 |
495 bool Thread::ProcessMessages(int cmsLoop) { | 495 bool Thread::ProcessMessages(int cmsLoop, int messages_limit) { |
496 int64_t msEnd = (kForever == cmsLoop) ? 0 : TimeAfter(cmsLoop); | 496 int64_t msEnd = (kForever == cmsLoop) ? 0 : TimeAfter(cmsLoop); |
497 int cmsNext = cmsLoop; | 497 int cmsNext = cmsLoop; |
| 498 int messages_processed = 0; |
498 | 499 |
499 while (true) { | 500 while (true) { |
500 #if __has_feature(objc_arc) | 501 #if __has_feature(objc_arc) |
501 @autoreleasepool | 502 @autoreleasepool |
502 #elif defined(WEBRTC_MAC) | 503 #elif defined(WEBRTC_MAC) |
503 // see: http://developer.apple.com/library/mac/#documentation/Cocoa/Referenc
e/Foundation/Classes/NSAutoreleasePool_Class/Reference/Reference.html | 504 // see: http://developer.apple.com/library/mac/#documentation/Cocoa/Referenc
e/Foundation/Classes/NSAutoreleasePool_Class/Reference/Reference.html |
504 // Each thread is supposed to have an autorelease pool. Also for event loops | 505 // Each thread is supposed to have an autorelease pool. Also for event loops |
505 // like this, autorelease pool needs to be created and drained/released | 506 // like this, autorelease pool needs to be created and drained/released |
506 // for each cycle. | 507 // for each cycle. |
507 ScopedAutoreleasePool pool; | 508 ScopedAutoreleasePool pool; |
508 #endif | 509 #endif |
509 { | 510 { |
510 Message msg; | 511 Message msg; |
511 if (!Get(&msg, cmsNext)) | 512 if (!Get(&msg, cmsNext)) |
512 return !IsQuitting(); | 513 return !IsQuitting(); |
513 Dispatch(&msg); | 514 Dispatch(&msg); |
| 515 if (messages_limit > 0) { |
| 516 ++messages_processed; |
| 517 if (messages_processed > messages_limit) { |
| 518 return true; |
| 519 } |
| 520 } |
514 | 521 |
515 if (cmsLoop != kForever) { | 522 if (cmsLoop != kForever) { |
516 cmsNext = static_cast<int>(TimeUntil(msEnd)); | 523 cmsNext = static_cast<int>(TimeUntil(msEnd)); |
517 if (cmsNext < 0) | 524 if (cmsNext < 0) |
518 return true; | 525 return true; |
519 } | 526 } |
520 } | 527 } |
521 } | 528 } |
522 } | 529 } |
523 | 530 |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
567 if (SUCCEEDED(hr)) { | 574 if (SUCCEEDED(hr)) { |
568 Thread::Run(); | 575 Thread::Run(); |
569 CoUninitialize(); | 576 CoUninitialize(); |
570 } else { | 577 } else { |
571 LOG(LS_ERROR) << "CoInitialize failed, hr=" << hr; | 578 LOG(LS_ERROR) << "CoInitialize failed, hr=" << hr; |
572 } | 579 } |
573 } | 580 } |
574 #endif | 581 #endif |
575 | 582 |
576 } // namespace rtc | 583 } // namespace rtc |
OLD | NEW |