proxygen
CompressionSimulator.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015-present, Facebook, Inc.
3  * All rights reserved.
4  *
5  * This source code is licensed under the BSD-style license found in the
6  * LICENSE file in the root directory of this source tree. An additional grant
7  * of patent rights can be found in the PATENTS file in the same directory.
8  *
9  */
10 #pragma once
11 
14 
15 #include <chrono>
16 #include <folly/Random.h>
18 #include <unordered_map>
19 #include <vector>
20 
21 namespace proxygen { namespace compress {
22 
24  public:
26  }
27 
28  bool readInputFromFileAndSchedule(const std::string& filename);
29  void run();
30 
31  // Called from CompressionScheme::runLoopCallback
33  void flushPacket(CompressionScheme* scheme);
34 
35  private:
36  void flushRequests(CompressionScheme* scheme);
37  void setupRequest(uint16_t seqn,
38  HTTPMessage&& msg,
39  std::chrono::milliseconds encodeDelay);
41  std::unique_ptr<CompressionScheme> makeScheme();
42  std::pair<FrameFlags, std::unique_ptr<folly::IOBuf>> encode(
43  CompressionScheme* scheme, bool newPacket, uint16_t seqn);
44  void decodePacket(CompressionScheme* scheme,
45  std::list<CompressionScheme::BlockInfo>& blocks);
46  void decode(CompressionScheme* scheme,
48  std::unique_ptr<folly::IOBuf> encodedReq,
50  void scheduleEvent(folly::Function<void()> f, std::chrono::milliseconds ms);
51  void sendAck(CompressionScheme* scheme,
52  std::unique_ptr<CompressionScheme::Ack> ack);
53  void recvAck(CompressionScheme* scheme,
54  std::unique_ptr<CompressionScheme::Ack> ack);
55 
56  std::chrono::milliseconds deliveryDelay();
57  std::chrono::milliseconds rtt();
58  std::chrono::milliseconds one_half_rtt();
59  std::chrono::milliseconds rxmitDelay();
60  bool loss();
61  bool delayed();
62  std::chrono::milliseconds extraDelay();
64 
66  std::vector<proxygen::HTTPMessage> requests_;
68  // Map of domain-name to compression scheme
69  std::unordered_map<std::string, std::unique_ptr<CompressionScheme>> domains_;
70  std::vector<SimStreamingCallback> callbacks_;
72  static_cast<folly::Random::DefaultGenerator::result_type>(params_.seed)};
74 };
75 }} // namespace proxygen::compress
auto f
std::vector< SimStreamingCallback > callbacks_
flags
Definition: http_parser.h:127
std::unique_ptr< CompressionScheme > makeScheme()
bool readInputFromFileAndSchedule(const std::string &filename)
void decodePacket(CompressionScheme *scheme, std::list< CompressionScheme::BlockInfo > &blocks)
std::unordered_map< std::string, std::unique_ptr< CompressionScheme > > domains_
void setupRequest(uint16_t seqn, HTTPMessage &&msg, std::chrono::milliseconds encodeDelay)
folly::Random::DefaultGenerator rng_
void flushSchemePackets(CompressionScheme *scheme)
void scheduleEvent(folly::Function< void()> f, std::chrono::milliseconds ms)
void flushRequests(CompressionScheme *scheme)
std::mt19937 DefaultGenerator
Definition: Random.h:97
CompressionScheme * getScheme(folly::StringPiece host)
void recvAck(CompressionScheme *scheme, std::unique_ptr< CompressionScheme::Ack > ack)
void sendAck(CompressionScheme *scheme, std::unique_ptr< CompressionScheme::Ack > ack)
void decode(CompressionScheme *scheme, FrameFlags flags, std::unique_ptr< folly::IOBuf > encodedReq, SimStreamingCallback &cb)
const char * string
Definition: Conv.cpp:212
std::vector< proxygen::HTTPMessage > requests_
std::pair< FrameFlags, std::unique_ptr< folly::IOBuf > > encode(CompressionScheme *scheme, bool newPacket, uint16_t seqn)
void flushPacket(CompressionScheme *scheme)