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 = header.payload_type_frequency =
rtp_payload_registry_->GetPayloadTypeFrequency(header.payloadType); rtp_payload_registry_->GetPayloadTypeFrequency(header.payloadType);
if (header.payload_type_frequency >= 0) { if (header.payload_type_frequency >= 0) {
bool in_order = IsPacketInOrder(header); rtp_receive_statistics_->IncomingPacket(header, packet.size(),
rtp_receive_statistics_->IncomingPacket( IsPacketRetransmitted(header));
header, packet.size(), IsPacketRetransmitted(header, in_order));
ReceivePacket(packet.data(), packet.size(), header); ReceivePacket(packet.data(), packet.size(), header);
} }
@ -895,22 +894,13 @@ bool Channel::ReceivePacket(const uint8_t* packet,
pl->typeSpecific); pl->typeSpecific);
} }
bool Channel::IsPacketInOrder(const RTPHeader& header) const { bool Channel::IsPacketRetransmitted(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 {
StreamStatistician* statistician = StreamStatistician* statistician =
rtp_receive_statistics_->GetStatistician(header.ssrc); rtp_receive_statistics_->GetStatistician(header.ssrc);
if (!statistician) if (!statistician)
return false; return false;
// Check if this is a retransmission. // 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) { 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, bool ReceivePacket(const uint8_t* packet,
size_t packet_length, size_t packet_length,
const RTPHeader& header); const RTPHeader& header);
bool IsPacketInOrder(const RTPHeader& header) const; bool IsPacketRetransmitted(const RTPHeader& header) const;
bool IsPacketRetransmitted(const RTPHeader& header, bool in_order) const;
int ResendPackets(const uint16_t* sequence_numbers, int length); int ResendPackets(const uint16_t* sequence_numbers, int length);
void UpdatePlayoutTimestamp(bool rtcp); 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 // Returns true if the packet with RTP header |header| is likely to be a
// retransmitted packet, false otherwise. // retransmitted packet, false otherwise.
virtual bool IsRetransmitOfOldPacket(const RTPHeader& header) const = 0; 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 { 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; 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( bool StreamStatisticianImpl::InOrderPacketInternal(
uint16_t sequence_number) const { uint16_t sequence_number) const {
// First packet is always in order. // First packet is always in order.

View File

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

View File

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

View File

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