Revert of Remove audio/video distinction for probe packets. (patchset #2 id:20001 of https://codereview.webrtc.org/2061193002/ )

Reason for revert:
Revert this because it broke the google3 import build.
http://webrtc-buildbot-master.mtv.corp.google.com:21000/builders/WebRTC%20google3%20Importer%20%28Shem%20TOT%29/builds/67/steps/blaze_regular_tests/logs/stdio

Original issue's description:
> Remove audio/video distinction for probe packets.
>
> Allows detecting large-enough audio packets as part of a probe,
> speculative fix for a rampup-time regression in M50. These packets are
> accounted on the send side when probing.
>
> BUG=webrtc:5985
> R=mflodman@webrtc.org, philipel@webrtc.org
>
> Committed: https://crrev.com/a7d88d38448f6a5677a017562765ab505b89d468
> Cr-Commit-Position: refs/heads/master@{#13210}

TBR=mflodman@webrtc.org,philipel@webrtc.org,pbos@webrtc.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=webrtc:5985

Review-Url: https://codereview.webrtc.org/2086633002
Cr-Commit-Position: refs/heads/master@{#13221}
diff --git a/webrtc/audio/audio_receive_stream.cc b/webrtc/audio/audio_receive_stream.cc
index a684003..c933f78 100644
--- a/webrtc/audio/audio_receive_stream.cc
+++ b/webrtc/audio/audio_receive_stream.cc
@@ -254,7 +254,7 @@
       arrival_time_ms = (packet_time.timestamp + 500) / 1000;
     size_t payload_size = length - header.headerLength;
     remote_bitrate_estimator_->IncomingPacket(arrival_time_ms, payload_size,
-                                              header);
+                                              header, false);
   }
 
   return channel_proxy_->ReceivedRTPPacket(packet, length, packet_time);
diff --git a/webrtc/audio/audio_receive_stream_unittest.cc b/webrtc/audio/audio_receive_stream_unittest.cc
index aed1d1a..8e26dd9 100644
--- a/webrtc/audio/audio_receive_stream_unittest.cc
+++ b/webrtc/audio/audio_receive_stream_unittest.cc
@@ -279,7 +279,7 @@
   EXPECT_CALL(*helper.remote_bitrate_estimator(),
               IncomingPacket(packet_time.timestamp / 1000,
                              rtp_packet.size() - kExpectedHeaderLength,
-                             VerifyHeaderExtension(expected_extension)))
+                             VerifyHeaderExtension(expected_extension), false))
       .Times(1);
   EXPECT_CALL(*helper.channel_proxy(),
               ReceivedRTPPacket(&rtp_packet[0],
diff --git a/webrtc/modules/congestion_controller/congestion_controller.cc b/webrtc/modules/congestion_controller/congestion_controller.cc
index a585e33..593f4a5 100644
--- a/webrtc/modules/congestion_controller/congestion_controller.cc
+++ b/webrtc/modules/congestion_controller/congestion_controller.cc
@@ -48,10 +48,11 @@
 
   void IncomingPacket(int64_t arrival_time_ms,
                       size_t payload_size,
-                      const RTPHeader& header) override {
+                      const RTPHeader& header,
+                      bool was_paced) override {
     CriticalSectionScoped cs(crit_sect_.get());
     PickEstimatorFromHeader(header);
-    rbe_->IncomingPacket(arrival_time_ms, payload_size, header);
+    rbe_->IncomingPacket(arrival_time_ms, payload_size, header, was_paced);
   }
 
   void Process() override {
diff --git a/webrtc/modules/congestion_controller/delay_based_bwe.cc b/webrtc/modules/congestion_controller/delay_based_bwe.cc
index 3a9537e..27cbf01 100644
--- a/webrtc/modules/congestion_controller/delay_based_bwe.cc
+++ b/webrtc/modules/congestion_controller/delay_based_bwe.cc
@@ -198,14 +198,15 @@
   for (const auto& packet_info : packet_feedback_vector) {
     IncomingPacketInfo(packet_info.arrival_time_ms,
                        ConvertMsTo24Bits(packet_info.send_time_ms),
-                       packet_info.payload_size, 0,
+                       packet_info.payload_size, 0, packet_info.was_paced,
                        packet_info.probe_cluster_id);
   }
 }
 
 void DelayBasedBwe::IncomingPacket(int64_t arrival_time_ms,
                                    size_t payload_size,
-                                   const RTPHeader& header) {
+                                   const RTPHeader& header,
+                                   bool was_paced) {
   RTC_DCHECK(network_thread_.CalledOnValidThread());
   if (!header.extension.hasAbsoluteSendTime) {
     // NOTE! The BitrateEstimatorTest relies on this EXACT log line.
@@ -214,12 +215,14 @@
     return;
   }
   IncomingPacketInfo(arrival_time_ms, header.extension.absoluteSendTime,
-                     payload_size, header.ssrc, PacketInfo::kNotAProbe);
+                     payload_size, header.ssrc, was_paced,
+                     PacketInfo::kNotAProbe);
 }
 
 void DelayBasedBwe::IncomingPacket(int64_t arrival_time_ms,
                                    size_t payload_size,
                                    const RTPHeader& header,
+                                   bool was_paced,
                                    int probe_cluster_id) {
   RTC_DCHECK(network_thread_.CalledOnValidThread());
   if (!header.extension.hasAbsoluteSendTime) {
@@ -229,13 +232,14 @@
     return;
   }
   IncomingPacketInfo(arrival_time_ms, header.extension.absoluteSendTime,
-                     payload_size, header.ssrc, probe_cluster_id);
+                     payload_size, header.ssrc, was_paced, probe_cluster_id);
 }
 
 void DelayBasedBwe::IncomingPacketInfo(int64_t arrival_time_ms,
                                        uint32_t send_time_24bits,
                                        size_t payload_size,
                                        uint32_t ssrc,
+                                       bool was_paced,
                                        int probe_cluster_id) {
   assert(send_time_24bits < (1ul << 24));
   // Shift up send time to use the full 32 bits that inter_arrival works with,
diff --git a/webrtc/modules/congestion_controller/delay_based_bwe.h b/webrtc/modules/congestion_controller/delay_based_bwe.h
index 56214de..05fbbd8 100644
--- a/webrtc/modules/congestion_controller/delay_based_bwe.h
+++ b/webrtc/modules/congestion_controller/delay_based_bwe.h
@@ -40,11 +40,13 @@
 
   void IncomingPacket(int64_t arrival_time_ms,
                       size_t payload_size,
-                      const RTPHeader& header) override;
+                      const RTPHeader& header,
+                      bool was_paced) override;
 
   void IncomingPacket(int64_t arrival_time_ms,
                       size_t payload_size,
                       const RTPHeader& header,
+                      bool was_paced,
                       int probe_cluster_id);
 
   // This class relies on Process() being called periodically (at least once
@@ -110,6 +112,7 @@
                           uint32_t send_time_24bits,
                           size_t payload_size,
                           uint32_t ssrc,
+                          bool was_paced,
                           int probe_cluster_id);
 
   void ComputeClusters(std::list<Cluster>* clusters) const;
diff --git a/webrtc/modules/congestion_controller/delay_based_bwe_unittest.cc b/webrtc/modules/congestion_controller/delay_based_bwe_unittest.cc
index a78dd7f..7efd29f 100644
--- a/webrtc/modules/congestion_controller/delay_based_bwe_unittest.cc
+++ b/webrtc/modules/congestion_controller/delay_based_bwe_unittest.cc
@@ -33,6 +33,7 @@
                       int64_t arrival_time,
                       uint32_t rtp_timestamp,
                       uint32_t absolute_send_time,
