rtc::Event: Finalize migration to TimeDelta.

Bug: webrtc:14366
Change-Id: Icd8792a2f9efa5609dd13da2e175042fac101d36
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/272101
Commit-Queue: Tomas Gunnarsson <tommi@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Markus Handell <handellm@webrtc.org>
Auto-Submit: Markus Handell <handellm@webrtc.org>
Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#37844}
diff --git a/modules/audio_device/android/audio_device_unittest.cc b/modules/audio_device/android/audio_device_unittest.cc
index 35ed5da..d9d52cd 100644
--- a/modules/audio_device/android/audio_device_unittest.cc
+++ b/modules/audio_device/android/audio_device_unittest.cc
@@ -60,7 +60,7 @@
 // an event indicating that the test was OK.
 static const size_t kNumCallbacks = 10;
 // Max amount of time we wait for an event to be set while counting callbacks.
-static const int kTestTimeOutInMilliseconds = 10 * 1000;
+static constexpr TimeDelta kTestTimeOut = TimeDelta::Seconds(10);
 // Average number of audio callbacks per second assuming 10ms packet size.
 static const size_t kNumCallbacksPerSecond = 100;
 // Play out a test file during this time (unit is in seconds).
@@ -69,7 +69,7 @@
 static const size_t kBytesPerSample = kBitsPerSample / 8;
 // Run the full-duplex test during this time (unit is in seconds).
 // Note that first `kNumIgnoreFirstCallbacks` are ignored.
-static const int kFullDuplexTimeInSec = 5;
+static constexpr TimeDelta kFullDuplexTime = TimeDelta::Seconds(5);
 // Wait for the callback sequence to stabilize by ignoring this amount of the
 // initial callbacks (avoids initial FIFO access).
 // Only used in the RunPlayoutAndRecordingInFullDuplex test.
@@ -77,8 +77,8 @@
 // Sets the number of impulses per second in the latency test.
 static const int kImpulseFrequencyInHz = 1;
 // Length of round-trip latency measurements. Number of transmitted impulses
-// is kImpulseFrequencyInHz * kMeasureLatencyTimeInSec - 1.
-static const int kMeasureLatencyTimeInSec = 11;
+// is kImpulseFrequencyInHz * kMeasureLatencyTime - 1.
+static constexpr TimeDelta kMeasureLatencyTime = TimeDelta::Seconds(11);
 // Utilized in round-trip latency measurements to avoid capturing noise samples.
 static const int kImpulseThreshold = 1000;
 static const char kTag[] = "[..........] ";
@@ -877,7 +877,7 @@
       .Times(AtLeast(kNumCallbacks));
   EXPECT_EQ(0, audio_device()->RegisterAudioCallback(&mock));
   StartPlayout();
-  test_is_done_.Wait(kTestTimeOutInMilliseconds);
+  test_is_done_.Wait(kTestTimeOut);
   StopPlayout();
 }
 
@@ -896,7 +896,7 @@
 
   EXPECT_EQ(0, audio_device()->RegisterAudioCallback(&mock));
   StartRecording();
-  test_is_done_.Wait(kTestTimeOutInMilliseconds);
+  test_is_done_.Wait(kTestTimeOut);
   StopRecording();
 }
 
@@ -917,7 +917,7 @@
   EXPECT_EQ(0, audio_device()->RegisterAudioCallback(&mock));
   StartPlayout();
   StartRecording();
-  test_is_done_.Wait(kTestTimeOutInMilliseconds);
+  test_is_done_.Wait(kTestTimeOut);
   StopRecording();
   StopPlayout();
 }
@@ -937,7 +937,7 @@
   // SetMaxPlayoutVolume();
   EXPECT_EQ(0, audio_device()->RegisterAudioCallback(&mock));
   StartPlayout();
-  test_is_done_.Wait(kTestTimeOutInMilliseconds);
+  test_is_done_.Wait(kTestTimeOut);
   StopPlayout();
 }
 
@@ -967,13 +967,12 @@
   std::unique_ptr<FifoAudioStream> fifo_audio_stream(
       new FifoAudioStream(playout_frames_per_10ms_buffer()));
   mock.HandleCallbacks(&test_is_done_, fifo_audio_stream.get(),
-                       kFullDuplexTimeInSec * kNumCallbacksPerSecond);
+                       kFullDuplexTime.seconds() * kNumCallbacksPerSecond);
   SetMaxPlayoutVolume();
   EXPECT_EQ(0, audio_device()->RegisterAudioCallback(&mock));
   StartRecording();
   StartPlayout();
-  test_is_done_.Wait(
-      std::max(kTestTimeOutInMilliseconds, 1000 * kFullDuplexTimeInSec));
+  test_is_done_.Wait(std::max(kTestTimeOut, kFullDuplexTime));
   StopPlayout();
   StopRecording();
 
