Avoid copying of vectors in RtpPacketInfos.
Bug: chromium:982260
Change-Id: Ia4dab497b662e825f80c16530cdf615b62f0a5c9
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/148523
Commit-Queue: Minyue Li <minyue@webrtc.org>
Reviewed-by: Per Kjellander <perkj@webrtc.org>
Reviewed-by: Chen Xing <chxg@google.com>
Cr-Commit-Position: refs/heads/master@{#28859}
diff --git a/api/rtp_packet_infos.h b/api/rtp_packet_infos.h
index c2b595a..08da1ae 100644
--- a/api/rtp_packet_infos.h
+++ b/api/rtp_packet_infos.h
@@ -12,6 +12,7 @@
#define API_RTP_PACKET_INFOS_H_
#include <cstdint>
+#include <utility>
#include <vector>
#include "api/ref_counted_base.h"
@@ -46,7 +47,11 @@
using reverse_iterator = const_reverse_iterator;
RtpPacketInfos() {}
- explicit RtpPacketInfos(vector_type entries) : data_(Data::Create(entries)) {}
+ explicit RtpPacketInfos(const vector_type& entries)
+ : data_(Data::Create(entries)) {}
+
+ explicit RtpPacketInfos(vector_type&& entries)
+ : data_(Data::Create(std::move(entries))) {}
RtpPacketInfos(const RtpPacketInfos& other) = default;
RtpPacketInfos(RtpPacketInfos&& other) = default;
@@ -75,7 +80,7 @@
private:
class Data : public rtc::RefCountedBase {
public:
- static rtc::scoped_refptr<Data> Create(vector_type entries) {
+ static rtc::scoped_refptr<Data> Create(const vector_type& entries) {
// Performance optimization for the empty case.
if (entries.empty()) {
return nullptr;
@@ -84,10 +89,20 @@
return new Data(entries);
}
+ static rtc::scoped_refptr<Data> Create(vector_type&& entries) {
+ // Performance optimization for the empty case.
+ if (entries.empty()) {
+ return nullptr;
+ }
+
+ return new Data(std::move(entries));
+ }
+
const vector_type& entries() const { return entries_; }
private:
- explicit Data(vector_type entries) : entries_(entries) {}
+ explicit Data(const vector_type& entries) : entries_(entries) {}
+ explicit Data(vector_type&& entries) : entries_(std::move(entries)) {}
~Data() override {}
const vector_type entries_;
diff --git a/modules/audio_coding/neteq/neteq_impl.cc b/modules/audio_coding/neteq/neteq_impl.cc
index 5466409..f178842 100644
--- a/modules/audio_coding/neteq/neteq_impl.cc
+++ b/modules/audio_coding/neteq/neteq_impl.cc
@@ -898,8 +898,7 @@
// We treat it as if all packets referenced to by |last_decoded_packet_infos_|
// were mashed together when creating the samples in |algorithm_buffer_|.
- RtpPacketInfos packet_infos(std::move(last_decoded_packet_infos_));
- last_decoded_packet_infos_.clear();
+ RtpPacketInfos packet_infos(last_decoded_packet_infos_);
// Copy samples from |algorithm_buffer_| to |sync_buffer_|.
//