Moving the pacer and the pacer thread to ChannelGroup.

This means all channels within the same group will share the same pacing queue and scheduler. It also means padding will be computed and sent by a single pacer. To accomplish this I also introduce a PacketRouter which finds the RTP module which owns the packet to be paced out.

BUG=4323
R=mflodman@webrtc.org, pbos@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/45549004

Cr-Commit-Position: refs/heads/master@{#8864}
diff --git a/webrtc/modules/bitrate_controller/bitrate_controller_unittest.cc b/webrtc/modules/bitrate_controller/bitrate_controller_unittest.cc
index e8d49c6..72831c7 100644
--- a/webrtc/modules/bitrate_controller/bitrate_controller_unittest.cc
+++ b/webrtc/modules/bitrate_controller/bitrate_controller_unittest.cc
@@ -46,11 +46,11 @@
   virtual void OnNetworkChanged(uint32_t bitrate,
                                 uint8_t fraction_loss,
                                 int64_t rtt) {
-    last_bitrate_ = bitrate;
+    last_bitrate_ = static_cast<int>(bitrate);
     last_fraction_loss_ = fraction_loss;
     last_rtt_ = rtt;
   }
-  uint32_t last_bitrate_;
+  int last_bitrate_;
   uint8_t last_fraction_loss_;
   int64_t last_rtt_;
 };
@@ -63,8 +63,10 @@
   virtual void SetUp() {
     controller_ =
         BitrateController::CreateBitrateController(&clock_, &bitrate_observer_);
-    controller_->SetStartBitrate(200000);
-    controller_->SetMinMaxBitrate(100000, 300000);
+    controller_->SetStartBitrate(kStartBitrateBps);
+    EXPECT_EQ(kStartBitrateBps, bitrate_observer_.last_bitrate_);
+    controller_->SetMinMaxBitrate(kMinBitrateBps, kMaxBitrateBps);
+    EXPECT_EQ(kStartBitrateBps, bitrate_observer_.last_bitrate_);
     bandwidth_observer_ = controller_->CreateRtcpBandwidthObserver();
   }
 
@@ -73,19 +75,38 @@
     delete controller_;
   }
 
+  const int kMinBitrateBps = 100000;
+  const int kStartBitrateBps = 200000;
+  const int kMaxBitrateBps = 300000;
+
+  const int kDefaultMinBitrateBps = 10000;
+  const int kDefaultMaxBitrateBps = 1000000000;
+
   webrtc::SimulatedClock clock_;
   TestBitrateObserver bitrate_observer_;
   BitrateController* controller_;
   RtcpBandwidthObserver* bandwidth_observer_;
 };
 
