Remove StreamStatistician::IsPacketInOrder

this function is now only used in combination with StreamStatistician::IsRetransmitOfOldPacket
but IsRetransmitOfOldPacket internally checks if packet is in_order, thus making extra check unnecessary

In addition to making code simpler, removing this checks avoids
taking two extra CritSection on common code path of incoming rtp packet.

Bug: webrtc:8016
Change-Id: I050004e256b5698ce700e3416aa86b55f446a270
Reviewed-on: https://webrtc-review.googlesource.com/85361
Reviewed-by: Niels Moller <nisse@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Reviewed-by: Fredrik Solenberg <solenberg@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23762}
This commit is contained in:
Danil Chapovalov
2018-06-25 16:58:54 +02:00
committed by Commit Bot
parent 968b1dd0d7
commit 64b17c2aca
7 changed files with 11 additions and 42 deletions

View File

@ -872,9 +872,8 @@ void Channel::OnRtpPacket(const RtpPacketReceived& packet) {
header.payload_type_frequency =
rtp_payload_registry_->GetPayloadTypeFrequency(header.payloadType);
if (header.payload_type_frequency >= 0) {
bool in_order = IsPacketInOrder(header);
rtp_receive_statistics_->IncomingPacket(
header, packet.size(), IsPacketRetransmitted(header, in_order));
rtp_receive_statistics_->IncomingPacket(header, packet.size(),
IsPacketRetransmitted(header));
ReceivePacket(packet.data(), packet.size(), header);
}
@ -895,22 +894,13 @@ bool Channel::ReceivePacket(const uint8_t* packet,
pl->typeSpecific);
}
bool Channel::IsPacketInOrder(const RTPHeader& header) const {
StreamStatistician* statistician =
rtp_receive_statistics_->GetStatistician(header.ssrc);
if (!statistician)
return false;
return statistician->IsPacketInOrder(header.sequenceNumber);
}
bool Channel::IsPacketRetransmitted(const RTPHeader& header,
bool in_order) const {
bool Channel::IsPacketRetransmitted(const RTPHeader& header) const {
StreamStatistician* statistician =
rtp_receive_statistics_->GetStatistician(header.ssrc);
if (!statistician)
return false;
// Check if this is a retransmission.
return !in_order && statistician->IsRetransmitOfOldPacket(header);
return statistician->IsRetransmitOfOldPacket(header);
}
int32_t Channel::ReceivedRTCPPacket(const uint8_t* data, size_t length) {

View File

@ -314,8 +314,7 @@ class Channel
bool ReceivePacket(const uint8_t* packet,
size_t packet_length,
const RTPHeader& header);
bool IsPacketInOrder(const RTPHeader& header) const;
bool IsPacketRetransmitted(const RTPHeader& header, bool in_order) const;
bool IsPacketRetransmitted(const RTPHeader& header) const;
int ResendPackets(const uint16_t* sequence_numbers, int length);
void UpdatePlayoutTimestamp(bool rtcp);

View File

@ -60,9 +60,6 @@ class StreamStatistician {
// Returns true if the packet with RTP header |header| is likely to be a
// retransmitted packet, false otherwise.
virtual bool IsRetransmitOfOldPacket(const RTPHeader& header) const = 0;
// Returns true if |sequence_number| is received in order, false otherwise.
virtual bool IsPacketInOrder(uint16_t sequence_number) const = 0;
};
class ReceiveStatistics : public ReceiveStatisticsProvider {

View File

@ -310,11 +310,6 @@ bool StreamStatisticianImpl::IsRetransmitOfOldPacket(
return time_diff_ms > rtp_time_stamp_diff_ms + max_delay_ms;
}
bool StreamStatisticianImpl::IsPacketInOrder(uint16_t sequence_number) const {
rtc::CritScope cs(&stream_lock_);
return InOrderPacketInternal(sequence_number);
}
bool StreamStatisticianImpl::InOrderPacketInternal(
uint16_t sequence_number) const {
// First packet is always in order.

View File

@ -42,7 +42,6 @@ class StreamStatisticianImpl : public StreamStatistician {
StreamDataCounters* data_counters) const override;
uint32_t BitrateReceived() const override;
bool IsRetransmitOfOldPacket(const RTPHeader& header) const override;
bool IsPacketInOrder(uint16_t sequence_number) const override;
void IncomingPacket(const RTPHeader& rtp_header,
size_t packet_length,

View File

@ -286,8 +286,6 @@ void RtpVideoStreamReceiver::OnRtpPacket(const RtpPacketReceived& packet) {
header.payload_type_frequency = kVideoPayloadTypeFrequency;
bool in_order = IsPacketInOrder(header);
ReceivePacket(packet.data(), packet.size(), header);
// Update receive statistics after ReceivePacket.
// Receive statistics will be reset if the payload type changes (make sure
@ -295,8 +293,8 @@ void RtpVideoStreamReceiver::OnRtpPacket(const RtpPacketReceived& packet) {
if (!packet.recovered()) {
// TODO(nisse): We should pass a recovered flag to stats, to aid
// fixing bug bugs.webrtc.org/6339.
rtp_receive_statistics_->IncomingPacket(
header, packet.size(), IsPacketRetransmitted(header, in_order));
rtp_receive_statistics_->IncomingPacket(header, packet.size(),
IsPacketRetransmitted(header));
}
for (RtpPacketSinkInterface* secondary_sink : secondary_sinks_) {
@ -528,16 +526,8 @@ void RtpVideoStreamReceiver::StopReceive() {
receiving_ = false;
}
bool RtpVideoStreamReceiver::IsPacketInOrder(const RTPHeader& header) const {
StreamStatistician* statistician =
rtp_receive_statistics_->GetStatistician(header.ssrc);
if (!statistician)
return false;
return statistician->IsPacketInOrder(header.sequenceNumber);
}
bool RtpVideoStreamReceiver::IsPacketRetransmitted(const RTPHeader& header,
bool in_order) const {
bool RtpVideoStreamReceiver::IsPacketRetransmitted(
const RTPHeader& header) const {
// Retransmissions are handled separately if RTX is enabled.
if (config_.rtp.rtx_ssrc != 0)
return false;
@ -545,7 +535,7 @@ bool RtpVideoStreamReceiver::IsPacketRetransmitted(const RTPHeader& header,
rtp_receive_statistics_->GetStatistician(header.ssrc);
if (!statistician)
return false;
return !in_order && statistician->IsRetransmitOfOldPacket(header);
return statistician->IsRetransmitOfOldPacket(header);
}
void RtpVideoStreamReceiver::UpdateHistograms() {

View File

@ -150,8 +150,7 @@ class RtpVideoStreamReceiver : public RtpData,
const RTPHeader& header);
void NotifyReceiverOfEmptyPacket(uint16_t seq_num);
void NotifyReceiverOfFecPacket(const RTPHeader& header);
bool IsPacketInOrder(const RTPHeader& header) const;
bool IsPacketRetransmitted(const RTPHeader& header, bool in_order) const;
bool IsPacketRetransmitted(const RTPHeader& header) const;
void UpdateHistograms();
bool IsRedEnabled() const;
void InsertSpsPpsIntoTracker(uint8_t payload_type);