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
71306
    : quic_stream_(quic_stream), old_buffered_bytes_(quic_stream_->BufferedDataBytes()),
11
71306
      send_buffer_monitor_(send_buffer_monitor) {
12
71306
  ASSERT(!send_buffer_monitor_->is_doing_watermark_accounting_);
13
71306
  send_buffer_monitor_->is_doing_watermark_accounting_ = true;
14
71306
}
15

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

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