+                      bool was_paced,
                       int probe_cluster_id) {
     RTPHeader header;
     memset(&header, 0, sizeof(header));
@@ -41,7 +42,7 @@
     header.extension.hasAbsoluteSendTime = true;
     header.extension.absoluteSendTime = absolute_send_time;
     bwe_.IncomingPacket(arrival_time + kArrivalTimeClockOffsetMs, payload_size,
-                        header, probe_cluster_id);
+                        header, was_paced, probe_cluster_id);
   }
 
   void OnReceiveBitrateChanged(const std::vector<uint32_t>& ssrcs,
@@ -73,7 +74,8 @@
   for (int i = 0; i < kNumProbes; ++i) {
     clock_.AdvanceTimeMilliseconds(10);
     now_ms = clock_.TimeInMilliseconds();
-    IncomingPacket(0, 1000, now_ms, 90 * now_ms, AbsSendTime(now_ms, 1000), 0);
+    IncomingPacket(0, 1000, now_ms, 90 * now_ms, AbsSendTime(now_ms, 1000),
+                   true, 0);
   }
   EXPECT_TRUE(bitrate_updated());
 
@@ -81,7 +83,8 @@
   for (int i = 0; i < kNumProbes; ++i) {
     clock_.AdvanceTimeMilliseconds(5);
     now_ms = clock_.TimeInMilliseconds();
-    IncomingPacket(0, 1000, now_ms, 90 * now_ms, AbsSendTime(now_ms, 1000), 1);
+    IncomingPacket(0, 1000, now_ms, 90 * now_ms, AbsSendTime(now_ms, 1000),
+                   true, 1);
   }
 
   EXPECT_TRUE(bitrate_updated());
@@ -95,11 +98,12 @@
   for (int i = 0; i < kNumProbes; ++i) {
     clock_.AdvanceTimeMilliseconds(5);
     now_ms = clock_.TimeInMilliseconds();
-    IncomingPacket(0, 1000, now_ms, 90 * now_ms, AbsSendTime(now_ms, 1000), 0);
+    IncomingPacket(0, 1000, now_ms, 90 * now_ms, AbsSendTime(now_ms, 1000),
+                   true, 0);
     // Non-paced packet, arriving 5 ms after.
     clock_.AdvanceTimeMilliseconds(5);
     IncomingPacket(0, PacedSender::kMinProbePacketSize + 1, now_ms, 90 * now_ms,
-                   AbsSendTime(now_ms, 1000), PacketInfo::kNotAProbe);
+                   AbsSendTime(now_ms, 1000), false, PacketInfo::kNotAProbe);
   }
 
   EXPECT_TRUE(bitrate_updated());
@@ -117,7 +121,7 @@
     now_ms = clock_.TimeInMilliseconds();
     send_time_ms += 10;
     IncomingPacket(0, 1000, now_ms, 90 * send_time_ms,
-                   AbsSendTime(send_time_ms, 1000), 0);
+                   AbsSendTime(send_time_ms, 1000), true, 0);
   }
 
   // Second burst sent at 8 * 1000 / 5 = 1600 kbps, arriving at 8 * 1000 / 8 =
@@ -127,7 +131,7 @@
     now_ms = clock_.TimeInMilliseconds();
     send_time_ms += 5;
     IncomingPacket(0, 1000, now_ms, send_time_ms,
-                   AbsSendTime(send_time_ms, 1000), 1);
+                   AbsSendTime(send_time_ms, 1000), true, 1);
   }
 
   EXPECT_TRUE(bitrate_updated());
@@ -144,7 +148,7 @@
     send_time_ms += 10;
     now_ms = clock_.TimeInMilliseconds();
     IncomingPacket(0, 1000, now_ms, 90 * send_time_ms,
-                   AbsSendTime(send_time_ms, 1000), 23);
+                   AbsSendTime(send_time_ms, 1000), true, 23);
   }
 
   EXPECT_TRUE(bitrate_updated());
@@ -161,7 +165,7 @@
     send_time_ms += 10;
     now_ms = clock_.TimeInMilliseconds();
     IncomingPacket(0, 1000, now_ms, 90 * send_time_ms,
-                   AbsSendTime(send_time_ms, 1000), 0);
+                   AbsSendTime(send_time_ms, 1000), true, 0);
   }
 
   EXPECT_FALSE(bitrate_updated());
@@ -177,7 +181,7 @@
     send_time_ms += 5;
     now_ms = clock_.TimeInMilliseconds();
     IncomingPacket(0, 1000, now_ms, 90 * send_time_ms,
-                   AbsSendTime(send_time_ms, 1000), 1);
+                   AbsSendTime(send_time_ms, 1000), true, 1);
   }
 
   EXPECT_TRUE(bitrate_updated());
@@ -194,7 +198,7 @@
     send_time_ms += 1;
     now_ms = clock_.TimeInMilliseconds();
     IncomingPacket(0, 1000, now_ms, 90 * send_time_ms,
-                   AbsSendTime(send_time_ms, 1000), 1);
+                   AbsSendTime(send_time_ms, 1000), true, 1);
   }
 
   EXPECT_TRUE(bitrate_updated());
@@ -209,7 +213,7 @@
     clock_.AdvanceTimeMilliseconds(10);
     now_ms = clock_.TimeInMilliseconds();
     IncomingPacket(0, PacedSender::kMinProbePacketSize, now_ms, 90 * now_ms,
-                   AbsSendTime(now_ms, 1000), 1);
+                   AbsSendTime(now_ms, 1000), true, 1);
   }
 
   EXPECT_FALSE(bitrate_updated());
@@ -219,7 +223,8 @@
   for (int i = 0; i < kNumProbes; ++i) {
     clock_.AdvanceTimeMilliseconds(10);
     now_ms = clock_.TimeInMilliseconds();
-    IncomingPacket(0, 1000, now_ms, 90 * now_ms, AbsSendTime(now_ms, 1000), 1);
+    IncomingPacket(0, 1000, now_ms, 90 * now_ms, AbsSendTime(now_ms, 1000),
+                   true, 1);
   }
 
   // Wait long enough so that we can call Process again.
diff --git a/webrtc/modules/remote_bitrate_estimator/include/mock/mock_remote_bitrate_estimator.h b/webrtc/modules/remote_bitrate_estimator/include/mock/mock_remote_bitrate_estimator.h
index 6177303..2c35df8 100644
--- a/webrtc/modules/remote_bitrate_estimator/include/mock/mock_remote_bitrate_estimator.h
+++ b/webrtc/modules/remote_bitrate_estimator/include/mock/mock_remote_bitrate_estimator.h
@@ -28,7 +28,7 @@
  public:
   MOCK_METHOD1(IncomingPacketFeedbackVector,
                void(const std::vector<PacketInfo>&));
-  MOCK_METHOD3(IncomingPacket, void(int64_t, size_t, const RTPHeader&));
+  MOCK_METHOD4(IncomingPacket, void(int64_t, size_t, const RTPHeader&, bool));
   MOCK_METHOD1(RemoveStream, void(uint32_t));
   MOCK_CONST_METHOD2(LatestEstimate, bool(std::vector<uint32_t>*, uint32_t*));
 
diff --git a/webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h b/webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h
index d7d8d2c..e56c273 100644
--- a/webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h
+++ b/webrtc/modules/remote_bitrate_estimator/include/remote_bitrate_estimator.h
@@ -58,7 +58,8 @@
   // Note that |arrival_time_ms| can be of an arbitrary time base.
   virtual void IncomingPacket(int64_t arrival_time_ms,
                               size_t payload_size,
-                              const RTPHeader& header) = 0;
+                              const RTPHeader& header,
+                              bool was_paced) = 0;
 
   // Removes all data for |ssrc|.
   virtual void RemoveStream(uint32_t ssrc) = 0;
diff --git a/webrtc/modules/remote_bitrate_estimator/include/send_time_history.h b/webrtc/modules/remote_bitrate_estimator/include/send_time_history.h
index f59790b..a50faf6 100644
--- a/webrtc/modules/remote_bitrate_estimator/include/send_time_history.h
+++ b/webrtc/modules/remote_bitrate_estimator/include/send_time_history.h
@@ -26,6 +26,7 @@
 
   void AddAndRemoveOld(uint16_t sequence_number,
                        size_t length,
+                       bool was_paced,
                        int probe_cluster_id);
   bool OnSentPacket(uint16_t sequence_number, int64_t timestamp);
   // Look up PacketInfo for a sent packet, based on the sequence number, and
diff --git a/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.cc b/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.cc
index 21c54d1..21006b5 100644
--- a/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.cc
+++ b/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.cc
@@ -211,14 +211,14 @@
   for (const auto& packet_info : packet_feedback_vector) {
     IncomingPacketInfo(packet_info.arrival_time_ms,
                        ConvertMsTo24Bits(packet_info.send_time_ms),
-                       packet_info.payload_size, 0);
+                       packet_info.payload_size, 0, packet_info.was_paced);
   }
 }
 
