Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2029)

Unified Diff: content/browser/renderer_host/p2p/socket_host_tcp.cc

Issue 2846243002: Wire up rtc_packet_ids to P2PSocketHostTcp, which is required for correct BWE in WebRTC. (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/p2p/socket_host_tcp.cc
diff --git a/content/browser/renderer_host/p2p/socket_host_tcp.cc b/content/browser/renderer_host/p2p/socket_host_tcp.cc
index 039c619ccf45ebe68b58ffca31c0c5a50b419fd7..d2048047cb38ddcab42c652452c86a1f81e2b4e1 100644
--- a/content/browser/renderer_host/p2p/socket_host_tcp.cc
+++ b/content/browser/renderer_host/p2p/socket_host_tcp.cc
@@ -49,6 +49,15 @@ bool IsPseudoTlsClientSocket(content::P2PSocketType type) {
namespace content {
+P2PSocketHostTcp::SendBuffer::SendBuffer() : rtc_packet_id(-1) {}
+P2PSocketHostTcp::SendBuffer::SendBuffer(
+ int32_t rtc_packet_id,
+ scoped_refptr<net::DrainableIOBuffer> buffer)
+ : rtc_packet_id(rtc_packet_id), buffer(buffer) {}
+P2PSocketHostTcp::SendBuffer::SendBuffer(const SendBuffer& rhs)
+ : rtc_packet_id(rhs.rtc_packet_id), buffer(rhs.buffer) {}
+P2PSocketHostTcp::SendBuffer::~SendBuffer() {}
+
P2PSocketHostTcpBase::P2PSocketHostTcpBase(
IPC::Sender* message_sender,
int socket_id,
@@ -383,25 +392,24 @@ void P2PSocketHostTcpBase::Send(const net::IPEndPoint& to,
DoSend(to, data, options);
}
-void P2PSocketHostTcpBase::WriteOrQueue(
- scoped_refptr<net::DrainableIOBuffer>& buffer) {
+void P2PSocketHostTcpBase::WriteOrQueue(SendBuffer& send_buffer) {
IncrementTotalSentPackets();
- if (write_buffer_.get()) {
- write_queue_.push(buffer);
+ if (write_buffer_.buffer.get()) {
+ write_queue_.push(send_buffer);
IncrementDelayedPackets();
- IncrementDelayedBytes(buffer->size());
+ IncrementDelayedBytes(send_buffer.buffer->size());
return;
}
- write_buffer_ = buffer;
+ write_buffer_ = send_buffer;
DoWrite();
}
void P2PSocketHostTcpBase::DoWrite() {
- while (write_buffer_.get() && state_ == STATE_OPEN && !write_pending_) {
+ while (write_buffer_.buffer.get() && state_ == STATE_OPEN &&
+ !write_pending_) {
int result = socket_->Write(
- write_buffer_.get(),
- write_buffer_->BytesRemaining(),
+ write_buffer_.buffer.get(), write_buffer_.buffer->BytesRemaining(),
base::Bind(&P2PSocketHostTcp::OnWritten, base::Unretained(this)));
HandleWriteResult(result);
}
@@ -417,19 +425,22 @@ void P2PSocketHostTcpBase::OnWritten(int result) {
}
void P2PSocketHostTcpBase::HandleWriteResult(int result) {
- DCHECK(write_buffer_.get());
+ DCHECK(write_buffer_.buffer.get());
if (result >= 0) {
- write_buffer_->DidConsume(result);
- if (write_buffer_->BytesRemaining() == 0) {
- message_sender_->Send(
- new P2PMsg_OnSendComplete(id_, P2PSendPacketMetrics()));
+ write_buffer_.buffer->DidConsume(result);
+ if (write_buffer_.buffer->BytesRemaining() == 0) {
+ base::TimeTicks send_time = base::TimeTicks::Now();
+ message_sender_->Send(new P2PMsg_OnSendComplete(
+ id_,
+ P2PSendPacketMetrics(0, write_buffer_.rtc_packet_id, send_time)));
if (write_queue_.empty()) {
- write_buffer_ = nullptr;
+ write_buffer_.buffer = nullptr;
+ write_buffer_.rtc_packet_id = -1;
} else {
write_buffer_ = write_queue_.front();
write_queue_.pop();
// Update how many bytes are still waiting to be sent.
- DecrementDelayedBytes(write_buffer_->size());
+ DecrementDelayedBytes(write_buffer_.buffer->size());
}
}
} else if (result == net::ERR_IO_PENDING) {
@@ -530,17 +541,20 @@ void P2PSocketHostTcp::DoSend(const net::IPEndPoint& to,
const std::vector<char>& data,
const rtc::PacketOptions& options) {
int size = kPacketHeaderSize + data.size();
- scoped_refptr<net::DrainableIOBuffer> buffer =
- new net::DrainableIOBuffer(new net::IOBuffer(size), size);
- *reinterpret_cast<uint16_t*>(buffer->data()) = base::HostToNet16(data.size());
- memcpy(buffer->data() + kPacketHeaderSize, &data[0], data.size());
+ SendBuffer send_buffer(options.packet_id, new net::DrainableIOBuffer(
+ new net::IOBuffer(size), size));
+ *reinterpret_cast<uint16_t*>(send_buffer.buffer->data()) =
+ base::HostToNet16(data.size());
+ memcpy(send_buffer.buffer->data() + kPacketHeaderSize, &data[0], data.size());
cricket::ApplyPacketOptions(
- reinterpret_cast<uint8_t*>(buffer->data()) + kPacketHeaderSize,
- buffer->BytesRemaining() - kPacketHeaderSize, options.packet_time_params,
+ reinterpret_cast<uint8_t*>(send_buffer.buffer->data()) +
+ kPacketHeaderSize,
+ send_buffer.buffer->BytesRemaining() - kPacketHeaderSize,
+ options.packet_time_params,
(base::TimeTicks::Now() - base::TimeTicks()).InMicroseconds());
- WriteOrQueue(buffer);
+ WriteOrQueue(send_buffer);
}
// P2PSocketHostStunTcp
@@ -604,24 +618,24 @@ void P2PSocketHostStunTcp::DoSend(const net::IPEndPoint& to,
// Add any pad bytes to the total size.
int size = data.size() + pad_bytes;
- scoped_refptr<net::DrainableIOBuffer> buffer =
- new net::DrainableIOBuffer(new net::IOBuffer(size), size);
- memcpy(buffer->data(), &data[0], data.size());
+ SendBuffer send_buffer(options.packet_id, new net::DrainableIOBuffer(
+ new net::IOBuffer(size), size));
+ memcpy(send_buffer.buffer->data(), &data[0], data.size());
cricket::ApplyPacketOptions(
- reinterpret_cast<uint8_t*>(buffer->data()), data.size(),
+ reinterpret_cast<uint8_t*>(send_buffer.buffer->data()), data.size(),
options.packet_time_params,
(base::TimeTicks::Now() - base::TimeTicks()).InMicroseconds());
if (pad_bytes) {
char padding[4] = {0};
DCHECK_LE(pad_bytes, 4);
- memcpy(buffer->data() + data.size(), padding, pad_bytes);
+ memcpy(send_buffer.buffer->data() + data.size(), padding, pad_bytes);
}
- WriteOrQueue(buffer);
+ WriteOrQueue(send_buffer);
if (dump_outgoing_rtp_packet_)
- DumpRtpPacket(buffer->data(), data.size(), false);
+ DumpRtpPacket(send_buffer.buffer->data(), data.size(), false);
}
int P2PSocketHostStunTcp::GetExpectedPacketSize(
« no previous file with comments | « content/browser/renderer_host/p2p/socket_host_tcp.h ('k') | content/browser/renderer_host/p2p/socket_host_tcp_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698