1
#include "source/common/quic/send_buffer_monitor.h"
2

            
3
#include "source/common/common/assert.h"
4

            
5
namespace Envoy {
6
namespace Quic {
7

            
8
SendBufferMonitor::ScopedWatermarkBufferUpdater::ScopedWatermarkBufferUpdater(
9
    quic::QuicStream* quic_stream, SendBufferMonitor* send_buffer_monitor)
10
67687
    : quic_stream_(quic_stream), old_buffered_bytes_(quic_stream_->BufferedDataBytes()),
11
67687
      send_buffer_monitor_(send_buffer_monitor) {
12
67687
  ASSERT(!send_buffer_monitor_->is_doing_watermark_accounting_);
13
67687
  send_buffer_monitor_->is_doing_watermark_accounting_ = true;
14
67687
}
15

            
16
67687
SendBufferMonitor::ScopedWatermarkBufferUpdater::~ScopedWatermarkBufferUpdater() {
17
  // If quic_stream_ is done writing, regards all buffered bytes, if there is any, as drained.
18
67687
  uint64_t new_buffered_bytes =
19
67687
      quic_stream_->write_side_closed() ? 0u : quic_stream_->BufferedDataBytes();
20
67687
  send_buffer_monitor_->is_doing_watermark_accounting_ = false;
21
67687
  send_buffer_monitor_->updateBytesBuffered(old_buffered_bytes_, new_buffered_bytes);
22
67687
}
23

            
24
} // namespace Quic
25
} // namespace Envoy