-void RemoteBitrateEstimatorAbsSendTime::IncomingPacket(
-    int64_t arrival_time_ms,
-    size_t payload_size,
-    const RTPHeader& header) {
+void RemoteBitrateEstimatorAbsSendTime::IncomingPacket(int64_t arrival_time_ms,
+                                                       size_t payload_size,
+                                                       const RTPHeader& header,
+                                                       bool was_paced) {
   RTC_DCHECK(network_thread_.CalledOnValidThread());
   if (!header.extension.hasAbsoluteSendTime) {
     LOG(LS_WARNING) << "RemoteBitrateEstimatorAbsSendTimeImpl: Incoming packet "
@@ -226,14 +226,15 @@
     return;
   }
   IncomingPacketInfo(arrival_time_ms, header.extension.absoluteSendTime,
-                     payload_size, header.ssrc);
+                     payload_size, header.ssrc, was_paced);
 }
 
 void RemoteBitrateEstimatorAbsSendTime::IncomingPacketInfo(
     int64_t arrival_time_ms,
     uint32_t send_time_24bits,
     size_t payload_size,
-    uint32_t ssrc) {
+    uint32_t ssrc,
+    bool was_paced) {
   assert(send_time_24bits < (1ul << 24));
   // Shift up send time to use the full 32 bits that inter_arrival works with,
   // so wrapping works properly.
@@ -263,6 +264,10 @@
   uint32_t ts_delta = 0;
   int64_t t_delta = 0;
   int size_delta = 0;
+  // For now only try to detect probes while we don't have a valid estimate, and
+  // make sure the packet was paced. We currently assume that only packets
+  // larger than 200 bytes are paced by the sender.
+  was_paced = was_paced && payload_size > PacedSender::kMinProbePacketSize;
   bool update_estimate = false;
   uint32_t target_bitrate_bps = 0;
   std::vector<uint32_t> ssrcs;
@@ -274,10 +279,7 @@
     RTC_DCHECK(estimator_.get());
     ssrcs_[ssrc] = now_ms;
 
-    // For now only try to detect probes while we don't have a valid estimate.
-    // We currently assume that only packets larger than 200 bytes are paced by
-    // the sender.
-    if (payload_size > PacedSender::kMinProbePacketSize &&
+    if (was_paced &&
         (!remote_rate_.ValidEstimate() ||
          now_ms - first_packet_time_ms_ < kInitialProbingIntervalMs)) {
       // TODO(holmer): Use a map instead to get correct order?
diff --git a/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.h b/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.h
index a1274d6..e84c749 100644
--- a/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.h
+++ b/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.h
@@ -76,7 +76,8 @@
 
   void IncomingPacket(int64_t arrival_time_ms,
                       size_t payload_size,
-                      const RTPHeader& header) override;
+                      const RTPHeader& header,
+                      bool was_paced) override;
   // This class relies on Process() being called periodically (at least once
   // every other second) for streams to be timed out properly. Therefore it
   // shouldn't be detached from the ProcessThread except if it's about to be
@@ -101,7 +102,8 @@
   void IncomingPacketInfo(int64_t arrival_time_ms,
                           uint32_t send_time_24bits,
                           size_t payload_size,
-                          uint32_t ssrc);
+                          uint32_t ssrc,
+                          bool was_paced);
 
   void ComputeClusters(std::list<Cluster>* clusters) const;
 
diff --git a/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time_unittest.cc b/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time_unittest.cc
index 611a18d..6f8696a 100644
--- a/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time_unittest.cc
+++ b/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time_unittest.cc
@@ -90,7 +90,7 @@
   // RemoteBitrateEstimator.
   const int64_t kStreamTimeOutMs = 2000;
   const int64_t kProcessIntervalMs = 1000;
-  IncomingPacket(0, 1000, clock_.TimeInMilliseconds(), 0, 0);
+  IncomingPacket(0, 1000, clock_.TimeInMilliseconds(), 0, 0, true);
   clock_.AdvanceTimeMilliseconds(kStreamTimeOutMs + 1);
   // Trigger timeout.
   bitrate_estimator_->Process();
@@ -106,14 +106,16 @@
   for (int i = 0; i < kProbeLength; ++i) {
     clock_.AdvanceTimeMilliseconds(10);
     now_ms = clock_.TimeInMilliseconds();
-    IncomingPacket(0, 1000, now_ms, 90 * now_ms, AbsSendTime(now_ms, 1000));
+    IncomingPacket(0, 1000, now_ms, 90 * now_ms, AbsSendTime(now_ms, 1000),
+                   true);
   }
 
   // Second burst sent at 8 * 1000 / 5 = 1600 kbps.
   for (int i = 0; i < kProbeLength; ++i) {
     clock_.AdvanceTimeMilliseconds(5);
     now_ms = clock_.TimeInMilliseconds();
-    IncomingPacket(0, 1000, now_ms, 90 * now_ms, AbsSendTime(now_ms, 1000));
+    IncomingPacket(0, 1000, now_ms, 90 * now_ms, AbsSendTime(now_ms, 1000),
+                   true);
   }
 
   bitrate_estimator_->Process();
@@ -130,10 +132,12 @@
   for (int i = 0; i < kProbeLength; ++i) {
     clock_.AdvanceTimeMilliseconds(5);
     now_ms = clock_.TimeInMilliseconds();
-    IncomingPacket(0, 1000, now_ms, 90 * now_ms, AbsSendTime(now_ms, 1000));
+    IncomingPacket(0, 1000, now_ms, 90 * now_ms, AbsSendTime(now_ms, 1000),
+                   true);
     // Non-paced packet, arriving 5 ms after.
     clock_.AdvanceTimeMilliseconds(5);
-    IncomingPacket(0, 100, now_ms, 90 * now_ms, AbsSendTime(now_ms, 1000));
+    IncomingPacket(0, 100, now_ms, 90 * now_ms, AbsSendTime(now_ms, 1000),
+                   false);
   }
 
   bitrate_estimator_->Process();
@@ -154,7 +158,7 @@
     now_ms = clock_.TimeInMilliseconds();
     send_time_ms += 10;
     IncomingPacket(0, 1000, now_ms, 90 * send_time_ms,
-                   AbsSendTime(send_time_ms, 1000));
+                   AbsSendTime(send_time_ms, 1000), true);
   }
 
   // Second burst sent at 8 * 1000 / 5 = 1600 kbps, arriving at 8 * 1000 / 8 =
@@ -164,7 +168,7 @@
     now_ms = clock_.TimeInMilliseconds();
     send_time_ms += 5;
     IncomingPacket(0, 1000, now_ms, send_time_ms,
-                   AbsSendTime(send_time_ms, 1000));
+                   AbsSendTime(send_time_ms, 1000), true);
   }
 
   bitrate_estimator_->Process();
@@ -184,7 +188,7 @@
     send_time_ms += 10;
     now_ms = clock_.TimeInMilliseconds();
     IncomingPacket(0, 1000, now_ms, 90 * send_time_ms,
-                   AbsSendTime(send_time_ms, 1000));
+                   AbsSendTime(send_time_ms, 1000), true);
   }
 
   bitrate_estimator_->Process();
@@ -203,7 +207,7 @@
     send_time_ms += 10;
     now_ms = clock_.TimeInMilliseconds();
     IncomingPacket(0, 1000, now_ms, 90 * send_time_ms,
-                   AbsSendTime(send_time_ms, 1000));
+                   AbsSendTime(send_time_ms, 1000), true);
   }
 
   bitrate_estimator_->Process();
@@ -221,7 +225,7 @@
     send_time_ms += 5;
     now_ms = clock_.TimeInMilliseconds();
     IncomingPacket(0, 1000, now_ms, 90 * send_time_ms,
-                   AbsSendTime(send_time_ms, 1000));
+                   AbsSendTime(send_time_ms, 1000), true);
   }
 
   bitrate_estimator_->Process();
@@ -241,7 +245,7 @@
     send_time_ms += 1;
     now_ms = clock_.TimeInMilliseconds();
     IncomingPacket(0, 1000, now_ms, 90 * send_time_ms,
-                   AbsSendTime(send_time_ms, 1000));
+                   AbsSendTime(send_time_ms, 1000), true);
   }
 
   bitrate_estimator_->Process();
