Index: webrtc/video/send_statistics_proxy.h |
diff --git a/webrtc/video/send_statistics_proxy.h b/webrtc/video/send_statistics_proxy.h |
index 7209094fe68a70342de60992ea2acc6e4528ef47..255b55576ab50fea57496492f4298148322a1692 100644 |
--- a/webrtc/video/send_statistics_proxy.h |
+++ b/webrtc/video/send_statistics_proxy.h |
@@ -34,7 +34,8 @@ class SendStatisticsProxy : public CpuOveruseMetricsObserver, |
public BitrateStatisticsObserver, |
public FrameCountObserver, |
public VideoEncoderRateObserver, |
- public SendSideDelayObserver { |
+ public SendSideDelayObserver, |
+ public SendPacketObserver { |
public: |
static const int kStatsTimeoutMs; |
@@ -58,6 +59,8 @@ class SendStatisticsProxy : public CpuOveruseMetricsObserver, |
void OnSuspendChange(bool is_suspended); |
void OnInactiveSsrc(uint32_t ssrc); |
+ bool OnSentPacket(int packet_id); |
+ |
protected: |
// From CpuOveruseMetricsObserver. |
void CpuOveruseMetricsUpdated(const CpuOveruseMetrics& metrics) override; |
@@ -86,7 +89,25 @@ class SendStatisticsProxy : public CpuOveruseMetricsObserver, |
int max_delay_ms, |
uint32_t ssrc) override; |
+ void OnSendPacket(uint16_t packet_id, |
+ int64_t capture_time_ms, |
+ uint32_t ssrc) override; |
+ |
private: |
+ // Map holding sent packets (mapped by packet id). |
+ class PacketIdLessThan { |
+ public: |
+ bool operator()(uint16_t seq1, uint16_t seq2) const { |
+ return IsNewerSequenceNumber(seq2, seq1); |
+ } |
+ }; |
+ struct Packet { |
+ Packet() : cap_time_ms(-1), send_time_ms(-1) {} |
+ int64_t cap_time_ms; |
+ int64_t send_time_ms; |
+ }; |
+ typedef std::map<uint16_t, Packet, PacketIdLessThan> PacketMap; |
+ |
class SampleCounter { |
public: |
SampleCounter() : sum(0), num_samples(0) {} |
@@ -120,6 +141,8 @@ class SendStatisticsProxy : public CpuOveruseMetricsObserver, |
VideoSendStream::StreamStats* GetStatsEntry(uint32_t ssrc) |
EXCLUSIVE_LOCKS_REQUIRED(crit_); |
void UpdateHistograms() EXCLUSIVE_LOCKS_REQUIRED(crit_); |
+ void RemoveOld(int64_t now, PacketMap* packets) |
+ EXCLUSIVE_LOCKS_REQUIRED(crit_); |
Clock* const clock_; |
const VideoSendStream::Config config_; |
@@ -144,6 +167,9 @@ class SendStatisticsProxy : public CpuOveruseMetricsObserver, |
SampleCounter bw_resolutions_disabled_counter_ GUARDED_BY(crit_); |
SampleCounter delay_counter_ GUARDED_BY(crit_); |
SampleCounter max_delay_counter_ GUARDED_BY(crit_); |
+ |
+ SampleCounter send_delay_counter_ GUARDED_BY(crit_); |
+ PacketMap packets_ GUARDED_BY(crit_); |
}; |
} // namespace webrtc |