proxygen
proxygen::compress::HPACKScheme Class Reference

#include <HPACKScheme.h>

Inheritance diagram for proxygen::compress::HPACKScheme:
proxygen::compress::CompressionScheme folly::EventBase::LoopCallback

Public Member Functions

 HPACKScheme (CompressionSimulator *sim, uint32_t tableSize)
 
 ~HPACKScheme ()
 
std::unique_ptr< AckgetAck (uint16_t) override
 
void recvAck (std::unique_ptr< Ack >) override
 
std::pair< FrameFlags, std::unique_ptr< folly::IOBuf > > encode (bool, std::vector< compress::Header > allHeaders, SimStats &stats) override
 
void decode (FrameFlags flags, std::unique_ptr< folly::IOBuf > encodedReq, SimStats &stats, SimStreamingCallback &callback) override
 
uint32_t getHolBlockCount () const override
 
- Public Member Functions inherited from proxygen::compress::CompressionScheme
 CompressionScheme (CompressionSimulator *sim)
 
virtual ~CompressionScheme ()
 
void runLoopCallback () noexceptoverride
 
- Public Member Functions inherited from folly::EventBase::LoopCallback
virtual ~LoopCallback ()=default
 
void cancelLoopCallback ()
 
bool isLoopCallbackScheduled () const
 

Public Attributes

HPACKCodec client_ {TransportDirection::UPSTREAM}
 
HPACKCodec server_ {TransportDirection::DOWNSTREAM}
 
HPACKQueue serverQueue_ {server_}
 
bool allowOOO_ {false}
 
- Public Attributes inherited from proxygen::compress::CompressionScheme
std::list< BlockInfoencodedBlocks
 
std::list< BlockInfopacketBlocks
 
size_t index {0}
 
std::chrono::milliseconds prev
 
size_t packetBytes {0}
 
std::chrono::milliseconds decodeDelay
 
std::list< uint16_tpacketIndices
 

Additional Inherited Members

- Public Types inherited from proxygen::compress::CompressionScheme
using BlockInfo = std::tuple< FrameFlags, bool, std::unique_ptr< folly::IOBuf >, SimStreamingCallback * >
 

Detailed Description

Compression scheme for HPACK with a prepended sequence number

Definition at line 22 of file HPACKScheme.h.

Constructor & Destructor Documentation

proxygen::compress::HPACKScheme::HPACKScheme ( CompressionSimulator sim,
uint32_t  tableSize 
)
inlineexplicit

Definition at line 24 of file HPACKScheme.h.

References allowOOO_, client_, proxygen::NoPathIndexingStrategy::getInstance(), server_, proxygen::HPACKCodec::setDecoderHeaderTableMaxSize(), proxygen::HeaderCodec::setEncodeHeadroom(), proxygen::HPACKCodec::setEncoderHeaderTableSize(), and proxygen::HPACKCodec::setHeaderIndexingStrategy().

25  : CompressionScheme(sim) {
31  allowOOO_ = (tableSize == 0);
32  }
void setDecoderHeaderTableMaxSize(uint32_t size)
Definition: HPACKCodec.h:58
void setEncoderHeaderTableSize(uint32_t size)
Definition: HPACKCodec.h:54
void setEncodeHeadroom(uint32_t headroom)
Definition: HeaderCodec.h:69
static const NoPathIndexingStrategy * getInstance()
CompressionScheme(CompressionSimulator *sim)
void setHeaderIndexingStrategy(const HeaderIndexingStrategy *indexingStrat)
Definition: HPACKCodec.h:78
proxygen::compress::HPACKScheme::~HPACKScheme ( )
inline

Definition at line 34 of file HPACKScheme.h.

References proxygen::HPACKQueue::getQueuedBytes(), and serverQueue_.

34  {
35  CHECK_EQ(serverQueue_.getQueuedBytes(), 0);
36  }
uint64_t getQueuedBytes() const
Definition: HPACKQueue.h:77

Member Function Documentation

void proxygen::compress::HPACKScheme::decode ( FrameFlags  flags,
std::unique_ptr< folly::IOBuf encodedReq,
SimStats stats,
SimStreamingCallback callback 
)
inlineoverridevirtual

Implements proxygen::compress::CompressionScheme.

Definition at line 60 of file HPACKScheme.h.

References proxygen::compress::FrameFlags::allowOOO, proxygen::HPACKQueue::enqueueHeaderBlock(), proxygen::HPACKQueue::getQueuedBytes(), proxygen::compress::SimStats::maxQueueBufferBytes, proxygen::compress::SimStreamingCallback::maybeMarkHolDelay(), folly::gen::move, folly::io::detail::CursorBase< Derived, BufType >::readBE(), proxygen::compress::SimStreamingCallback::requestIndex, proxygen::compress::SimStreamingCallback::seqn, serverQueue_, folly::IOBuf::trimStart(), and uint16_t.

