Update packetsLost and jitter stats any time a packet is received.

Before this CL, the packetsLost and jitter stats (as returned by
GetStats, at the API level) were only being updated when an RTCP SR or
RR is generated. According to the stats spec, "local" stats like this
should be updated any time a packet is received.

This CL also fixes some minor issues with the calculation of packetsLost
(and fractionLost):
* Packets weren't being count as lost if lost over a sequence number
  rollover.
* Temporary periods of "negative" loss (caused by duplicate or out of
  order packets) weren't being accumulated into the cumulative loss
  counter. Example:
  Period 1: Received packets 1, 2, 4
    Loss over that period: 1 (expected 4 packets, got 3)
    Reported cumulative loss: 1
  Period 2: Received packets 3, 5
    Loss over that period: -1 (expected 1 packet, got 2)
    Reported cumulative loss: 1 (should be 0!)

Landing with NOTRY because Android compile bots are broken for an
unrelated reason.
NOTRY=True

Bug: webrtc:8804
Change-Id: I840ba34de8957b1276f6bdaf93718f805629f5c8
Reviewed-on: https://webrtc-review.googlesource.com/50020
Commit-Queue: Taylor Brandstetter <deadbeef@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Oskar Sundbom <ossu@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23731}
This commit is contained in:
Taylor Brandstetter
2018-06-25 15:50:26 -07:00
committed by Commit Bot
parent 111fdfd732
commit 84916937b7
5 changed files with 528 additions and 151 deletions

View File

@ -37,7 +37,17 @@ class StreamStatistician {
public:
virtual ~StreamStatistician();
virtual bool GetStatistics(RtcpStatistics* statistics, bool reset) = 0;
// If |update_fraction_lost| is true, |fraction_lost| will be recomputed
// between now and the last time |update_fraction_lost| was true. Otherwise
// the last-computed value of |fraction_lost| will be returned.
//
// |update_fraction_lost| should be true any time an RTCP SR or RR is being
// generated, since RFC3550 defines it as the fraction of packets lost since
// the previous SR or RR packet was sent.
//
// Aside from |fraction_lost|, every other value will be freshly computed.
virtual bool GetStatistics(RtcpStatistics* statistics,
bool update_fraction_lost) = 0;
virtual void GetDataCounters(size_t* bytes_received,
uint32_t* packets_received) const = 0;