Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Side by Side Diff: webrtc/base/fakeclock.cc

Issue 2024813004: Improving the fake clock and using it to fix a flaky STUN timeout test. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fixing another TSan warning. WebRtcSession wasn't completely shut down. Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
11 #include "webrtc/base/fakeclock.h" 11 #include "webrtc/base/fakeclock.h"
12 12
13 #include "webrtc/base/checks.h" 13 #include "webrtc/base/checks.h"
14 #include "webrtc/base/messagequeue.h" 14 #include "webrtc/base/messagequeue.h"
15 15
16 namespace rtc { 16 namespace rtc {
17 17
18 uint64_t FakeClock::TimeNanos() const { 18 uint64_t FakeClock::TimeNanos() const {
19 CritScope cs(&lock_); 19 CritScope cs(&lock_);
20 return time_; 20 return time_;
21 } 21 }
22 22
23 void FakeClock::SetTimeNanos(uint64_t nanos) { 23 void FakeClock::SetTimeNanos(uint64_t nanos) {
24 { 24 {
25 CritScope cs(&lock_); 25 CritScope cs(&lock_);
26 RTC_DCHECK(nanos >= time_); 26 RTC_DCHECK(nanos >= time_);
27 time_ = nanos; 27 time_ = nanos;
28 } 28 }
29 // If message queues are waiting in a socket select() with a timeout provided 29 // If message queues are waiting in a socket select() with a timeout provided
30 // by the OS, they should wake up to check if there are any messages ready to 30 // by the OS, they should wake up and dispatch all messages that are ready.
31 // be dispatched based on the fake time. 31 MessageQueueManager::ProcessAllMessageQueues();
32 MessageQueueManager::WakeAllMessageQueues();
33 } 32 }
34 33
35 void FakeClock::AdvanceTime(TimeDelta delta) { 34 void FakeClock::AdvanceTime(TimeDelta delta) {
36 CritScope cs(&lock_); 35 {
37 SetTimeNanos(time_ + delta.ToNanoseconds()); 36 CritScope cs(&lock_);
37 time_ += delta.ToNanoseconds();
38 }
39 MessageQueueManager::ProcessAllMessageQueues();
40 }
41
42 ScopedFakeClock::ScopedFakeClock() {
43 prev_clock_ = SetClockForTesting(this);
44 }
45
46 ScopedFakeClock::~ScopedFakeClock() {
47 SetClockForTesting(prev_clock_);
nisse-webrtc 2016/06/08 09:47:30 I think it's simpler to only ever allow one fake c
38 } 48 }
39 49
40 } // namespace rtc 50 } // namespace rtc
OLDNEW
« no previous file with comments | « webrtc/base/fakeclock.h ('k') | webrtc/base/gunit.h » ('j') | webrtc/base/timeutils.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698