@@ -1000,20 +999,19 @@
   std::unique_ptr<LatencyMeasuringAudioStream> latency_audio_stream(
       new LatencyMeasuringAudioStream(playout_frames_per_10ms_buffer()));
   mock.HandleCallbacks(&test_is_done_, latency_audio_stream.get(),
-                       kMeasureLatencyTimeInSec * kNumCallbacksPerSecond);
+                       kMeasureLatencyTime.seconds() * kNumCallbacksPerSecond);
   EXPECT_EQ(0, audio_device()->RegisterAudioCallback(&mock));
   SetMaxPlayoutVolume();
   DisableBuiltInAECIfAvailable();
   StartRecording();
   StartPlayout();
-  test_is_done_.Wait(
-      std::max(kTestTimeOutInMilliseconds, 1000 * kMeasureLatencyTimeInSec));
+  test_is_done_.Wait(std::max(kTestTimeOut, kMeasureLatencyTime));
   StopPlayout();
   StopRecording();
   // Verify that the correct number of transmitted impulses are detected.
   EXPECT_EQ(latency_audio_stream->num_latency_values(),
             static_cast<size_t>(
-                kImpulseFrequencyInHz * kMeasureLatencyTimeInSec - 1));
+                kImpulseFrequencyInHz * kMeasureLatencyTime.seconds() - 1));
   latency_audio_stream->PrintResults();
 }
 
diff --git a/modules/audio_device/mac/audio_device_mac.cc b/modules/audio_device/mac/audio_device_mac.cc
index 0ed874c..527f76a 100644
--- a/modules/audio_device/mac/audio_device_mac.cc
+++ b/modules/audio_device/mac/audio_device_mac.cc
@@ -1329,7 +1329,7 @@
       _recording = false;
       _doStopRec = true;  // Signal to io proc to stop audio device
       mutex_.Unlock();    // Cannot be under lock, risk of deadlock
