blob: f63b85c48012c82f7b24c4dca5d3ca586609832f [file] [log] [blame]
Taylor Brandstetterb3c68102016-05-27 14:15:43 -07001/*
2 * Copyright 2016 The WebRTC project authors. All Rights Reserved.
3 *
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
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#include "rtc_base/fakeclock.h"
Taylor Brandstetterb3c68102016-05-27 14:15:43 -070012
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020013#include "rtc_base/checks.h"
14#include "rtc_base/messagequeue.h"
Taylor Brandstetterb3c68102016-05-27 14:15:43 -070015
16namespace rtc {
17
nissedeb95f32016-11-28 01:54:54 -080018int64_t FakeClock::TimeNanos() const {
Taylor Brandstetterb3c68102016-05-27 14:15:43 -070019 CritScope cs(&lock_);
20 return time_;
21}
22
nissedeb95f32016-11-28 01:54:54 -080023void FakeClock::SetTimeNanos(int64_t nanos) {
Taylor Brandstetterb3c68102016-05-27 14:15:43 -070024 {
25 CritScope cs(&lock_);
26 RTC_DCHECK(nanos >= time_);
27 time_ = nanos;
28 }
29 // If message queues are waiting in a socket select() with a timeout provided
deadbeeff5f03e82016-06-06 11:16:06 -070030 // by the OS, they should wake up and dispatch all messages that are ready.
Niels Möller8909a632018-09-06 08:42:44 +020031 MessageQueueManager::ProcessAllMessageQueuesForTesting();
Taylor Brandstetterb3c68102016-05-27 14:15:43 -070032}
33
Sebastian Jansson5f83cf02018-05-08 14:52:22 +020034void FakeClock::AdvanceTime(webrtc::TimeDelta delta) {
deadbeeff5f03e82016-06-06 11:16:06 -070035 {
36 CritScope cs(&lock_);
Sebastian Jansson5f83cf02018-05-08 14:52:22 +020037 time_ += delta.ns();
deadbeeff5f03e82016-06-06 11:16:06 -070038 }
Niels Möller8909a632018-09-06 08:42:44 +020039 MessageQueueManager::ProcessAllMessageQueuesForTesting();
deadbeeff5f03e82016-06-06 11:16:06 -070040}
41
42ScopedFakeClock::ScopedFakeClock() {
43 prev_clock_ = SetClockForTesting(this);
44}
45
46ScopedFakeClock::~ScopedFakeClock() {
47 SetClockForTesting(prev_clock_);
Taylor Brandstetterb3c68102016-05-27 14:15:43 -070048}
49
50} // namespace rtc