Skip to content
File

Blob: src/workerd/tests/bench-kj-headers.c++

1.5 KB
1// Copyright (c) 2023 Cloudflare, Inc.
2// Licensed under the Apache 2.0 license found in the LICENSE file or at:
3// https://opensource.org/licenses/Apache-2.0
4 
5#include <workerd/tests/bench-tools.h>
6 
7#include <kj/compat/http.h>
8 
9namespace workerd {
10namespace {
11 
12struct KjHeaders: public benchmark::Fixture {
13 virtual ~KjHeaders() noexcept(true) {}
14 
15 void SetUp(benchmark::State& state) noexcept(true) override {
16 kj::HttpHeaderTable::Builder builder;
17 builder.add("Host");
18 builder.add("Accept");
19 builder.add("Content-Type");
20 builder.add("Last-Modified");
21 table = builder.build();
22 }
23 
24 kj::Own<kj::HttpHeaderTable> table;
25};
26 
27BENCHMARK_F(KjHeaders, Parse)(benchmark::State& state) {
28 kj::String in = kj::heapString(
29 "GET /favicon.ico HTTP/1.1\r\n"
30 "Host: 0.0.0.0=5000\r\n"
31 "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9) Gecko/2008061015 Firefox/3.0\r\n"
32 "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"
33 "Accept-Language: en-us,en;q=0.5\r\n"
34 "Accept-Encoding: gzip,deflate\r\n"
35 "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n"
36 "Keep-Alive: 300\r\n"
37 "Connection: keep-alive\r\n"
38 "\r\n");
39 
40 for (auto _: state) {
41 kj::HttpHeaders headers(*table);
42 
43 for (size_t i = 0; i < 1000; ++i) {
44 benchmark::DoNotOptimize(
45 headers.tryParseRequest(in.asArray()).is<kj::HttpHeaders::Request>());
46 benchmark::DoNotOptimize(i);
47 }
48 }
49}
50 
51} // namespace
52} // namespace workerd