File
Blob: src/workerd/tests/bench-kj-headers.c++
| 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 | |
| 9 | namespace workerd { |
| 10 | namespace { |
| 11 | |
| 12 | struct 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 | |
| 27 | BENCHMARK_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 |