+TEST_F(BitrateControllerTest, DefaultMinMaxBitrate) {
+  // Receive successively lower REMBs, verify the reserved bitrate is deducted.
+  controller_->SetMinMaxBitrate(0, 0);
+  EXPECT_EQ(kStartBitrateBps, bitrate_observer_.last_bitrate_);
+  bandwidth_observer_->OnReceivedEstimatedBitrate(kDefaultMinBitrateBps / 2);
+  EXPECT_EQ(kDefaultMinBitrateBps, bitrate_observer_.last_bitrate_);
+  bandwidth_observer_->OnReceivedEstimatedBitrate(2 * kDefaultMaxBitrateBps);
+  clock_.AdvanceTimeMilliseconds(1000);
+  controller_->Process();
+  EXPECT_EQ(kDefaultMaxBitrateBps, bitrate_observer_.last_bitrate_);
+}
+
 TEST_F(BitrateControllerTest, OneBitrateObserverOneRtcpObserver) {
   // First REMB applies immediately.
   int64_t time_ms = 1001;
   webrtc::ReportBlockList report_blocks;
   report_blocks.push_back(CreateReportBlock(1, 2, 0, 1));
   bandwidth_observer_->OnReceivedEstimatedBitrate(200000);
-  EXPECT_EQ(200000u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(200000, bitrate_observer_.last_bitrate_);
   EXPECT_EQ(0, bitrate_observer_.last_fraction_loss_);
   EXPECT_EQ(0, bitrate_observer_.last_rtt_);
   bandwidth_observer_->OnReceivedRtcpReceiverReport(report_blocks, 50, time_ms);
@@ -98,7 +119,7 @@
   // Test bitrate increase 8% per second.
   report_blocks.push_back(CreateReportBlock(1, 2, 0, 21));
   bandwidth_observer_->OnReceivedRtcpReceiverReport(report_blocks, 50, time_ms);
-  EXPECT_EQ(217000u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(217000, bitrate_observer_.last_bitrate_);
   EXPECT_EQ(0, bitrate_observer_.last_fraction_loss_);
   EXPECT_EQ(50, bitrate_observer_.last_rtt_);
   time_ms += 1000;
@@ -106,7 +127,7 @@
   report_blocks.clear();
   report_blocks.push_back(CreateReportBlock(1, 2, 0, 41));
   bandwidth_observer_->OnReceivedRtcpReceiverReport(report_blocks, 50, time_ms);
-  EXPECT_EQ(235360u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(235360, bitrate_observer_.last_bitrate_);
   EXPECT_EQ(0, bitrate_observer_.last_fraction_loss_);
   EXPECT_EQ(50, bitrate_observer_.last_rtt_);
   time_ms += 1000;
@@ -114,41 +135,41 @@
   report_blocks.clear();
   report_blocks.push_back(CreateReportBlock(1, 2, 0, 61));
   bandwidth_observer_->OnReceivedRtcpReceiverReport(report_blocks, 50, time_ms);
-  EXPECT_EQ(255189u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(255189, bitrate_observer_.last_bitrate_);
   time_ms += 1000;
 
   report_blocks.clear();
   report_blocks.push_back(CreateReportBlock(1, 2, 0, 81));
   bandwidth_observer_->OnReceivedRtcpReceiverReport(report_blocks, 50, time_ms);
-  EXPECT_EQ(276604u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(276604, bitrate_observer_.last_bitrate_);
   time_ms += 1000;
 
   report_blocks.clear();
   report_blocks.push_back(CreateReportBlock(1, 2, 0, 801));
   bandwidth_observer_->OnReceivedRtcpReceiverReport(report_blocks, 50, time_ms);
-  EXPECT_EQ(299732u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(299732, bitrate_observer_.last_bitrate_);
   time_ms += 1000;
 
   // Reach max cap.
   report_blocks.clear();
   report_blocks.push_back(CreateReportBlock(1, 2, 0, 101));
   bandwidth_observer_->OnReceivedRtcpReceiverReport(report_blocks, 50, time_ms);
-  EXPECT_EQ(300000u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(300000, bitrate_observer_.last_bitrate_);
   time_ms += 1000;
 
   report_blocks.clear();
   report_blocks.push_back(CreateReportBlock(1, 2, 0, 141));
   bandwidth_observer_->OnReceivedRtcpReceiverReport(report_blocks, 50, time_ms);
-  EXPECT_EQ(300000u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(300000, bitrate_observer_.last_bitrate_);
 
   // Test that a low REMB trigger immediately.
   bandwidth_observer_->OnReceivedEstimatedBitrate(250000);
-  EXPECT_EQ(250000u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(250000, bitrate_observer_.last_bitrate_);
   EXPECT_EQ(0, bitrate_observer_.last_fraction_loss_);
   EXPECT_EQ(50, bitrate_observer_.last_rtt_);
 
   bandwidth_observer_->OnReceivedEstimatedBitrate(1000);
-  EXPECT_EQ(100000u, bitrate_observer_.last_bitrate_);  // Min cap.
+  EXPECT_EQ(100000, bitrate_observer_.last_bitrate_);  // Min cap.
 }
 
 TEST_F(BitrateControllerTest, OneBitrateObserverTwoRtcpObservers) {
@@ -167,7 +188,7 @@
   report_blocks.push_back(CreateReportBlock(1, 2, 0, 21));
   second_bandwidth_observer->OnReceivedRtcpReceiverReport(
       report_blocks, 100, 1);
-  EXPECT_EQ(217000u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(217000, bitrate_observer_.last_bitrate_);
   EXPECT_EQ(0, bitrate_observer_.last_fraction_loss_);
   EXPECT_EQ(100, bitrate_observer_.last_rtt_);
   time_ms += 500;
@@ -179,7 +200,7 @@
   time_ms += 500;
   second_bandwidth_observer->OnReceivedRtcpReceiverReport(
       report_blocks, 100, time_ms);
-  EXPECT_EQ(235360u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(235360, bitrate_observer_.last_bitrate_);
   EXPECT_EQ(0, bitrate_observer_.last_fraction_loss_);
   EXPECT_EQ(100, bitrate_observer_.last_rtt_);
   time_ms += 500;
@@ -189,20 +210,20 @@
   report_blocks.push_back(CreateReportBlock(1, 2, 0, 31));
   second_bandwidth_observer->OnReceivedRtcpReceiverReport(
       report_blocks, 100, time_ms);
-  EXPECT_EQ(235360u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(235360, bitrate_observer_.last_bitrate_);
   time_ms += 500;
 
   report_blocks.clear();
   report_blocks.push_back(CreateReportBlock(1, 2, 0, 41));
   bandwidth_observer_->OnReceivedRtcpReceiverReport(report_blocks, 50, time_ms);
-  EXPECT_EQ(255189u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(255189, bitrate_observer_.last_bitrate_);
 
   // Second report should not change estimate.
   report_blocks.clear();
   report_blocks.push_back(CreateReportBlock(1, 2, 0, 41));
   second_bandwidth_observer->OnReceivedRtcpReceiverReport(
       report_blocks, 100, time_ms);
-  EXPECT_EQ(255189u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(255189, bitrate_observer_.last_bitrate_);
   time_ms += 1000;
 
   // Reports from only one bandwidth observer is ok.
@@ -210,14 +231,14 @@
   report_blocks.push_back(CreateReportBlock(1, 2, 0, 61));
   second_bandwidth_observer->OnReceivedRtcpReceiverReport(
       report_blocks, 50, time_ms);
-  EXPECT_EQ(276604u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(276604, bitrate_observer_.last_bitrate_);
   time_ms += 1000;
 
   report_blocks.clear();
   report_blocks.push_back(CreateReportBlock(1, 2, 0, 81));
   second_bandwidth_observer->OnReceivedRtcpReceiverReport(
       report_blocks, 50, time_ms);
-  EXPECT_EQ(299732u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(299732, bitrate_observer_.last_bitrate_);
   time_ms += 1000;
 
   // Reach max cap.
@@ -225,33 +246,33 @@
   report_blocks.push_back(CreateReportBlock(1, 2, 0, 121));
   second_bandwidth_observer->OnReceivedRtcpReceiverReport(
       report_blocks, 50, time_ms);
-  EXPECT_EQ(300000u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(300000, bitrate_observer_.last_bitrate_);
   time_ms += 1000;
 
   report_blocks.clear();
   report_blocks.push_back(CreateReportBlock(1, 2, 0, 141));
   second_bandwidth_observer->OnReceivedRtcpReceiverReport(
       report_blocks, 50, time_ms);
-  EXPECT_EQ(300000u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(300000, bitrate_observer_.last_bitrate_);
 
   // Test that a low REMB trigger immediately.
   // We don't care which bandwidth observer that delivers the REMB.
   second_bandwidth_observer->OnReceivedEstimatedBitrate(250000);
-  EXPECT_EQ(250000u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(250000, bitrate_observer_.last_bitrate_);
   EXPECT_EQ(0, bitrate_observer_.last_fraction_loss_);
   EXPECT_EQ(50, bitrate_observer_.last_rtt_);
 
   // Min cap.
   bandwidth_observer_->OnReceivedEstimatedBitrate(1000);
-  EXPECT_EQ(100000u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(100000, bitrate_observer_.last_bitrate_);
   delete second_bandwidth_observer;
 }
 
 TEST_F(BitrateControllerTest, OneBitrateObserverMultipleReportBlocks) {
   uint32_t sequence_number[2] = {0, 0xFF00};
-  const uint32_t kStartBitrate = 200000;
-  const uint32_t kMinBitrate = 100000;
-  const uint32_t kMaxBitrate = 300000;
+  const int kStartBitrate = 200000;
+  const int kMinBitrate = 100000;
+  const int kMaxBitrate = 300000;
   controller_->SetStartBitrate(kStartBitrate);
   controller_->SetMinMaxBitrate(kMinBitrate, kMaxBitrate);
 
@@ -267,7 +288,7 @@
   // Receive a high REMB, test bitrate increase.
   bandwidth_observer_->OnReceivedEstimatedBitrate(400000);
 
-  uint32_t last_bitrate = 0;
+  int last_bitrate = 0;
   // Ramp up to max bitrate.
   for (int i = 0; i < 6; ++i) {
     report_blocks.push_back(CreateReportBlock(1, 2, 0, sequence_number[0]));
@@ -329,48 +350,48 @@
   // Receive successively lower REMBs, verify the reserved bitrate is deducted.
   controller_->SetReservedBitrate(0);
   bandwidth_observer_->OnReceivedEstimatedBitrate(400000);
-  EXPECT_EQ(200000u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(200000, bitrate_observer_.last_bitrate_);
   controller_->SetReservedBitrate(50000);
   bandwidth_observer_->OnReceivedEstimatedBitrate(400000);
-  EXPECT_EQ(150000u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(150000, bitrate_observer_.last_bitrate_);
 
   controller_->SetReservedBitrate(0);
   bandwidth_observer_->OnReceivedEstimatedBitrate(250000);
-  EXPECT_EQ(200000u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(200000, bitrate_observer_.last_bitrate_);
   controller_->SetReservedBitrate(50000);
   bandwidth_observer_->OnReceivedEstimatedBitrate(250000);
-  EXPECT_EQ(150000u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(150000, bitrate_observer_.last_bitrate_);
 
   controller_->SetReservedBitrate(0);
   bandwidth_observer_->OnReceivedEstimatedBitrate(200000);
-  EXPECT_EQ(200000u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(200000, bitrate_observer_.last_bitrate_);
   controller_->SetReservedBitrate(30000);
   bandwidth_observer_->OnReceivedEstimatedBitrate(200000);
-  EXPECT_EQ(170000u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(170000, bitrate_observer_.last_bitrate_);
 
   controller_->SetReservedBitrate(0);
   bandwidth_observer_->OnReceivedEstimatedBitrate(160000);
-  EXPECT_EQ(160000u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(160000, bitrate_observer_.last_bitrate_);
   controller_->SetReservedBitrate(30000);
   bandwidth_observer_->OnReceivedEstimatedBitrate(160000);
-  EXPECT_EQ(130000u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(130000, bitrate_observer_.last_bitrate_);
 
   controller_->SetReservedBitrate(0);
   bandwidth_observer_->OnReceivedEstimatedBitrate(120000);
-  EXPECT_EQ(120000u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(120000, bitrate_observer_.last_bitrate_);
   controller_->SetReservedBitrate(10000);
   bandwidth_observer_->OnReceivedEstimatedBitrate(120000);
-  EXPECT_EQ(110000u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(110000, bitrate_observer_.last_bitrate_);
 
   controller_->SetReservedBitrate(0);
   bandwidth_observer_->OnReceivedEstimatedBitrate(120000);
-  EXPECT_EQ(120000u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(120000, bitrate_observer_.last_bitrate_);
   controller_->SetReservedBitrate(50000);
   bandwidth_observer_->OnReceivedEstimatedBitrate(120000);
   // Limited by min bitrate.
-  EXPECT_EQ(100000u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(100000, bitrate_observer_.last_bitrate_);
 
   controller_->SetReservedBitrate(10000);
   bandwidth_observer_->OnReceivedEstimatedBitrate(1);
-  EXPECT_EQ(100000u, bitrate_observer_.last_bitrate_);
+  EXPECT_EQ(100000, bitrate_observer_.last_bitrate_);
 }