| Index: net/websockets/websocket_frame_perftest.cc
|
| diff --git a/net/websockets/websocket_frame_perftest.cc b/net/websockets/websocket_frame_perftest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..11fe5afab2a3ca1c3167656874a42e4a4848b8a3
|
| --- /dev/null
|
| +++ b/net/websockets/websocket_frame_perftest.cc
|
| @@ -0,0 +1,58 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "net/websockets/websocket_frame.h"
|
| +
|
| +#include <algorithm>
|
| +#include <vector>
|
| +
|
| +#include "base/macros.h"
|
| +#include "base/test/perf_time_logger.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace net {
|
| +
|
| +namespace {
|
| +
|
| +const int kIterations = 100000;
|
| +const int kLongPayloadSize = 1 << 16;
|
| +const char kMaskingKey[] = "\xFE\xED\xBE\xEF";
|
| +
|
| +COMPILE_ASSERT(arraysize(kMaskingKey) ==
|
| + WebSocketFrameHeader::kMaskingKeyLength + 1,
|
| + incorrect_masking_key_size);
|
| +
|
| +class WebSocketFrameTestMaskBenchmark : public ::testing::Test {
|
| + protected:
|
| + void Benchmark(const char* const name,
|
| + const char* const payload,
|
| + size_t size) {
|
| + std::vector<char> scratch(payload, payload + size);
|
| + WebSocketMaskingKey masking_key;
|
| + std::copy(kMaskingKey,
|
| + kMaskingKey + WebSocketFrameHeader::kMaskingKeyLength,
|
| + masking_key.key);
|
| + base::PerfTimeLogger timer(name);
|
| + for (int x = 0; x < kIterations; ++x) {
|
| + MaskWebSocketFramePayload(
|
| + masking_key, x % size, &scratch.front(), scratch.size());
|
| + }
|
| + timer.Done();
|
| + }
|
| +};
|
| +
|
| +TEST_F(WebSocketFrameTestMaskBenchmark, BenchmarkMaskShortPayload) {
|
| + static const char kShortPayload[] = "Short Payload";
|
| + Benchmark(
|
| + "Frame_mask_short_payload", kShortPayload, arraysize(kShortPayload));
|
| +}
|
| +
|
| +TEST_F(WebSocketFrameTestMaskBenchmark, BenchmarkMaskLongPayload) {
|
| + std::vector<char> payload(kLongPayloadSize, 'a');
|
| + Benchmark("Frame_mask_long_payload", &payload.front(), payload.size());
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +} // namespace net
|
|
|