@@ -257,7 +261,8 @@
   for (int i = 0; i < kProbeLength; ++i) {
     clock_.AdvanceTimeMilliseconds(10);
     now_ms = clock_.TimeInMilliseconds();
-    IncomingPacket(0, 200, now_ms, 90 * now_ms, AbsSendTime(now_ms, 1000));
+    IncomingPacket(0, 200, now_ms, 90 * now_ms, AbsSendTime(now_ms, 1000),
+                   true);
   }
 
   bitrate_estimator_->Process();
@@ -268,7 +273,8 @@
   for (int i = 0; i < kProbeLength; ++i) {
     clock_.AdvanceTimeMilliseconds(10);
     now_ms = clock_.TimeInMilliseconds();
-    IncomingPacket(0, 1000, now_ms, 90 * now_ms, AbsSendTime(now_ms, 1000));
+    IncomingPacket(0, 1000, now_ms, 90 * now_ms, AbsSendTime(now_ms, 1000),
+                   true);
   }
 
   // Wait long enough so that we can call Process again.
diff --git a/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.cc b/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.cc
index 182cbf9..d391f03 100644
--- a/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.cc
+++ b/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.cc
@@ -67,10 +67,10 @@
   }
 }
 
-void RemoteBitrateEstimatorSingleStream::IncomingPacket(
-    int64_t arrival_time_ms,
-    size_t payload_size,
-    const RTPHeader& header) {
+void RemoteBitrateEstimatorSingleStream::IncomingPacket(int64_t arrival_time_ms,
+                                                        size_t payload_size,
+                                                        const RTPHeader& header,
+                                                        bool was_paced) {
   uint32_t ssrc = header.ssrc;
   uint32_t rtp_timestamp = header.timestamp +
       header.extension.transmissionTimeOffset;
diff --git a/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.h b/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.h
index ff17c61..244dd42 100644
--- a/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.h
+++ b/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.h
@@ -31,7 +31,8 @@
 
   void IncomingPacket(int64_t arrival_time_ms,
                       size_t payload_size,
-                      const RTPHeader& header) override;
+                      const RTPHeader& header,
+                      bool was_paced) override;
   void Process() override;
   int64_t TimeUntilNextProcess() override;
   void OnRttUpdate(int64_t avg_rtt_ms, int64_t max_rtt_ms) override;
diff --git a/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_unittest_helper.cc b/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_unittest_helper.cc
index f958809..3cff498 100644
--- a/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_unittest_helper.cc
+++ b/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_unittest_helper.cc
@@ -224,7 +224,8 @@
                                                 size_t payload_size,
                                                 int64_t arrival_time,
                                                 uint32_t rtp_timestamp,
-                                                uint32_t absolute_send_time) {
+                                                uint32_t absolute_send_time,
+                                                bool was_paced) {
   RTPHeader header;
   memset(&header, 0, sizeof(header));
   header.ssrc = ssrc;
@@ -232,7 +233,7 @@
   header.extension.hasAbsoluteSendTime = true;
   header.extension.absoluteSendTime = absolute_send_time;
   bitrate_estimator_->IncomingPacket(arrival_time + kArrivalTimeClockOffsetMs,
-                                     payload_size, header);
+                                     payload_size, header, was_paced);
 }
 
 // Generates a frame of packets belonging to a stream at a given bitrate and
@@ -257,7 +258,7 @@
                                    clock_.TimeInMicroseconds());
     IncomingPacket(packet->ssrc, packet->size,
                    (packet->arrival_time + 500) / 1000, packet->rtp_timestamp,
-                   AbsSendTime(packet->send_time, 1000000));
+                   AbsSendTime(packet->send_time, 1000000), true);
     if (bitrate_observer_->updated()) {
       if (bitrate_observer_->latest_bitrate() < bitrate_bps)
         overuse = true;
@@ -330,7 +331,7 @@
     }
 
     IncomingPacket(kDefaultSsrc, kMtu, clock_.TimeInMilliseconds(), timestamp,
-                   absolute_send_time);
+                   absolute_send_time, true);
     clock_.AdvanceTimeMilliseconds(1000 / kFramerate);
     timestamp += 90 * kFrameIntervalMs;
     absolute_send_time = AddAbsSendTime(absolute_send_time,
@@ -368,7 +369,7 @@
     }
 
     IncomingPacket(kDefaultSsrc, kMtu, clock_.TimeInMilliseconds(), timestamp,
-                   absolute_send_time);
+                   absolute_send_time, true);
     clock_.AdvanceTimeMilliseconds(kFrameIntervalMs);
     timestamp += 90 * kFrameIntervalMs;
     absolute_send_time = AddAbsSendTime(absolute_send_time,
@@ -385,12 +386,12 @@
     absolute_send_time = AddAbsSendTime(absolute_send_time,
                                         2 * kFrameIntervalAbsSendTime);
     IncomingPacket(kDefaultSsrc, 1000, clock_.TimeInMilliseconds(), timestamp,
-                   absolute_send_time);
-    IncomingPacket(
-        kDefaultSsrc, 1000, clock_.TimeInMilliseconds(),
-        timestamp - 90 * kFrameIntervalMs,
-        AddAbsSendTime(absolute_send_time,
-                       -static_cast<int>(kFrameIntervalAbsSendTime)));
+                   absolute_send_time, true);
+    IncomingPacket(kDefaultSsrc, 1000, clock_.TimeInMilliseconds(),
+                   timestamp - 90 * kFrameIntervalMs,
+                   AddAbsSendTime(absolute_send_time,
+                                  -static_cast<int>(kFrameIntervalAbsSendTime)),
+                   true);
   }
   bitrate_estimator_->Process();
   EXPECT_TRUE(bitrate_observer_->updated());
@@ -523,7 +524,7 @@
   // time for the first estimate to be generated and for Process() to be called.
   for (int i = 0; i <= 6 * kFramerate; ++i) {
     IncomingPacket(kDefaultSsrc, 1000, clock_.TimeInMilliseconds(), timestamp,
-                   absolute_send_time);
+                   absolute_send_time, true);
     bitrate_estimator_->Process();
     clock_.AdvanceTimeMilliseconds(kFrameIntervalMs);
     timestamp += 90 * kFrameIntervalMs;
