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

Unified Diff: net/quic/quic_packet_creator.cc

Issue 1421593004: Change QuicFramer::BuildDataPacket to return a length instead of QuicPacket* in order to reduce mem… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@105596142
Patch Set: Created 5 years, 2 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
« no previous file with comments | « net/quic/quic_framer.cc ('k') | net/quic/test_tools/quic_test_utils.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/quic_packet_creator.cc
diff --git a/net/quic/quic_packet_creator.cc b/net/quic/quic_packet_creator.cc
index f3800449c5bcf3683b721fa334df6063e94fe469..ce354b98ad9d8f49f4cce6a484c0acc97385a1d3 100644
--- a/net/quic/quic_packet_creator.cc
+++ b/net/quic/quic_packet_creator.cc
@@ -456,35 +456,43 @@ SerializedPacket QuicPacketCreator::SerializePacket(
// TODO(rtenneti): Change the default 64 alignas value (used the default
// value from CACHELINE_SIZE).
ALIGNAS(64) char buffer[kMaxPacketSize];
- scoped_ptr<QuicPacket> packet;
// Use the packet_size_ instead of the buffer size to ensure smaller
// packet sizes are properly used.
scoped_ptr<char[]> large_buffer;
- if (packet_size_ <= kMaxPacketSize) {
- packet.reset(
- framer_->BuildDataPacket(header, queued_frames_, buffer, packet_size_));
+ size_t length = 0;
+ const bool use_stack_buffer = packet_size_ <= kMaxPacketSize;
+ if (use_stack_buffer) {
+ length =
+ framer_->BuildDataPacket(header, queued_frames_, buffer, packet_size_);
} else {
large_buffer.reset(new char[packet_size_]);
- packet.reset(framer_->BuildDataPacket(header, queued_frames_,
- large_buffer.get(), packet_size_));
+ length = framer_->BuildDataPacket(header, queued_frames_,
+ large_buffer.get(), packet_size_);
}
- if (packet == nullptr) {
+ if (length == 0) {
LOG(DFATAL) << "Failed to serialize " << queued_frames_.size()
<< " frames.";
return NoPacket();
}
- OnBuiltFecProtectedPayload(header, packet->FecProtectedData());
+ // TODO(ianswett) Consider replacing QuicPacket with something else,
+ // since it's only used to provide convenience methods to FEC and encryption.
+ QuicPacket packet(use_stack_buffer ? buffer : large_buffer.get(), length,
+ /* owns_buffer */ false,
+ header.public_header.connection_id_length,
+ header.public_header.version_flag,
+ header.public_header.packet_number_length);
+ OnBuiltFecProtectedPayload(header, packet.FecProtectedData());
// Because of possible truncation, we can't be confident that our
// packet size calculation worked correctly.
if (!possibly_truncated_by_length) {
- DCHECK_EQ(packet_size_, packet->length());
+ DCHECK_EQ(packet_size_, length);
}
// Immediately encrypt the packet, to ensure we don't encrypt the same packet
// packet number multiple times.
QuicEncryptedPacket* encrypted =
- framer_->EncryptPayload(encryption_level_, packet_number_, *packet,
+ framer_->EncryptPayload(encryption_level_, packet_number_, packet,
encrypted_buffer, encrypted_buffer_len);
if (encrypted == nullptr) {
LOG(DFATAL) << "Failed to encrypt packet number " << packet_number_;
« no previous file with comments | « net/quic/quic_framer.cc ('k') | net/quic/test_tools/quic_test_utils.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698