Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(85)

Side by Side Diff: mojo/edk/system/message_pipe_perftest.cc

Issue 1585493002: [mojo] Ports EDK (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 7
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/strings/stringprintf.h" 12 #include "base/strings/stringprintf.h"
13 #include "base/test/perf_time_logger.h" 13 #include "base/test/perf_time_logger.h"
14 #include "mojo/edk/embedder/embedder.h" 14 #include "mojo/edk/embedder/embedder.h"
15 #include "mojo/edk/embedder/scoped_platform_handle.h" 15 #include "mojo/edk/embedder/scoped_platform_handle.h"
16 #include "mojo/edk/system/handle_signals_state.h" 16 #include "mojo/edk/system/handle_signals_state.h"
17 #include "mojo/edk/system/message_pipe_test_utils.h"
18 #include "mojo/edk/system/test_utils.h" 17 #include "mojo/edk/system/test_utils.h"
18 #include "mojo/edk/test/mojo_test_base.h"
19 #include "mojo/edk/test/test_utils.h" 19 #include "mojo/edk/test/test_utils.h"
20 #include "mojo/public/c/system/functions.h" 20 #include "mojo/public/c/system/functions.h"
21 #include "mojo/public/cpp/system/message_pipe.h" 21 #include "mojo/public/cpp/system/message_pipe.h"
22 #include "testing/gtest/include/gtest/gtest.h" 22 #include "testing/gtest/include/gtest/gtest.h"
23 23
24 namespace mojo { 24 namespace mojo {
25 namespace edk { 25 namespace edk {
26 namespace { 26 namespace {
27 27
28 class MultiprocessMessagePipePerfTest 28 class MultiprocessMessagePipePerfTest : public test::MojoTestBase {
29 : public test::MultiprocessMessagePipeTestBase {
30 public: 29 public:
31 MultiprocessMessagePipePerfTest() 30 MultiprocessMessagePipePerfTest()
32 : message_count_(0), 31 : message_count_(0),
33 message_size_(0) {} 32 message_size_(0) {}
34 33
35 void SetUpMeasurement(int message_count, size_t message_size) { 34 void SetUpMeasurement(int message_count, size_t message_size) {
36 message_count_ = message_count; 35 message_count_ = message_count;
37 message_size_ = message_size; 36 message_size_ = message_size;
38 payload_ = std::string(message_size, '*'); 37 payload_ = std::string(message_size, '*');
39 read_buffer_.resize(message_size * 2); 38 read_buffer_.resize(message_size * 2);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 size_t message_size_; 81 size_t message_size_;
83 std::string payload_; 82 std::string payload_;
84 std::string read_buffer_; 83 std::string read_buffer_;
85 scoped_ptr<base::PerfTimeLogger> perf_logger_; 84 scoped_ptr<base::PerfTimeLogger> perf_logger_;
86 }; 85 };
87 86
88 // For each message received, sends a reply message with the same contents 87 // For each message received, sends a reply message with the same contents
89 // repeated twice, until the other end is closed or it receives "quitquitquit" 88 // repeated twice, until the other end is closed or it receives "quitquitquit"
90 // (which it doesn't reply to). It'll return the number of messages received, 89 // (which it doesn't reply to). It'll return the number of messages received,
91 // not including any "quitquitquit" message, modulo 100. 90 // not including any "quitquitquit" message, modulo 100.
92 MOJO_MULTIPROCESS_TEST_CHILD_MAIN(PingPongClient) { 91 DEFINE_TEST_CLIENT_WITH_PIPE(PingPongClient, MultiprocessMessagePipePerfTest,
93 ScopedPlatformHandle client_platform_handle = 92 h) {
94 std::move(test::MultiprocessTestHelper::client_platform_handle);
95 CHECK(client_platform_handle.is_valid());
96 ScopedMessagePipeHandle mp =
97 CreateMessagePipe(std::move(client_platform_handle));
98
99 std::string buffer(1000000, '\0'); 93 std::string buffer(1000000, '\0');
100 int rv = 0; 94 int rv = 0;
101 while (true) { 95 while (true) {
102 // Wait for our end of the message pipe to be readable. 96 // Wait for our end of the message pipe to be readable.
103 HandleSignalsState hss; 97 HandleSignalsState hss;
104 MojoResult result = 98 MojoResult result =
105 MojoWait(mp.get().value(), MOJO_HANDLE_SIGNAL_READABLE, 99 MojoWait(h, MOJO_HANDLE_SIGNAL_READABLE,
106 MOJO_DEADLINE_INDEFINITE, &hss); 100 MOJO_DEADLINE_INDEFINITE, &hss);
107 if (result != MOJO_RESULT_OK) { 101 if (result != MOJO_RESULT_OK) {
108 rv = result; 102 rv = result;
109 break; 103 break;
110 } 104 }
111 105
112 uint32_t read_size = static_cast<uint32_t>(buffer.size()); 106 uint32_t read_size = static_cast<uint32_t>(buffer.size());
113 CHECK_EQ(MojoReadMessage(mp.get().value(), &buffer[0], 107 CHECK_EQ(MojoReadMessage(h, &buffer[0],
114 &read_size, nullptr, 108 &read_size, nullptr,
115 0, MOJO_READ_MESSAGE_FLAG_NONE), 109 0, MOJO_READ_MESSAGE_FLAG_NONE),
116 MOJO_RESULT_OK); 110 MOJO_RESULT_OK);
117 111
118 // Empty message indicates quit. 112 // Empty message indicates quit.
119 if (read_size == 0) 113 if (read_size == 0)
120 break; 114 break;
121 115
122 CHECK_EQ(MojoWriteMessage(mp.get().value(), &buffer[0], 116 CHECK_EQ(MojoWriteMessage(h, &buffer[0],
123 read_size, 117 read_size,
124 nullptr, 0, MOJO_WRITE_MESSAGE_FLAG_NONE), 118 nullptr, 0, MOJO_WRITE_MESSAGE_FLAG_NONE),
125 MOJO_RESULT_OK); 119 MOJO_RESULT_OK);
126 } 120 }
127 121
128 return rv; 122 return rv;
129 } 123 }
130 124
131 // Repeatedly sends messages as previous one got replied by the child. 125 // Repeatedly sends messages as previous one got replied by the child.
132 // Waits for the child to close its end before quitting once specified 126 // Waits for the child to close its end before quitting once specified
133 // number of messages has been sent. 127 // number of messages has been sent.
134 #if defined(OS_ANDROID) 128 #if defined(OS_ANDROID)
135 // Android multi-process tests are not executing the new process. This is flaky. 129 // Android multi-process tests are not executing the new process. This is flaky.
136 #define MAYBE_PingPong DISABLED_PingPong 130 #define MAYBE_PingPong DISABLED_PingPong
137 #else 131 #else
138 #define MAYBE_PingPong PingPong 132 #define MAYBE_PingPong PingPong
139 #endif // defined(OS_ANDROID) 133 #endif // defined(OS_ANDROID)
140 TEST_F(MultiprocessMessagePipePerfTest, MAYBE_PingPong) { 134 TEST_F(MultiprocessMessagePipePerfTest, MAYBE_PingPong) {
141 helper()->StartChild("PingPongClient"); 135 RUN_CHILD_ON_PIPE(PingPongClient, h)
136 // This values are set to align with one at ipc_pertests.cc for comparison.
137 const size_t kMsgSize[5] = {12, 144, 1728, 20736, 248832};
138 const int kMessageCount[5] = {50000, 50000, 50000, 12000, 1000};
142 139
143 ScopedMessagePipeHandle mp = 140 for (size_t i = 0; i < 5; i++) {
144 CreateMessagePipe(std::move(helper()->server_platform_handle)); 141 SetUpMeasurement(kMessageCount[i], kMsgSize[i]);
142 Measure(h);
143 }
145 144
146 // This values are set to align with one at ipc_pertests.cc for comparison. 145 SendQuitMessage(h);
147 const size_t kMsgSize[5] = {12, 144, 1728, 20736, 248832}; 146 END_CHILD()
148 const int kMessageCount[5] = {50000, 50000, 50000, 12000, 1000};
149
150 for (size_t i = 0; i < 5; i++) {
151 SetUpMeasurement(kMessageCount[i], kMsgSize[i]);
152 Measure(mp.get().value());
153 }
154
155 SendQuitMessage(mp.get().value());
156 EXPECT_EQ(0, helper()->WaitForChildShutdown());
157 } 147 }
158 148
159 } // namespace 149 } // namespace
160 } // namespace edk 150 } // namespace edk
161 } // namespace mojo 151 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698