@@ -544,7 +545,7 @@
       // Insert |kTimestampGroupLength| frames with just 1 timestamp ticks in
       // between. Should be treated as part of the same group by the estimator.
       IncomingPacket(kDefaultSsrc, 100, clock_.TimeInMilliseconds(), timestamp,
-                     absolute_send_time);
+                     absolute_send_time, true);
       clock_.AdvanceTimeMilliseconds(kFrameIntervalMs / kTimestampGroupLength);
       timestamp += 1;
       absolute_send_time = AddAbsSendTime(absolute_send_time,
@@ -574,7 +575,7 @@
 
   for (size_t i = 0; i < 3000; ++i) {
     IncomingPacket(kDefaultSsrc, 1000, clock_.TimeInMilliseconds(), timestamp,
-                   absolute_send_time);
+                   absolute_send_time, true);
     timestamp += kFrameIntervalMs;
     clock_.AdvanceTimeMilliseconds(kFrameIntervalMs);
     absolute_send_time = AddAbsSendTime(absolute_send_time,
@@ -591,7 +592,7 @@
   bitrate_estimator_->Process();
   for (size_t i = 0; i < 21; ++i) {
     IncomingPacket(kDefaultSsrc, 1000, clock_.TimeInMilliseconds(), timestamp,
-                   absolute_send_time);
+                   absolute_send_time, true);
     timestamp += kFrameIntervalMs;
     clock_.AdvanceTimeMilliseconds(2 * kFrameIntervalMs);
     absolute_send_time = AddAbsSendTime(absolute_send_time,
diff --git a/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_unittest_helper.h b/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_unittest_helper.h
index b4bff67..12ac9e8 100644
--- a/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_unittest_helper.h
+++ b/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_unittest_helper.h
@@ -173,7 +173,8 @@
                       size_t payload_size,
                       int64_t arrival_time,
                       uint32_t rtp_timestamp,
-                      uint32_t absolute_send_time);
+                      uint32_t absolute_send_time,
+                      bool was_paced);
 
   // Generates a frame of packets belonging to a stream at a given bitrate and
   // with a given ssrc. The stream is pushed through a very simple simulated
diff --git a/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy.cc b/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy.cc
index 2172bce..eace9fc 100644
--- a/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy.cc
+++ b/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy.cc
@@ -43,7 +43,8 @@
 
 void RemoteEstimatorProxy::IncomingPacket(int64_t arrival_time_ms,
                                           size_t payload_size,
-                                          const RTPHeader& header) {
+                                          const RTPHeader& header,
+                                          bool was_paced) {
   if (!header.extension.hasTransportSequenceNumber) {
     LOG(LS_WARNING) << "RemoteEstimatorProxy: Incoming packet "
                        "is missing the transport sequence number extension!";
diff --git a/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy.h b/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy.h
index 66373e2..93d5244 100644
--- a/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy.h
+++ b/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy.h
@@ -39,7 +39,8 @@
       const std::vector<PacketInfo>& packet_feedback_vector) override;
   void IncomingPacket(int64_t arrival_time_ms,
                       size_t payload_size,
-                      const RTPHeader& header) override;
+                      const RTPHeader& header,
+                      bool was_paced) override;
   void RemoveStream(uint32_t ssrc) override {}
   bool LatestEstimate(std::vector<unsigned int>* ssrcs,
                       unsigned int* bitrate_bps) const override;
diff --git a/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy_unittest.cc b/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy_unittest.cc
index a1264b2..3c3c729 100644
--- a/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy_unittest.cc
+++ b/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy_unittest.cc
@@ -37,7 +37,7 @@
     header.extension.hasTransportSequenceNumber = true;
     header.extension.transportSequenceNumber = seq;
     header.ssrc = kMediaSsrc;
-    proxy_.IncomingPacket(time_ms, kDefaultPacketSize, header);
+    proxy_.IncomingPacket(time_ms, kDefaultPacketSize, header, true);
   }
 
   void Process() {
diff --git a/webrtc/modules/remote_bitrate_estimator/send_time_history.cc b/webrtc/modules/remote_bitrate_estimator/send_time_history.cc
index 2784df6..674028e 100644
--- a/webrtc/modules/remote_bitrate_estimator/send_time_history.cc
+++ b/webrtc/modules/remote_bitrate_estimator/send_time_history.cc
@@ -28,6 +28,7 @@
 
 void SendTimeHistory::AddAndRemoveOld(uint16_t sequence_number,
                                       size_t length,
+                                      bool was_paced,
                                       int probe_cluster_id) {
   EraseOld();
 
@@ -35,8 +36,9 @@
     oldest_sequence_number_ = sequence_number;
 
   history_.insert(std::pair<uint16_t, PacketInfo>(
-      sequence_number, PacketInfo(clock_->TimeInMilliseconds(), 0, -1,
-                                  sequence_number, length, probe_cluster_id)));
+      sequence_number,
+      PacketInfo(clock_->TimeInMilliseconds(), 0, -1, sequence_number, length,
+                 was_paced, probe_cluster_id)));
 }
 
 bool SendTimeHistory::OnSentPacket(uint16_t sequence_number,
diff --git a/webrtc/modules/remote_bitrate_estimator/send_time_history_unittest.cc b/webrtc/modules/remote_bitrate_estimator/send_time_history_unittest.cc
index b181a3d..227391a 100644
--- a/webrtc/modules/remote_bitrate_estimator/send_time_history_unittest.cc
+++ b/webrtc/modules/remote_bitrate_estimator/send_time_history_unittest.cc
@@ -33,9 +33,11 @@
 
   void AddPacketWithSendTime(uint16_t sequence_number,
                              size_t length,
+                             bool was_paced,
                              int64_t send_time_ms,
                              int probe_cluster_id) {
-    history_.AddAndRemoveOld(sequence_number, length, probe_cluster_id);
+    history_.AddAndRemoveOld(sequence_number, length, was_paced,
+                             probe_cluster_id);
     history_.OnSentPacket(sequence_number, send_time_ms);
   }
 
@@ -46,28 +48,39 @@
 // Help class extended so we can do EXPECT_EQ and collections.
 class PacketInfo : public webrtc::PacketInfo {
  public:
+  PacketInfo()
+      : webrtc::PacketInfo(-1,
+                           0,
+                           0,
+                           0,
+                           0,
+                           false,
+                           webrtc::PacketInfo::kNotAProbe) {}
   PacketInfo(int64_t arrival_time_ms, uint16_t sequence_number)
       : PacketInfo(arrival_time_ms,
                    0,
                    sequence_number,
                    0,
+                   false,
                    PacketInfo::kNotAProbe) {}
   PacketInfo(int64_t arrival_time_ms,
              int64_t send_time_ms,
              uint16_t sequence_number,
              size_t payload_size,
+             bool was_paced,
              int probe_cluster_id)
       : webrtc::PacketInfo(-1,
                            arrival_time_ms,
                            send_time_ms,
                            sequence_number,
                            payload_size,
+                           was_paced,
                            probe_cluster_id) {}
   bool operator==(const PacketInfo& other) const {
     return arrival_time_ms == other.arrival_time_ms &&
            send_time_ms == other.send_time_ms &&
            sequence_number == other.sequence_number &&
-           payload_size == other.payload_size &&
+           payload_size == other.payload_size && was_paced == other.was_paced &&
            probe_cluster_id == other.probe_cluster_id;
   }
 };
@@ -75,18 +88,18 @@
 TEST_F(SendTimeHistoryTest, AddRemoveOne) {
   const uint16_t kSeqNo = 10;
   const int kProbeClusterId = 0;
-  const PacketInfo kSentPacket(0, 1, kSeqNo, 1, kProbeClusterId);
-  AddPacketWithSendTime(kSeqNo, 1, 1, kProbeClusterId);
+  const PacketInfo kSentPacket(0, 1, kSeqNo, 1, true, kProbeClusterId);
+  AddPacketWithSendTime(kSeqNo, 1, true, 1, kProbeClusterId);
 
-  PacketInfo received_packet(0, 0, kSeqNo, 0, kProbeClusterId);
+  PacketInfo received_packet(0, 0, kSeqNo, 0, false, kProbeClusterId);
   EXPECT_TRUE(history_.GetInfo(&received_packet, false));
   EXPECT_EQ(kSentPacket, received_packet);
 
-  PacketInfo received_packet2(0, 0, kSeqNo, 0, kProbeClusterId);
+  PacketInfo received_packet2(0, 0, kSeqNo, 0, false, kProbeClusterId);
   EXPECT_TRUE(history_.GetInfo(&received_packet2, true));
   EXPECT_EQ(kSentPacket, received_packet2);
 
-  PacketInfo received_packet3(0, 0, kSeqNo, 0, kProbeClusterId);
+  PacketInfo received_packet3(0, 0, kSeqNo, 0, false, kProbeClusterId);
   EXPECT_FALSE(history_.GetInfo(&received_packet3, true));
 }
 
@@ -95,8 +108,9 @@
   const int64_t kSendTime = 1000;
   const int64_t kReceiveTime = 2000;
   const size_t kPayloadSize = 42;
+  const bool kPaced = true;
 
-  AddPacketWithSendTime(kSeqNo, kPayloadSize, kSendTime,
+  AddPacketWithSendTime(kSeqNo, kPayloadSize, kPaced, kSendTime,
                         PacketInfo::kNotAProbe);
 
   PacketInfo info(kReceiveTime, kSeqNo);
@@ -105,6 +119,7 @@
   EXPECT_EQ(kSendTime, info.send_time_ms);
   EXPECT_EQ(kSeqNo, info.sequence_number);
   EXPECT_EQ(kPayloadSize, info.payload_size);
+  EXPECT_EQ(kPaced, info.was_paced);
 }
 
 TEST_F(SendTimeHistoryTest, AddThenRemoveOutOfOrder) {
@@ -113,19 +128,20 @@
   const size_t num_items = 100;
   const size_t kPacketSize = 400;
   const size_t kTransmissionTime = 1234;
+  const bool kPaced = true;
   const int kProbeClusterId = 1;
   for (size_t i = 0; i < num_items; ++i) {
     sent_packets.push_back(PacketInfo(0, static_cast<int64_t>(i),
                                       static_cast<uint16_t>(i), kPacketSize,
-                                      kProbeClusterId));
+                                      kPaced, kProbeClusterId));
     received_packets.push_back(PacketInfo(
         static_cast<int64_t>(i) + kTransmissionTime, 0,
-        static_cast<uint16_t>(i), kPacketSize, PacketInfo::kNotAProbe));
+        static_cast<uint16_t>(i), kPacketSize, false, PacketInfo::kNotAProbe));
   }
   for (size_t i = 0; i < num_items; ++i) {
-    history_.AddAndRemoveOld(sent_packets[i].sequence_number,
-                             sent_packets[i].payload_size,
-                             sent_packets[i].probe_cluster_id);
+    history_.AddAndRemoveOld(
+        sent_packets[i].sequence_number, sent_packets[i].payload_size,
+        sent_packets[i].was_paced, sent_packets[i].probe_cluster_id);
   }
   for (size_t i = 0; i < num_items; ++i)
     history_.OnSentPacket(sent_packets[i].sequence_number,
@@ -147,19 +163,21 @@
   const int kItems = kDefaultHistoryLengthMs / 100;
   for (int i = 0; i < kItems; ++i) {
     clock_.AdvanceTimeMilliseconds(100);
-    AddPacketWithSendTime(i, 0, i * 100, PacketInfo::kNotAProbe);
+    AddPacketWithSendTime(i, 0, false, i * 100, PacketInfo::kNotAProbe);
   }
   for (int i = 0; i < kItems; ++i) {
-    PacketInfo info(0, 0, static_cast<uint16_t>(i), 0, PacketInfo::kNotAProbe);
+    PacketInfo info(0, 0, static_cast<uint16_t>(i), 0, false,
+                    PacketInfo::kNotAProbe);
     EXPECT_TRUE(history_.GetInfo(&info, false));
     EXPECT_EQ(i * 100, info.send_time_ms);
   }
   clock_.AdvanceTimeMilliseconds(101);
-  AddPacketWithSendTime(kItems, 0, kItems * 101, PacketInfo::kNotAProbe);
-  PacketInfo info(0, 0, 0, 0, PacketInfo::kNotAProbe);
+  AddPacketWithSendTime(kItems, 0, false, kItems * 101, PacketInfo::kNotAProbe);
+  PacketInfo info(0, 0, 0, 0, false, PacketInfo::kNotAProbe);
   EXPECT_FALSE(history_.GetInfo(&info, false));
   for (int i = 1; i < (kItems + 1); ++i) {
-    PacketInfo info2(0, 0, static_cast<uint16_t>(i), 0, PacketInfo::kNotAProbe);
+    PacketInfo info2(0, 0, static_cast<uint16_t>(i), 0, false,
+                     PacketInfo::kNotAProbe);
     EXPECT_TRUE(history_.GetInfo(&info2, false));
     int64_t expected_time_ms = (i == kItems) ? i * 101 : i * 100;
     EXPECT_EQ(expected_time_ms, info2.send_time_ms);
@@ -168,16 +186,17 @@
 
 TEST_F(SendTimeHistoryTest, HistorySizeWithWraparound) {
   const uint16_t kMaxSeqNo = std::numeric_limits<uint16_t>::max();
-  AddPacketWithSendTime(kMaxSeqNo - 2, 0, 0, PacketInfo::kNotAProbe);
+  AddPacketWithSendTime(kMaxSeqNo - 2, 0, false, 0, PacketInfo::kNotAProbe);
 
   clock_.AdvanceTimeMilliseconds(100);
-  AddPacketWithSendTime(kMaxSeqNo - 1, 1, 100, PacketInfo::kNotAProbe);
+  AddPacketWithSendTime(kMaxSeqNo - 1, 1, false, 100, PacketInfo::kNotAProbe);
 
   clock_.AdvanceTimeMilliseconds(100);
-  AddPacketWithSendTime(kMaxSeqNo, 0, 200, PacketInfo::kNotAProbe);
+  AddPacketWithSendTime(kMaxSeqNo, 0, false, 200, PacketInfo::kNotAProbe);
 
   clock_.AdvanceTimeMilliseconds(kDefaultHistoryLengthMs - 200 + 1);
-  AddPacketWithSendTime(0, 0, kDefaultHistoryLengthMs, PacketInfo::kNotAProbe);
+  AddPacketWithSendTime(0, 0, false, kDefaultHistoryLengthMs,
+                        PacketInfo::kNotAProbe);
 
   PacketInfo info(0, static_cast<uint16_t>(kMaxSeqNo - 2));
   EXPECT_FALSE(history_.GetInfo(&info, false));
@@ -193,7 +212,7 @@
   EXPECT_TRUE(history_.GetInfo(&info5, true));
 
   clock_.AdvanceTimeMilliseconds(100);
-  AddPacketWithSendTime(1, 0, 1100, PacketInfo::kNotAProbe);
+  AddPacketWithSendTime(1, 0, false, 1100, PacketInfo::kNotAProbe);
 
   PacketInfo info6(0, static_cast<uint16_t>(kMaxSeqNo - 2));
   EXPECT_FALSE(history_.GetInfo(&info6, false));
@@ -210,26 +229,26 @@
 TEST_F(SendTimeHistoryTest, InterlievedGetAndRemove) {
   const uint16_t kSeqNo = 1;
   const int64_t kTimestamp = 2;
-  PacketInfo packets[3] = {{0, kTimestamp, kSeqNo, 0, 0},
-                           {0, kTimestamp + 1, kSeqNo + 1, 0, 1},
-                           {0, kTimestamp + 2, kSeqNo + 2, 0, 2}};
+  PacketInfo packets[3] = {{0, kTimestamp, kSeqNo, 0, false, 0},
+                           {0, kTimestamp + 1, kSeqNo + 1, 0, false, 1},
+                           {0, kTimestamp + 2, kSeqNo + 2, 0, false, 2}};
 
   AddPacketWithSendTime(packets[0].sequence_number, packets[0].payload_size,
-                        packets[0].send_time_ms, 0);
+                        packets[0].was_paced, packets[0].send_time_ms, 0);
   AddPacketWithSendTime(packets[1].sequence_number, packets[1].payload_size,
-                        packets[1].send_time_ms, 1);
-  PacketInfo info(0, 0, packets[0].sequence_number, 0, 0);
+                        packets[1].was_paced, packets[1].send_time_ms, 1);
+  PacketInfo info(0, 0, packets[0].sequence_number, 0, false, 0);
   EXPECT_TRUE(history_.GetInfo(&info, true));
   EXPECT_EQ(packets[0], info);
 
   AddPacketWithSendTime(packets[2].sequence_number, packets[2].payload_size,
-                        packets[2].send_time_ms, 2);
+                        packets[2].was_paced, packets[2].send_time_ms, 2);
 
-  PacketInfo info2(0, 0, packets[1].sequence_number, 0, 1);
+  PacketInfo info2(0, 0, packets[1].sequence_number, 0, false, 1);
   EXPECT_TRUE(history_.GetInfo(&info2, true));
   EXPECT_EQ(packets[1], info2);
 
-  PacketInfo info3(0, 0, packets[2].sequence_number, 0, 2);
+  PacketInfo info3(0, 0, packets[2].sequence_number, 0, false, 2);
   EXPECT_TRUE(history_.GetInfo(&info3, true));
   EXPECT_EQ(packets[2], info3);
 }
