| Index: mojo/public/cpp/bindings/tests/bindings_perftest.cc
|
| diff --git a/mojo/public/cpp/bindings/tests/bindings_perftest.cc b/mojo/public/cpp/bindings/tests/bindings_perftest.cc
|
| index 6a50de46f93bad397468017dbebec3627fed9dda..741a5e915fdb8c15aab4b5c352c2b778c55a207e 100644
|
| --- a/mojo/public/cpp/bindings/tests/bindings_perftest.cc
|
| +++ b/mojo/public/cpp/bindings/tests/bindings_perftest.cc
|
| @@ -8,12 +8,14 @@
|
| #include "base/bind.h"
|
| #include "base/message_loop/message_loop.h"
|
| #include "base/run_loop.h"
|
| +#include "base/strings/stringprintf.h"
|
| #include "base/threading/thread_task_runner_handle.h"
|
| #include "base/time/time.h"
|
| #include "mojo/public/cpp/bindings/binding.h"
|
| #include "mojo/public/cpp/bindings/interface_endpoint_client.h"
|
| #include "mojo/public/cpp/bindings/lib/message_builder.h"
|
| #include "mojo/public/cpp/bindings/lib/multiplex_router.h"
|
| +#include "mojo/public/cpp/bindings/lib/serialization.h"
|
| #include "mojo/public/cpp/bindings/message.h"
|
| #include "mojo/public/cpp/test_support/test_support.h"
|
| #include "mojo/public/cpp/test_support/test_utils.h"
|
| @@ -280,5 +282,48 @@ TEST_F(MojoBindingsPerftest, MultiplexRouterDispatchCost) {
|
| }
|
| }
|
|
|
| -} // namespace
|
| +void TestStringDeserializationInternal(bool utf8_check,
|
| + const std::string& input,
|
| + size_t iterations) {
|
| + auto data = mojo::internal::SerializeString(input);
|
| + std::string output;
|
| + for (size_t i = 0; i < 10; ++i) {
|
| + EXPECT_TRUE(mojo::internal::DeserializeString(utf8_check, data, &output));
|
| + }
|
| + EXPECT_EQ(input, output);
|
| +
|
| + base::TimeTicks start_time = base::TimeTicks::Now();
|
| + for (size_t i = 0; i < iterations; ++i) {
|
| + EXPECT_TRUE(mojo::internal::DeserializeString(utf8_check, data, &output));
|
| + }
|
| + base::TimeTicks end_time = base::TimeTicks::Now();
|
| + base::TimeDelta duration = end_time - start_time;
|
| +
|
| + test::LogPerfResult(utf8_check ? "DeserializeString_Utf8Check"
|
| + : "DeserializeString_NoUtf8Check",
|
| + base::StringPrintf("%lu", input.size()).c_str(),
|
| + iterations / duration.InSecondsF(), "times/second");
|
| +}
|
| +
|
| +void TestStringDeserialization(const std::string& input, size_t iterations) {
|
| + TestStringDeserializationInternal(false, input, iterations);
|
| + TestStringDeserializationInternal(true, input, iterations);
|
| +}
|
| +
|
| +std::string CreateASCIIString(size_t length) {
|
| + std::string result(length, 0);
|
| + for (size_t i = 0; i < length; ++i) {
|
| + result[i] = i % 128;
|
| + }
|
| + EXPECT_EQ(length, result.size());
|
| + return result;
|
| +}
|
| +
|
| +TEST_F(MojoBindingsPerftest, String) {
|
| + TestStringDeserialization(CreateASCIIString(8), 10000000);
|
| + TestStringDeserialization(CreateASCIIString(128), 10000000);
|
| + TestStringDeserialization(CreateASCIIString(1024), 10000000);
|
| +}
|
| +
|
| +}
|
| } // namespace mojo
|
|
|