Index: webrtc/base/messagequeue.cc |
diff --git a/webrtc/base/messagequeue.cc b/webrtc/base/messagequeue.cc |
index 1ccee00c71650def29d348b1429175e85b051772..e8b5bf5bc1f4836b91c1fddef30aad2fa071d6f1 100644 |
--- a/webrtc/base/messagequeue.cc |
+++ b/webrtc/base/messagequeue.cc |
@@ -17,7 +17,7 @@ |
namespace rtc { |
-const uint32_t kMaxMsgLatency = 150; // 150 ms |
+const int kMaxMsgLatency = 150; // 150 ms |
//------------------------------------------------------------------ |
// MessageQueueManager |
@@ -215,16 +215,16 @@ bool MessageQueue::Get(Message *pmsg, int cmsWait, bool process_io) { |
// Get w/wait + timer scan / dispatch + socket / event multiplexer dispatch |
- int cmsTotal = cmsWait; |
- int cmsElapsed = 0; |
- uint32_t msStart = Time(); |
- uint32_t msCurrent = msStart; |
+ int64_t cmsTotal = cmsWait; |
+ int64_t cmsElapsed = 0; |
+ int64_t msStart = TimeMillis(); |
+ int64_t msCurrent = msStart; |
while (true) { |
// Check for sent messages |
ReceiveSends(); |
// Check for posted events |
- int cmsDelayNext = kForever; |
+ int64_t cmsDelayNext = kForever; |
bool first_pass = true; |
while (true) { |
// All queue operations need to be locked, but nothing else in this loop |
@@ -237,7 +237,7 @@ bool MessageQueue::Get(Message *pmsg, int cmsWait, bool process_io) { |
if (first_pass) { |
first_pass = false; |
while (!dmsgq_.empty()) { |
- if (TimeIsLater(msCurrent, dmsgq_.top().msTrigger_)) { |
+ if (msCurrent < dmsgq_.top().msTrigger_) { |
cmsDelayNext = TimeDiff(dmsgq_.top().msTrigger_, msCurrent); |
break; |
} |
@@ -256,7 +256,7 @@ bool MessageQueue::Get(Message *pmsg, int cmsWait, bool process_io) { |
// Log a warning for time-sensitive messages that we're late to deliver. |
if (pmsg->ts_sensitive) { |
- int32_t delay = TimeDiff(msCurrent, pmsg->ts_sensitive); |
+ int64_t delay = TimeDiff(msCurrent, pmsg->ts_sensitive); |
if (delay > 0) { |
LOG_F(LS_WARNING) << "id: " << pmsg->message_id << " delay: " |
<< (delay + kMaxMsgLatency) << "ms"; |
@@ -277,11 +277,11 @@ bool MessageQueue::Get(Message *pmsg, int cmsWait, bool process_io) { |
// Which is shorter, the delay wait or the asked wait? |
- int cmsNext; |
+ int64_t cmsNext; |
if (cmsWait == kForever) { |
cmsNext = cmsDelayNext; |
} else { |
- cmsNext = std::max(0, cmsTotal - cmsElapsed); |
+ cmsNext = std::max<int64_t>(0, cmsTotal - cmsElapsed); |
if ((cmsDelayNext != kForever) && (cmsDelayNext < cmsNext)) |
cmsNext = cmsDelayNext; |
} |
@@ -289,13 +289,13 @@ bool MessageQueue::Get(Message *pmsg, int cmsWait, bool process_io) { |
{ |
// Wait and multiplex in the meantime |
SharedScope ss(&ss_lock_); |
- if (!ss_->Wait(cmsNext, process_io)) |
+ if (!ss_->Wait(static_cast<int>(cmsNext), process_io)) |
return false; |
} |
// If the specified timeout expired, return |
- msCurrent = Time(); |
+ msCurrent = TimeMillis(); |
cmsElapsed = TimeDiff(msCurrent, msStart); |
if (cmsWait != kForever) { |
if (cmsElapsed >= cmsWait) |
@@ -326,7 +326,7 @@ void MessageQueue::Post(MessageHandler* phandler, |
msg.message_id = id; |
msg.pdata = pdata; |
if (time_sensitive) { |
- msg.ts_sensitive = Time() + kMaxMsgLatency; |
+ msg.ts_sensitive = TimeMillis() + kMaxMsgLatency; |
} |
msgq_.push_back(msg); |
} |
@@ -344,11 +344,20 @@ void MessageQueue::PostAt(uint32_t tstamp, |
MessageHandler* phandler, |
uint32_t id, |
MessageData* pdata) { |
+ // This should work even if it is used (unexpectedly). |
+ int delay = static_cast<uint32_t>(TimeMillis()) - tstamp; |
+ return DoDelayPost(delay, tstamp, phandler, id, pdata); |
+} |
+ |
+void MessageQueue::PostAt(int64_t tstamp, |
+ MessageHandler* phandler, |
+ uint32_t id, |
+ MessageData* pdata) { |
return DoDelayPost(TimeUntil(tstamp), tstamp, phandler, id, pdata); |
} |
void MessageQueue::DoDelayPost(int cmsDelay, |
- uint32_t tstamp, |
+ int64_t tstamp, |
MessageHandler* phandler, |
uint32_t id, |
MessageData* pdata) { |