diff --git a/webrtc/modules/remote_bitrate_estimator/test/bwe_test_framework.cc b/webrtc/modules/remote_bitrate_estimator/test/bwe_test_framework.cc
index a9fd617..e0736c8 100644
--- a/webrtc/modules/remote_bitrate_estimator/test/bwe_test_framework.cc
+++ b/webrtc/modules/remote_bitrate_estimator/test/bwe_test_framework.cc
@@ -99,14 +99,18 @@
       creation_time_us_(-1),
       send_time_us_(-1),
       sender_timestamp_us_(-1),
-      payload_size_(0) {}
+      payload_size_(0),
+      paced_(false) {
+}
 
 Packet::Packet(int flow_id, int64_t send_time_us, size_t payload_size)
     : flow_id_(flow_id),
       creation_time_us_(send_time_us),
       send_time_us_(send_time_us),
       sender_timestamp_us_(send_time_us),
-      payload_size_(payload_size) {}
+      payload_size_(payload_size),
+      paced_(false) {
+}
 
 Packet::~Packet() {
 }
diff --git a/webrtc/modules/remote_bitrate_estimator/test/estimators/remb.cc b/webrtc/modules/remote_bitrate_estimator/test/estimators/remb.cc
index e2d3da9..6f0c125 100644
--- a/webrtc/modules/remote_bitrate_estimator/test/estimators/remb.cc
+++ b/webrtc/modules/remote_bitrate_estimator/test/estimators/remb.cc
@@ -95,7 +95,7 @@
     step_ms = std::max<int64_t>(estimator_->TimeUntilNextProcess(), 0);
   }
   estimator_->IncomingPacket(arrival_time_ms, media_packet.payload_size(),
-                             media_packet.header());
+                             media_packet.header(), true);
   clock_.AdvanceTimeMilliseconds(arrival_time_ms - clock_.TimeInMilliseconds());
   ASSERT_TRUE(arrival_time_ms == clock_.TimeInMilliseconds());
 