-      if (!_stopEventRec.Wait(2000)) {
+      if (!_stopEventRec.Wait(TimeDelta::Seconds(2))) {
         MutexLock lockScoped(&mutex_);
         RTC_LOG(LS_WARNING) << "Timed out stopping the capture IOProc."
                                "We may have failed to detect a device removal.";
diff --git a/modules/desktop_capture/win/wgc_capture_session.cc b/modules/desktop_capture/win/wgc_capture_session.cc
index 0ff2db2..831257b 100644
--- a/modules/desktop_capture/win/wgc_capture_session.cc
+++ b/modules/desktop_capture/win/wgc_capture_session.cc
@@ -42,8 +42,8 @@
 
 // The maximum time `GetFrame` will wait for a frame to arrive, if we don't have
 // any in the pool.
-constexpr int kMaxWaitForFrameMs = 50;
-constexpr int kMaxWaitForFirstFrameMs = 500;
+constexpr TimeDelta kMaxWaitForFrame = TimeDelta::Millis(50);
+constexpr TimeDelta kMaxWaitForFirstFrame = TimeDelta::Millis(500);
 
 // These values are persisted to logs. Entries should not be renumbered and
 // numeric values should never be reused.
@@ -213,8 +213,8 @@
   RTC_DCHECK(is_capture_started_);
 
   if (frames_in_pool_ < 1)
-    wait_for_frame_event_.Wait(first_frame_ ? kMaxWaitForFirstFrameMs
-                                            : kMaxWaitForFrameMs);
+    wait_for_frame_event_.Wait(first_frame_ ? kMaxWaitForFirstFrame
+                                            : kMaxWaitForFrame);
 
   ComPtr<WGC::IDirect3D11CaptureFrame> capture_frame;
   HRESULT hr = frame_pool_->TryGetNextFrame(&capture_frame);
diff --git a/rtc_base/event.h b/rtc_base/event.h
index ab66d6a..941497c 100644
--- a/rtc_base/event.h
+++ b/rtc_base/event.h
@@ -50,29 +50,13 @@
   bool Wait(webrtc::TimeDelta give_up_after, webrtc::TimeDelta warn_after);
 
   // Waits with the given timeout and a reasonable default warning timeout.
-  // TODO(bugs.webrtc.org/14366): De-template this after millisec-based Wait is
-  // removed.
-  template <class T>
-  bool Wait(T give_up_after) {
-    webrtc::TimeDelta duration = ToTimeDelta(give_up_after);
-    return Wait(duration, duration.IsPlusInfinity()
-                              ? webrtc::TimeDelta::Seconds(3)
-                              : kForever);
+  bool Wait(webrtc::TimeDelta give_up_after) {
+    return Wait(give_up_after, give_up_after.IsPlusInfinity()
+                                   ? webrtc::TimeDelta::Seconds(3)
+                                   : kForever);
   }
 
  private:
-  // TODO(bugs.webrtc.org/14366): Remove after millisec-based Wait is removed.
-  static webrtc::TimeDelta ToTimeDelta(int duration) {
-    // SocketServer users can get here with SocketServer::kForever which is
-    // -1. Mirror the definition here to avoid dependence.
-    constexpr int kForeverMs = -1;
-    return duration == kForeverMs ? kForever
-                                  : webrtc::TimeDelta::Millis(duration);
-  }
-  static webrtc::TimeDelta ToTimeDelta(webrtc::TimeDelta duration) {
-    return duration;
-  }
-
 #if defined(WEBRTC_WIN)
   HANDLE event_handle_;
 #elif defined(WEBRTC_POSIX)
diff --git a/sdk/android/native_unittests/audio_device/audio_device_unittest.cc b/sdk/android/native_unittests/audio_device/audio_device_unittest.cc
index 7d582d4..6cf2f1e 100644
--- a/sdk/android/native_unittests/audio_device/audio_device_unittest.cc
+++ b/sdk/android/native_unittests/audio_device/audio_device_unittest.cc
@@ -57,7 +57,7 @@
 // an event indicating that the test was OK.
 static const size_t kNumCallbacks = 10;
 // Max amount of time we wait for an event to be set while counting callbacks.
-static const int kTestTimeOutInMilliseconds = 10 * 1000;
+static constexpr TimeDelta kTestTimeOut = TimeDelta::Seconds(10);
 // Average number of audio callbacks per second assuming 10ms packet size.
 static const size_t kNumCallbacksPerSecond = 100;
 // Play out a test file during this time (unit is in seconds).
@@ -66,7 +66,7 @@
 static const size_t kBytesPerSample = kBitsPerSample / 8;
 // Run the full-duplex test during this time (unit is in seconds).
 // Note that first `kNumIgnoreFirstCallbacks` are ignored.
-static const int kFullDuplexTimeInSec = 5;
+static constexpr TimeDelta kFullDuplexTime = TimeDelta::Seconds(5);
 // Wait for the callback sequence to stabilize by ignoring this amount of the
 // initial callbacks (avoids initial FIFO access).
 // Only used in the RunPlayoutAndRecordingInFullDuplex test.
@@ -74,8 +74,8 @@
 // Sets the number of impulses per second in the latency test.
 static const int kImpulseFrequencyInHz = 1;
 // Length of round-trip latency measurements. Number of transmitted impulses
-// is kImpulseFrequencyInHz * kMeasureLatencyTimeInSec - 1.
-static const int kMeasureLatencyTimeInSec = 11;
+// is kImpulseFrequencyInHz * kMeasureLatencyTime - 1.
+static constexpr TimeDelta kMeasureLatencyTime = TimeDelta::Seconds(11);
 // Utilized in round-trip latency measurements to avoid capturing noise samples.
 static const int kImpulseThreshold = 1000;
 static const char kTag[] = "[..........] ";
@@ -880,7 +880,7 @@
       .Times(AtLeast(kNumCallbacks));
   EXPECT_EQ(0, audio_device()->RegisterAudioCallback(&mock));
   StartPlayout();
-  test_is_done_.Wait(kTestTimeOutInMilliseconds);
+  test_is_done_.Wait(kTestTimeOut);
   StopPlayout();
 }
 
@@ -897,7 +897,7 @@
 
   EXPECT_EQ(0, audio_device()->RegisterAudioCallback(&mock));
   StartRecording();
-  test_is_done_.Wait(kTestTimeOutInMilliseconds);
+  test_is_done_.Wait(kTestTimeOut);
   StopRecording();
 }
 
@@ -918,7 +918,7 @@
   EXPECT_EQ(0, audio_device()->RegisterAudioCallback(&mock));
   StartPlayout();
   StartRecording();
-  test_is_done_.Wait(kTestTimeOutInMilliseconds);
+  test_is_done_.Wait(kTestTimeOut);
   StopRecording();
   StopPlayout();
 }
@@ -938,7 +938,7 @@
   // SetMaxPlayoutVolume();
   EXPECT_EQ(0, audio_device()->RegisterAudioCallback(&mock));
   StartPlayout();
-  test_is_done_.Wait(kTestTimeOutInMilliseconds);
+  test_is_done_.Wait(kTestTimeOut);
   StopPlayout();
 }
 
@@ -1059,7 +1059,7 @@
 // one packet on average. However, under more realistic conditions, the size
 // of the FIFO will vary more due to an unbalance between the two sides.
 // This test tries to verify that the device maintains a balanced callback-
-// sequence by running in loopback for kFullDuplexTimeInSec seconds while
+// sequence by running in loopback for kFullDuplexTime seconds while
 // measuring the size (max and average) of the FIFO. The size of the FIFO is
 // increased by the recording side and decreased by the playout side.
 // TODO(henrika): tune the final test parameters after running tests on several
@@ -1077,13 +1077,12 @@
   std::unique_ptr<FifoAudioStream> fifo_audio_stream(
       new FifoAudioStream(playout_frames_per_10ms_buffer()));
   mock.HandleCallbacks(&test_is_done_, fifo_audio_stream.get(),
-                       kFullDuplexTimeInSec * kNumCallbacksPerSecond);
+                       kFullDuplexTime.seconds() * kNumCallbacksPerSecond);
   SetMaxPlayoutVolume();
   EXPECT_EQ(0, audio_device()->RegisterAudioCallback(&mock));
   StartRecording();
   StartPlayout();
-  test_is_done_.Wait(
-      std::max(kTestTimeOutInMilliseconds, 1000 * kFullDuplexTimeInSec));
+  test_is_done_.Wait(std::max(kTestTimeOut, kFullDuplexTime));
   StopPlayout();
   StopRecording();
 
@@ -1110,20 +1109,19 @@
   std::unique_ptr<LatencyMeasuringAudioStream> latency_audio_stream(
       new LatencyMeasuringAudioStream(playout_frames_per_10ms_buffer()));
   mock.HandleCallbacks(&test_is_done_, latency_audio_stream.get(),
-                       kMeasureLatencyTimeInSec * kNumCallbacksPerSecond);
+                       kMeasureLatencyTime.seconds() * kNumCallbacksPerSecond);
   EXPECT_EQ(0, audio_device()->RegisterAudioCallback(&mock));
   SetMaxPlayoutVolume();
   DisableBuiltInAECIfAvailable();
   StartRecording();
   StartPlayout();
-  test_is_done_.Wait(
-      std::max(kTestTimeOutInMilliseconds, 1000 * kMeasureLatencyTimeInSec));
+  test_is_done_.Wait(std::max(kTestTimeOut, kMeasureLatencyTime));
   StopPlayout();
   StopRecording();
   // Verify that the correct number of transmitted impulses are detected.
   EXPECT_EQ(latency_audio_stream->num_latency_values(),
             static_cast<size_t>(
-                kImpulseFrequencyInHz * kMeasureLatencyTimeInSec - 1));
+                kImpulseFrequencyInHz * kMeasureLatencyTime.seconds() - 1));
   latency_audio_stream->PrintResults();
 }
 
diff --git a/sdk/android/native_unittests/stacktrace/stacktrace_unittest.cc b/sdk/android/native_unittests/stacktrace/stacktrace_unittest.cc
index 5cbd4aa..cc0e740 100644
--- a/sdk/android/native_unittests/stacktrace/stacktrace_unittest.cc
+++ b/sdk/android/native_unittests/stacktrace/stacktrace_unittest.cc
@@ -263,7 +263,7 @@
 
   // The message should appear after 3 sec. We'll wait up to 10 sec in an
   // attempt to not be flaky.
-  EXPECT_TRUE(sink.WhenFound().Wait(10000));
+  EXPECT_TRUE(sink.WhenFound().Wait(TimeDelta::Seconds(10)));
 
   // Unblock the thread and shut it down.
   ev.Set();
diff --git a/sdk/objc/unittests/RTCAudioSessionTest.mm b/sdk/objc/unittests/RTCAudioSessionTest.mm
index f62eb46..2a00909 100644
--- a/sdk/objc/unittests/RTCAudioSessionTest.mm
+++ b/sdk/objc/unittests/RTCAudioSessionTest.mm
@@ -287,15 +287,15 @@
 
   rtc::Event waitLock;
   rtc::Event waitCleanup;
-  constexpr int timeoutMs = 5000;
-  thread->PostTask([audioSession, &waitLock, &waitCleanup] {
+  constexpr webrtc::TimeDelta timeout = webrtc::TimeDelta::Seconds(5);
+  thread->PostTask([audioSession, &waitLock, &waitCleanup, timeout] {
     [audioSession lockForConfiguration];
     waitLock.Set();
-    waitCleanup.Wait(timeoutMs);
+    waitCleanup.Wait(timeout);
     [audioSession unlockForConfiguration];
   });
 
-  waitLock.Wait(timeoutMs);
+  waitLock.Wait(timeout);
   [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:0 error:&error];
   EXPECT_TRUE(error != nil);
   EXPECT_EQ(error.domain, kRTCAudioSessionErrorDomain);