proxygen
HPACKBenchmark.cpp
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  */
12 #include <folly/Benchmark.h>
13 #include <folly/Range.h>
14 
15 #include <algorithm>
16 
17 using namespace std;
18 using namespace folly;
19 using namespace proxygen;
21 
22 unique_ptr<IOBuf> encode(vector<HPACKHeader>& headers, HPACKEncoder& encoder) {
23  return encoder.encode(headers);
24 }
25 
26 void encodeDecode(vector<HPACKHeader>& headers, HPACKEncoder& encoder,
27  HPACKDecoder& decoder) {
28  unique_ptr<IOBuf> encoded = encode(headers, encoder);
29  CHECK(encoded);
31  folly::io::Cursor c(encoded.get());
32  decoder.decodeStreaming(c, c.totalLength(), &cb);
33  CHECK(!cb.hasError());
34 }
35 
36 
37 vector<HPACKHeader> getHeaders() {
38  vector<HPACKHeader> headers;
39  headers.emplace_back(":authority", "www.facebook.com");
40  headers.emplace_back(":method", "GET");
41  headers.emplace_back(":path", "/graphql");
42  headers.emplace_back(":scheme", "https");
43  headers.emplace_back(
44  "user-agent",
45  "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 "
46  "(KHTML, like Gecko) Chrome/60.0.3100.0 Safari/537.36");
47  headers.emplace_back("accept-encoding", "gzip, deflate, br");
48  headers.emplace_back("accept-language", "en-US,en;q=0.8");
49  headers.emplace_back(
50  "accept",
51  "text/html,application/xhtml+xml,application/xml;q=0.9,image/"
52  "webp,image/apng,*/*;q=0.8");
53  return headers;
54 }
55 
56 namespace {
57 static vector<HPACKHeader> headers = getHeaders();
58 }
59 
60 void encodeBench(int reencodes, int iters) {
61  for (int i = 0; i < iters; i++) {
62  HPACKEncoder encoder(true);
63  encode(headers, encoder);
64  for (int j = 0; j < reencodes; j++) {
65  encode(headers, encoder);
66  }
67  }
68 }
69 
70 void encodeDecodeBench(int reencodes, int iters) {
71  for (int i = 0; i < iters; i++) {
72  HPACKEncoder encoder(true);
73  HPACKDecoder decoder;
74  encodeDecode(headers, encoder, decoder);
75  for (int j = 0; j < reencodes; j++) {
76  encodeDecode(headers, encoder, decoder);
77  }
78  }
79 }
80 
81 BENCHMARK(Encode, iters) {
82  encodeBench(0, iters);
83 }
84 
85 BENCHMARK(Encode1, iters) {
86  encodeBench(1, iters);
87 }
88 
89 BENCHMARK(Encode2, iters) {
90  encodeBench(2, iters);
91 }
92 
93 BENCHMARK(EncodeDecode, iters) {
94  encodeDecodeBench(0, iters);
95 }
96 
97 BENCHMARK(EncodeDecode1, iters) {
98  encodeDecodeBench(1, iters);
99 }
100 
101 BENCHMARK(EncodeDecode2, iters) {
102  encodeDecodeBench(2, iters);
103 }
104 
105 int main(int argc, char** argv) {
106  gflags::ParseCommandLineFlags(&argc, &argv, true);
108  return 0;
109 }
unique_ptr< IOBuf > encode(vector< HPACKHeader > &headers, HPACKEncoder &encoder)
STL namespace.
—— Concurrent Priority Queue Implementation ——
Definition: AtomicBitSet.h:29
void runBenchmarks()
Definition: Benchmark.cpp:456
vector< HPACKHeader > getHeaders()
char ** argv
BENCHMARK(Encode, iters)
void encodeBench(int reencodes, int iters)
void decodeStreaming(folly::io::Cursor &cursor, uint32_t totalBytes, HPACK::StreamingCallback *streamingCb)
std::unique_ptr< folly::IOBuf > encode(const std::vector< HPACKHeader > &headers, uint32_t headroom=0)
void encodeDecodeBench(int reencodes, int iters)
void encodeDecode(vector< HPACKHeader > &headers, HPACKEncoder &encoder, HPACKDecoder &decoder)
char c
int main(int argc, char **argv)