diff --git a/webrtc/modules/remote_bitrate_estimator/test/estimators/send_side.cc b/webrtc/modules/remote_bitrate_estimator/test/estimators/send_side.cc
index 7a31b54..2fa60a1 100644
--- a/webrtc/modules/remote_bitrate_estimator/test/estimators/send_side.cc
+++ b/webrtc/modules/remote_bitrate_estimator/test/estimators/send_side.cc
@@ -99,9 +99,9 @@
       MediaPacket* media_packet = static_cast<MediaPacket*>(packet);
       // TODO(philipel): Add probe_cluster_id to Packet class in order
       //                 to create tests for probing using cluster ids.
-      send_time_history_.AddAndRemoveOld(media_packet->header().sequenceNumber,
-                                         media_packet->payload_size(),
-                                         PacketInfo::kNotAProbe);
+      send_time_history_.AddAndRemoveOld(
+          media_packet->header().sequenceNumber, media_packet->payload_size(),
+          packet->paced(), PacketInfo::kNotAProbe);
       send_time_history_.OnSentPacket(media_packet->header().sequenceNumber,
                                       media_packet->sender_timestamp_ms());
     }
diff --git a/webrtc/modules/remote_bitrate_estimator/test/packet.h b/webrtc/modules/remote_bitrate_estimator/test/packet.h
index 9aa596c..4a361c4 100644
--- a/webrtc/modules/remote_bitrate_estimator/test/packet.h
+++ b/webrtc/modules/remote_bitrate_estimator/test/packet.h
@@ -42,6 +42,8 @@
   virtual void set_sender_timestamp_us(int64_t sender_timestamp_us) {
     sender_timestamp_us_ = sender_timestamp_us;
   }
+  virtual void set_paced(bool paced) { paced_ = paced; }
+  virtual bool paced() const { return paced_; }
   virtual int64_t creation_time_ms() const {
     return (creation_time_us_ + 500) / 1000;
   }
@@ -56,6 +58,7 @@
   int64_t send_time_us_;  // Time the packet left last processor touching it.
   int64_t sender_timestamp_us_;  // Time the packet left the Sender.
   size_t payload_size_;  // Size of the (non-existent, simulated) payload.
+  bool paced_;           // True if sent through paced sender.
 };
 
 class MediaPacket : public Packet {
diff --git a/webrtc/modules/remote_bitrate_estimator/test/packet_sender.cc b/webrtc/modules/remote_bitrate_estimator/test/packet_sender.cc
index 06fbc6e..2f3c2d2 100644
--- a/webrtc/modules/remote_bitrate_estimator/test/packet_sender.cc
+++ b/webrtc/modules/remote_bitrate_estimator/test/packet_sender.cc
@@ -267,6 +267,8 @@
   }
   Packets to_transfer;
   to_transfer.splice(to_transfer.begin(), queue_, queue_.begin(), it);
+  for (Packet* packet : to_transfer)
+    packet->set_paced(true);
   bwe_->OnPacketsSent(to_transfer);
   batch->merge(to_transfer, DereferencingComparator<Packet>);
 }
diff --git a/webrtc/modules/remote_bitrate_estimator/tools/bwe_rtp_play.cc b/webrtc/modules/remote_bitrate_estimator/tools/bwe_rtp_play.cc
index f5dbaef..08dc0e6 100644
--- a/webrtc/modules/remote_bitrate_estimator/tools/bwe_rtp_play.cc
+++ b/webrtc/modules/remote_bitrate_estimator/tools/bwe_rtp_play.cc
@@ -83,7 +83,7 @@
           packet_length = packet.original_length;
         }
         rbe->IncomingPacket(clock.TimeInMilliseconds(),
-                            packet_length - header.headerLength, header);
+                            packet_length - header.headerLength, header, true);
         ++packet_counter;
       }
       if (!rtp_reader->NextPacket(&packet)) {
diff --git a/webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter.cc b/webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter.cc
index f691198..18e3c0c 100644
--- a/webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter.cc
+++ b/webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter.cc
@@ -59,9 +59,11 @@
 
 void TransportFeedbackAdapter::AddPacket(uint16_t sequence_number,
                                          size_t length,
+                                         bool was_paced,
                                          int probe_cluster_id) {
   rtc::CritScope cs(&lock_);
-  send_time_history_.AddAndRemoveOld(sequence_number, length, probe_cluster_id);
+  send_time_history_.AddAndRemoveOld(sequence_number, length, was_paced,
+                                     probe_cluster_id);
 }
 
 void TransportFeedbackAdapter::OnSentPacket(uint16_t sequence_number,
diff --git a/webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter.h b/webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter.h
index 3cde381..384a64f 100644
--- a/webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter.h
+++ b/webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter.h
@@ -40,6 +40,7 @@
   // Implements TransportFeedbackObserver.
   void AddPacket(uint16_t sequence_number,
                  size_t length,
+                 bool was_paced,
                  int probe_cluster_id) override;
   void OnSentPacket(uint16_t sequence_number, int64_t send_time_ms);
   void OnTransportFeedback(const rtcp::TransportFeedback& feedback) override;
diff --git a/webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter_unittest.cc b/webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter_unittest.cc
index f9ac8c9..1e99e51 100644
--- a/webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter_unittest.cc
+++ b/webrtc/modules/remote_bitrate_estimator/transport_feedback_adapter_unittest.cc
@@ -92,6 +92,7 @@
       EXPECT_EQ(truth[i].send_time_ms, input[i].send_time_ms);
       EXPECT_EQ(truth[i].sequence_number, input[i].sequence_number);
       EXPECT_EQ(truth[i].payload_size, input[i].payload_size);
+      EXPECT_EQ(truth[i].was_paced, input[i].was_paced);
       EXPECT_EQ(truth[i].probe_cluster_id, input[i].probe_cluster_id);
     }
   }
