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

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

Issue 1396783004: Convert mojo::system::ChannelEndpointClient to use our new refcounting stuff (instead of base's). (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 2 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 <stdint.h> 5 #include <stdint.h>
6 #include <stdio.h> 6 #include <stdio.h>
7 #include <string.h> 7 #include <string.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <string> 10 #include <string>
(...skipping 27 matching lines...) Expand all
38 MultiprocessMessagePipePerfTest() : message_count_(0), message_size_(0) {} 38 MultiprocessMessagePipePerfTest() : message_count_(0), message_size_(0) {}
39 39
40 void SetUpMeasurement(int message_count, size_t message_size) { 40 void SetUpMeasurement(int message_count, size_t message_size) {
41 message_count_ = message_count; 41 message_count_ = message_count;
42 message_size_ = message_size; 42 message_size_ = message_size;
43 payload_ = std::string(message_size, '*'); 43 payload_ = std::string(message_size, '*');
44 read_buffer_.resize(message_size * 2); 44 read_buffer_.resize(message_size * 2);
45 } 45 }
46 46
47 protected: 47 protected:
48 void WriteWaitThenRead(scoped_refptr<MessagePipe> mp) { 48 void WriteWaitThenRead(MessagePipe* mp) {
49 CHECK_EQ(mp->WriteMessage(0, UserPointer<const void>(payload_.data()), 49 CHECK_EQ(mp->WriteMessage(0, UserPointer<const void>(payload_.data()),
50 static_cast<uint32_t>(payload_.size()), nullptr, 50 static_cast<uint32_t>(payload_.size()), nullptr,
51 MOJO_WRITE_MESSAGE_FLAG_NONE), 51 MOJO_WRITE_MESSAGE_FLAG_NONE),
52 MOJO_RESULT_OK); 52 MOJO_RESULT_OK);
53 HandleSignalsState hss; 53 HandleSignalsState hss;
54 CHECK_EQ(test::WaitIfNecessary(mp, MOJO_HANDLE_SIGNAL_READABLE, &hss), 54 CHECK_EQ(test::WaitIfNecessary(mp, MOJO_HANDLE_SIGNAL_READABLE, &hss),
55 MOJO_RESULT_OK); 55 MOJO_RESULT_OK);
56 uint32_t read_buffer_size = static_cast<uint32_t>(read_buffer_.size()); 56 uint32_t read_buffer_size = static_cast<uint32_t>(read_buffer_.size());
57 CHECK_EQ(mp->ReadMessage(0, UserPointer<void>(&read_buffer_[0]), 57 CHECK_EQ(mp->ReadMessage(0, UserPointer<void>(&read_buffer_[0]),
58 MakeUserPointer(&read_buffer_size), nullptr, 58 MakeUserPointer(&read_buffer_size), nullptr,
59 nullptr, MOJO_READ_MESSAGE_FLAG_NONE), 59 nullptr, MOJO_READ_MESSAGE_FLAG_NONE),
60 MOJO_RESULT_OK); 60 MOJO_RESULT_OK);
61 CHECK_EQ(read_buffer_size, static_cast<uint32_t>(payload_.size())); 61 CHECK_EQ(read_buffer_size, static_cast<uint32_t>(payload_.size()));
62 } 62 }
63 63
64 void SendQuitMessage(scoped_refptr<MessagePipe> mp) { 64 void SendQuitMessage(MessagePipe* mp) {
65 CHECK_EQ(mp->WriteMessage(0, UserPointer<const void>(""), 0, nullptr, 65 CHECK_EQ(mp->WriteMessage(0, UserPointer<const void>(""), 0, nullptr,
66 MOJO_WRITE_MESSAGE_FLAG_NONE), 66 MOJO_WRITE_MESSAGE_FLAG_NONE),
67 MOJO_RESULT_OK); 67 MOJO_RESULT_OK);
68 } 68 }
69 69
70 void Measure(scoped_refptr<MessagePipe> mp) { 70 void Measure(MessagePipe* mp) {
71 // Have one ping-pong to ensure channel being established. 71 // Have one ping-pong to ensure channel being established.
72 WriteWaitThenRead(mp); 72 WriteWaitThenRead(mp);
73 73
74 std::string test_name = 74 std::string test_name =
75 base::StringPrintf("IPC_Perf_%dx_%u", message_count_, 75 base::StringPrintf("IPC_Perf_%dx_%u", message_count_,
76 static_cast<unsigned>(message_size_)); 76 static_cast<unsigned>(message_size_));
77 base::PerfTimeLogger logger(test_name.c_str()); 77 base::PerfTimeLogger logger(test_name.c_str());
78 78
79 for (int i = 0; i < message_count_; ++i) 79 for (int i = 0; i < message_count_; ++i)
80 WriteWaitThenRead(mp); 80 WriteWaitThenRead(mp);
(...skipping 13 matching lines...) Expand all
94 // repeated twice, until the other end is closed or it receives "quitquitquit" 94 // repeated twice, until the other end is closed or it receives "quitquitquit"
95 // (which it doesn't reply to). It'll return the number of messages received, 95 // (which it doesn't reply to). It'll return the number of messages received,
96 // not including any "quitquitquit" message, modulo 100. 96 // not including any "quitquitquit" message, modulo 100.
97 MOJO_MULTIPROCESS_TEST_CHILD_MAIN(PingPongClient) { 97 MOJO_MULTIPROCESS_TEST_CHILD_MAIN(PingPongClient) {
98 embedder::SimplePlatformSupport platform_support; 98 embedder::SimplePlatformSupport platform_support;
99 test::ChannelThread channel_thread(&platform_support); 99 test::ChannelThread channel_thread(&platform_support);
100 embedder::ScopedPlatformHandle client_platform_handle = 100 embedder::ScopedPlatformHandle client_platform_handle =
101 mojo::test::MultiprocessTestHelper::client_platform_handle.Pass(); 101 mojo::test::MultiprocessTestHelper::client_platform_handle.Pass();
102 CHECK(client_platform_handle.is_valid()); 102 CHECK(client_platform_handle.is_valid());
103 RefPtr<ChannelEndpoint> ep; 103 RefPtr<ChannelEndpoint> ep;
104 scoped_refptr<MessagePipe> mp(MessagePipe::CreateLocalProxy(&ep)); 104 auto mp = MessagePipe::CreateLocalProxy(&ep);
105 channel_thread.Start(client_platform_handle.Pass(), std::move(ep)); 105 channel_thread.Start(client_platform_handle.Pass(), std::move(ep));
106 106
107 std::string buffer(1000000, '\0'); 107 std::string buffer(1000000, '\0');
108 int rv = 0; 108 int rv = 0;
109 while (true) { 109 while (true) {
110 // Wait for our end of the message pipe to be readable. 110 // Wait for our end of the message pipe to be readable.
111 HandleSignalsState hss; 111 HandleSignalsState hss;
112 MojoResult result = 112 MojoResult result =
113 test::WaitIfNecessary(mp, MOJO_HANDLE_SIGNAL_READABLE, &hss); 113 test::WaitIfNecessary(mp.get(), MOJO_HANDLE_SIGNAL_READABLE, &hss);
114 if (result != MOJO_RESULT_OK) { 114 if (result != MOJO_RESULT_OK) {
115 rv = result; 115 rv = result;
116 break; 116 break;
117 } 117 }
118 118
119 uint32_t read_size = static_cast<uint32_t>(buffer.size()); 119 uint32_t read_size = static_cast<uint32_t>(buffer.size());
120 CHECK_EQ(mp->ReadMessage(0, UserPointer<void>(&buffer[0]), 120 CHECK_EQ(mp->ReadMessage(0, UserPointer<void>(&buffer[0]),
121 MakeUserPointer(&read_size), nullptr, nullptr, 121 MakeUserPointer(&read_size), nullptr, nullptr,
122 MOJO_READ_MESSAGE_FLAG_NONE), 122 MOJO_READ_MESSAGE_FLAG_NONE),
123 MOJO_RESULT_OK); 123 MOJO_RESULT_OK);
(...skipping 18 matching lines...) Expand all
142 #if defined(OS_ANDROID) 142 #if defined(OS_ANDROID)
143 // Android multi-process tests are not executing the new process. This is flaky. 143 // Android multi-process tests are not executing the new process. This is flaky.
144 #define MAYBE_PingPong DISABLED_PingPong 144 #define MAYBE_PingPong DISABLED_PingPong
145 #else 145 #else
146 #define MAYBE_PingPong PingPong 146 #define MAYBE_PingPong PingPong
147 #endif // defined(OS_ANDROID) 147 #endif // defined(OS_ANDROID)
148 TEST_F(MultiprocessMessagePipePerfTest, MAYBE_PingPong) { 148 TEST_F(MultiprocessMessagePipePerfTest, MAYBE_PingPong) {
149 helper()->StartChild("PingPongClient"); 149 helper()->StartChild("PingPongClient");
150 150
151 RefPtr<ChannelEndpoint> ep; 151 RefPtr<ChannelEndpoint> ep;
152 scoped_refptr<MessagePipe> mp(MessagePipe::CreateLocalProxy(&ep)); 152 auto mp = MessagePipe::CreateLocalProxy(&ep);
153 Init(std::move(ep)); 153 Init(std::move(ep));
154 154
155 // This values are set to align with one at ipc_pertests.cc for comparison. 155 // This values are set to align with one at ipc_pertests.cc for comparison.
156 const size_t kMsgSize[5] = {12, 144, 1728, 20736, 248832}; 156 const size_t kMsgSize[5] = {12, 144, 1728, 20736, 248832};
157 const int kMessageCount[5] = {50000, 50000, 50000, 12000, 1000}; 157 const int kMessageCount[5] = {50000, 50000, 50000, 12000, 1000};
158 158
159 for (size_t i = 0; i < 5; i++) { 159 for (size_t i = 0; i < 5; i++) {
160 SetUpMeasurement(kMessageCount[i], kMsgSize[i]); 160 SetUpMeasurement(kMessageCount[i], kMsgSize[i]);
161 Measure(mp); 161 Measure(mp.get());
162 } 162 }
163 163
164 SendQuitMessage(mp); 164 SendQuitMessage(mp.get());
165 mp->Close(0); 165 mp->Close(0);
166 EXPECT_EQ(0, helper()->WaitForChildShutdown()); 166 EXPECT_EQ(0, helper()->WaitForChildShutdown());
167 } 167 }
168 168
169 } // namespace 169 } // namespace
170 } // namespace system 170 } // namespace system
171 } // namespace mojo 171 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/edk/system/message_pipe_dispatcher_unittest.cc ('k') | mojo/edk/system/message_pipe_test_utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698