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 |