| Index: net/quic/core/quic_stream_sequencer_buffer.cc
|
| diff --git a/net/quic/core/quic_stream_sequencer_buffer.cc b/net/quic/core/quic_stream_sequencer_buffer.cc
|
| index 6b3ee9d96aae51db637e8676d81a4993223d54a3..9b866a17e776915670d30e7af6a5f79e491c7c19 100644
|
| --- a/net/quic/core/quic_stream_sequencer_buffer.cc
|
| +++ b/net/quic/core/quic_stream_sequencer_buffer.cc
|
| @@ -49,7 +49,11 @@ QuicStreamSequencerBuffer::QuicStreamSequencerBuffer(size_t max_capacity_bytes)
|
| blocks_count_(
|
| ceil(static_cast<double>(max_capacity_bytes) / kBlockSizeBytes)),
|
| total_bytes_read_(0),
|
| - blocks_(nullptr),
|
| + reduce_sequencer_buffer_memory_life_time_(
|
| + FLAGS_quic_reduce_sequencer_buffer_memory_life_time), // NOLINT
|
| + blocks_(reduce_sequencer_buffer_memory_life_time_
|
| + ? nullptr
|
| + : new BufferBlock*[blocks_count_]()),
|
| destruction_indicator_(123456) {
|
| CHECK_GT(blocks_count_, 1u)
|
| << "blocks_count_ = " << blocks_count_
|
| @@ -63,7 +67,7 @@ QuicStreamSequencerBuffer::~QuicStreamSequencerBuffer() {
|
| }
|
|
|
| void QuicStreamSequencerBuffer::Clear() {
|
| - if (blocks_ != nullptr) {
|
| + if (!reduce_sequencer_buffer_memory_life_time_ || blocks_ != nullptr) {
|
| for (size_t i = 0; i < blocks_count_; ++i) {
|
| if (blocks_[i] != nullptr) {
|
| RetireBlock(i);
|
| @@ -182,7 +186,7 @@ QuicErrorCode QuicStreamSequencerBuffer::OnStreamData(
|
| bytes_avail = total_bytes_read_ + max_buffer_capacity_bytes_ - offset;
|
| }
|
|
|
| - if (blocks_ == nullptr) {
|
| + if (reduce_sequencer_buffer_memory_life_time_ && blocks_ == nullptr) {
|
| blocks_.reset(new BufferBlock*[blocks_count_]());
|
| for (size_t i = 0; i < blocks_count_; ++i) {
|
| blocks_[i] = nullptr;
|
| @@ -473,6 +477,10 @@ size_t QuicStreamSequencerBuffer::FlushBufferedFrames() {
|
| }
|
|
|
| void QuicStreamSequencerBuffer::ReleaseWholeBuffer() {
|
| + if (!reduce_sequencer_buffer_memory_life_time_) {
|
| + // Don't release buffer if flag is off.
|
| + return;
|
| + }
|
| Clear();
|
| blocks_.reset(nullptr);
|
| }
|
|
|