@@ -99,7 +100,7 @@
   // Utility method, to reset arrival_time_ms before adding send time.
   void OnSentPacket(PacketInfo info) {
     info.arrival_time_ms = 0;
-    adapter_->AddPacket(info.sequence_number, info.payload_size,
+    adapter_->AddPacket(info.sequence_number, info.payload_size, info.was_paced,
                         info.probe_cluster_id);
     adapter_->OnSentPacket(info.sequence_number, info.send_time_ms);
   }
@@ -114,11 +115,11 @@
 
 TEST_F(TransportFeedbackAdapterTest, AdaptsFeedbackAndPopulatesSendTimes) {
   std::vector<PacketInfo> packets;
-  packets.push_back(PacketInfo(100, 200, 0, 1500, 0));
-  packets.push_back(PacketInfo(110, 210, 1, 1500, 0));
-  packets.push_back(PacketInfo(120, 220, 2, 1500, 0));
-  packets.push_back(PacketInfo(130, 230, 3, 1500, 1));
-  packets.push_back(PacketInfo(140, 240, 4, 1500, 1));
+  packets.push_back(PacketInfo(100, 200, 0, 1500, true, 0));
+  packets.push_back(PacketInfo(110, 210, 1, 1500, true, 0));
+  packets.push_back(PacketInfo(120, 220, 2, 1500, true, 0));
+  packets.push_back(PacketInfo(130, 230, 3, 1500, true, 1));
+  packets.push_back(PacketInfo(140, 240, 4, 1500, true, 1));
 
   for (const PacketInfo& packet : packets)
     OnSentPacket(packet);
@@ -145,11 +146,11 @@
 
 TEST_F(TransportFeedbackAdapterTest, HandlesDroppedPackets) {
   std::vector<PacketInfo> packets;
-  packets.push_back(PacketInfo(100, 200, 0, 1500, 1));
-  packets.push_back(PacketInfo(110, 210, 1, 1500, 2));
-  packets.push_back(PacketInfo(120, 220, 2, 1500, 3));
-  packets.push_back(PacketInfo(130, 230, 3, 1500, 4));
-  packets.push_back(PacketInfo(140, 240, 4, 1500, 5));
+  packets.push_back(PacketInfo(100, 200, 0, 1500, true, 1));
+  packets.push_back(PacketInfo(110, 210, 1, 1500, true, 2));
+  packets.push_back(PacketInfo(120, 220, 2, 1500, true, 3));
+  packets.push_back(PacketInfo(130, 230, 3, 1500, true, 4));
+  packets.push_back(PacketInfo(140, 240, 4, 1500, true, 5));
 
   const uint16_t kSendSideDropBefore = 1;
   const uint16_t kReceiveSideDropAfter = 3;
@@ -190,12 +191,12 @@
                                static_cast<int64_t>(1 << 8) *
                                static_cast<int64_t>((1 << 23) - 1) / 1000;
   std::vector<PacketInfo> packets;
-  packets.push_back(PacketInfo(kHighArrivalTimeMs - 64, 200, 0, 1500,
+  packets.push_back(PacketInfo(kHighArrivalTimeMs - 64, 200, 0, 1500, true,
                                PacketInfo::kNotAProbe));
-  packets.push_back(PacketInfo(kHighArrivalTimeMs + 64, 210, 1, 1500,
+  packets.push_back(PacketInfo(kHighArrivalTimeMs + 64, 210, 1, 1500, true,
                                PacketInfo::kNotAProbe));
-  packets.push_back(
-      PacketInfo(kHighArrivalTimeMs, 220, 2, 1500, PacketInfo::kNotAProbe));
+  packets.push_back(PacketInfo(kHighArrivalTimeMs, 220, 2, 1500, true,
+                               PacketInfo::kNotAProbe));
 
   for (const PacketInfo& packet : packets)
     OnSentPacket(packet);
@@ -228,9 +229,9 @@
 
 TEST_F(TransportFeedbackAdapterTest, HandlesReordering) {
   std::vector<PacketInfo> packets;
-  packets.push_back(PacketInfo(120, 200, 0, 1500, 0));
-  packets.push_back(PacketInfo(110, 210, 1, 1500, 0));
-  packets.push_back(PacketInfo(100, 220, 2, 1500, 0));
+  packets.push_back(PacketInfo(120, 200, 0, 1500, true, 0));
+  packets.push_back(PacketInfo(110, 210, 1, 1500, true, 0));
+  packets.push_back(PacketInfo(100, 220, 2, 1500, true, 0));
   std::vector<PacketInfo> expected_packets;
   expected_packets.push_back(packets[2]);
   expected_packets.push_back(packets[1]);
diff --git a/webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h b/webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h
index 05320f7..8875d65 100644
--- a/webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h
+++ b/webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h
@@ -251,18 +251,21 @@
                    -1,
                    sequence_number,
                    0,
+                   false,
                    kNotAProbe) {}
 
   PacketInfo(int64_t arrival_time_ms,
              int64_t send_time_ms,
              uint16_t sequence_number,
              size_t payload_size,
+             bool was_paced,
              int probe_cluster_id)
       : PacketInfo(-1,
                    arrival_time_ms,
                    send_time_ms,
                    sequence_number,
                    payload_size,
+                   was_paced,
                    probe_cluster_id) {}
 
   PacketInfo(int64_t creation_time_ms,
@@ -270,12 +273,14 @@
              int64_t send_time_ms,
              uint16_t sequence_number,
              size_t payload_size,
+             bool was_paced,
              int probe_cluster_id)
       : creation_time_ms(creation_time_ms),
         arrival_time_ms(arrival_time_ms),
         send_time_ms(send_time_ms),
         sequence_number(sequence_number),
         payload_size(payload_size),
+        was_paced(was_paced),
         probe_cluster_id(probe_cluster_id) {}
 
   static constexpr int kNotAProbe = -1;
@@ -293,6 +298,8 @@
   uint16_t sequence_number;
   // Size of the packet excluding RTP headers.
   size_t payload_size;
+  // True if the packet was paced out by the pacer.
+  bool was_paced;
   // Which probing cluster this packets belongs to.
   int probe_cluster_id;
 };
@@ -306,6 +313,7 @@
   // must be set to 0.
   virtual void AddPacket(uint16_t sequence_number,
                          size_t length,
+                         bool was_paced,
                          int probe_cluster_id) = 0;
 
   virtual void OnTransportFeedback(const rtcp::TransportFeedback& feedback) = 0;
diff --git a/webrtc/modules/rtp_rtcp/source/rtp_sender.cc b/webrtc/modules/rtp_rtcp/source/rtp_sender.cc
index 9b6b72ae..fe0e49f 100644
--- a/webrtc/modules/rtp_rtcp/source/rtp_sender.cc
+++ b/webrtc/modules/rtp_rtcp/source/rtp_sender.cc
@@ -719,7 +719,7 @@
                                         length, rtp_header)) {
         if (transport_feedback_observer_)
           transport_feedback_observer_->AddPacket(options.packet_id, length,
-                                                  probe_cluster_id);
+                                                  true, probe_cluster_id);
       }
     }
 
@@ -980,7 +980,7 @@
     if (UpdateTransportSequenceNumber(options.packet_id, buffer_to_send_ptr,
                                       length, rtp_header)) {
       if (transport_feedback_observer_)
-        transport_feedback_observer_->AddPacket(options.packet_id, length,
+        transport_feedback_observer_->AddPacket(options.packet_id, length, true,
                                                 probe_cluster_id);
     }
   }
@@ -1111,7 +1111,7 @@
     if (UpdateTransportSequenceNumber(options.packet_id, buffer, length,
                                       rtp_header)) {
       if (transport_feedback_observer_)
-        transport_feedback_observer_->AddPacket(options.packet_id, length,
+        transport_feedback_observer_->AddPacket(options.packet_id, length, true,
                                                 PacketInfo::kNotAProbe);
     }
   }
diff --git a/webrtc/video/rtp_stream_receiver.cc b/webrtc/video/rtp_stream_receiver.cc
index 90e449c..57ae87c 100644
--- a/webrtc/video/rtp_stream_receiver.cc
+++ b/webrtc/video/rtp_stream_receiver.cc
@@ -310,7 +310,7 @@
   }
 
   remote_bitrate_estimator_->IncomingPacket(arrival_time_ms, payload_length,
-                                            header);
+                                            header, true);
   header.payload_type_frequency = kVideoPayloadTypeFrequency;
 
   bool in_order = IsPacketInOrder(header);
diff --git a/webrtc/voice_engine/channel.cc b/webrtc/voice_engine/channel.cc
index 943a045..d879fe8 100644
--- a/webrtc/voice_engine/channel.cc
+++ b/webrtc/voice_engine/channel.cc
@@ -75,11 +75,13 @@
   // Implements TransportFeedbackObserver.
   void AddPacket(uint16_t sequence_number,
                  size_t length,
+                 bool was_paced,
                  int probe_cluster_id) override {
     RTC_DCHECK(pacer_thread_.CalledOnValidThread());
     rtc::CritScope lock(&crit_);
     if (feedback_observer_)
-      feedback_observer_->AddPacket(sequence_number, length, probe_cluster_id);
+      feedback_observer_->AddPacket(sequence_number, length, was_paced,
+                                    probe_cluster_id);
   }
   void OnTransportFeedback(const rtcp::TransportFeedback& feedback) override {
     RTC_DCHECK(network_thread_.CalledOnValidThread());