63  {
64  folly::io::Cursor cursor(encodedReq.get());
65  auto seqn = cursor.readBE<uint16_t>();
66  callback.seqn = seqn;
67  VLOG(1) << "Decoding request=" << callback.requestIndex
68  << " header seqn=" << seqn;
69  auto len = cursor.totalLength();
70  encodedReq->trimStart(sizeof(uint16_t));
72  seqn, std::move(encodedReq), len, &callback, flags.allowOOO);
73  callback.maybeMarkHolDelay();
74  if (serverQueue_.getQueuedBytes() > stats.maxQueueBufferBytes) {
75  stats.maxQueueBufferBytes = serverQueue_.getQueuedBytes();
76  }
77  }
flags
Definition: http_parser.h:127
uint64_t getQueuedBytes() const
Definition: HPACKQueue.h:77
constexpr detail::Map< Move > move
Definition: Base-inl.h:2567
void enqueueHeaderBlock(uint32_t seqn, std::unique_ptr< folly::IOBuf > block, size_t length, HPACK::StreamingCallback *streamingCb, bool oooOk)
Definition: HPACKQueue.h:26
void trimStart(std::size_t amount)
Definition: IOBuf.h:703
std::pair<FrameFlags, std::unique_ptr<folly::IOBuf> > proxygen::compress::HPACKScheme::encode ( bool  ,
std::vector< compress::Header allHeaders,
SimStats stats 
)
inlineoverridevirtual

Implements proxygen::compress::CompressionScheme.

Definition at line 45 of file HPACKScheme.h.

References allowOOO_, c, client_, wangle::HTTPHeaderSize::compressed, proxygen::compress::SimStats::compressed, proxygen::HPACKCodec::encode(), proxygen::HeaderCodec::getEncodedSize(), proxygen::compress::CompressionScheme::index, folly::gen::move, uint16_t, proxygen::compress::SimStats::uncompressed, and wangle::HTTPHeaderSize::uncompressed.

48  {
49  auto block = client_.encode(allHeaders);
50  block->prepend(sizeof(uint16_t));
51  folly::io::RWPrivateCursor c(block.get());
52  c.writeBE<uint16_t>(index++);
53  stats.uncompressed += client_.getEncodedSize().uncompressed;
54  stats.compressed += client_.getEncodedSize().compressed;
55  // OOO is allowed with 0 table size
56  FrameFlags flags{allowOOO_};
57  return {flags, std::move(block)};
58  }
flags
Definition: http_parser.h:127
constexpr detail::Map< Move > move
Definition: Base-inl.h:2567
std::unique_ptr< folly::IOBuf > encode(std::vector< compress::Header > &headers) noexcept
Definition: HPACKCodec.cpp:48
char c
const HTTPHeaderSize & getEncodedSize()
Definition: HeaderCodec.h:62
std::unique_ptr<Ack> proxygen::compress::HPACKScheme::getAck ( uint16_t  )
inlineoverridevirtual

Implements proxygen::compress::CompressionScheme.

Definition at line 39 of file HPACKScheme.h.

39  {
40  return nullptr;
41  }
uint32_t proxygen::compress::HPACKScheme::getHolBlockCount ( ) const
inlineoverridevirtual

Implements proxygen::compress::CompressionScheme.

Definition at line 79 of file HPACKScheme.h.

References proxygen::HPACKQueue::getHolBlockCount(), and serverQueue_.

79  {
81  }
uint64_t getHolBlockCount() const
Definition: HPACKQueue.h:73
void proxygen::compress::HPACKScheme::recvAck ( std::unique_ptr< Ack )
inlineoverridevirtual

Implements proxygen::compress::CompressionScheme.

Definition at line 42 of file HPACKScheme.h.

42  {
43  }

Member Data Documentation

bool proxygen::compress::HPACKScheme::allowOOO_ {false}

Definition at line 86 of file HPACKScheme.h.

Referenced by encode(), and HPACKScheme().

HPACKCodec proxygen::compress::HPACKScheme::client_ {TransportDirection::UPSTREAM}

Definition at line 83 of file HPACKScheme.h.

Referenced by encode(), and HPACKScheme().

HPACKCodec proxygen::compress::HPACKScheme::server_ {TransportDirection::DOWNSTREAM}

Definition at line 84 of file HPACKScheme.h.

Referenced by HPACKScheme().

HPACKQueue proxygen::compress::HPACKScheme::serverQueue_ {server_}

Definition at line 85 of file HPACKScheme.h.

Referenced by decode(), getHolBlockCount(), and ~HPACKScheme().


The documentation for this class was generated from the following file: