Account for rounding errors in dyanmic pacing mode.

Keeps behavior for old periodic processing.
Rounding sleep time reduced chance for small bursts of busy-looping when
time approaches 0.
Also fixes a DCHECK which may trigger if there are rounding errors in
the timing.

Bug: webrtc:10809
Change-Id: Iba8450f906fd6ab3b1da97e04507b16ac6bbde3f
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/160000
Reviewed-by: Philip Eliasson <philipel@webrtc.org>
Commit-Queue: Erik Språng <sprang@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29841}
diff --git a/modules/pacing/paced_sender.cc b/modules/pacing/paced_sender.cc
index 56eed92..0a3d3c0 100644
--- a/modules/pacing/paced_sender.cc
+++ b/modules/pacing/paced_sender.cc
@@ -150,8 +150,12 @@
   rtc::CritScope cs(&critsect_);
 
   Timestamp next_send_time = pacing_controller_.NextSendTime();
-  return std::max(TimeDelta::Zero(), next_send_time - clock_->CurrentTime())
-      .ms();
+  TimeDelta sleep_time =
+      std::max(TimeDelta::Zero(), next_send_time - clock_->CurrentTime());
+  if (process_mode_ == PacingController::ProcessMode::kDynamic) {
+    return sleep_time.RoundTo(TimeDelta::ms(1)).ms();
+  }
+  return sleep_time.ms();
 }
 
 void PacedSender::Process() {
diff --git a/modules/pacing/pacing_controller.cc b/modules/pacing/pacing_controller.cc
index 6a8e203..5b7dda3 100644
--- a/modules/pacing/pacing_controller.cc
+++ b/modules/pacing/pacing_controller.cc
@@ -586,8 +586,9 @@
         }
       } else {
         // In dynamic mode we should never try get a non-probe packet until
-        // the media debt is actually zero.
-        RTC_DCHECK(media_debt_.IsZero());
+        // the media debt is actually zero. Since there can be rounding errors,
+        // allow some discrepancy.
+        RTC_DCHECK_LE(media_debt_, media_rate_ * kMinSleepTime);
       }
     }
   }