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

Side by Side Diff: ipc/ipc_perftests.cc

Issue 11964002: Remove IPC::Channel::set_listener(). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 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 | Annotate | Revision Log
« no previous file with comments | « ipc/ipc_channel_win.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "build/build_config.h" 5 #include "build/build_config.h"
6 6
7 #if defined(OS_WIN) 7 #if defined(OS_WIN)
8 #include <windows.h> 8 #include <windows.h>
9 #elif defined(OS_POSIX) 9 #elif defined(OS_POSIX)
10 #include <sys/types.h> 10 #include <sys/types.h>
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 base::TimeDelta max_duration_; 81 base::TimeDelta max_duration_;
82 82
83 DISALLOW_COPY_AND_ASSIGN(EventTimeTracker); 83 DISALLOW_COPY_AND_ASSIGN(EventTimeTracker);
84 }; 84 };
85 85
86 // This channel listener just replies to all messages with the exact same 86 // This channel listener just replies to all messages with the exact same
87 // message. It assumes each message has one string parameter. When the string 87 // message. It assumes each message has one string parameter. When the string
88 // "quit" is sent, it will exit. 88 // "quit" is sent, it will exit.
89 class ChannelReflectorListener : public IPC::Listener { 89 class ChannelReflectorListener : public IPC::Listener {
90 public: 90 public:
91 explicit ChannelReflectorListener(IPC::Channel* channel) 91 ChannelReflectorListener()
92 : channel_(channel), 92 : channel_(NULL),
93 latency_tracker_("Client messages") { 93 latency_tracker_("Client messages") {
94 VLOG(1) << "Client listener up"; 94 VLOG(1) << "Client listener up";
95 } 95 }
96 96
97 ~ChannelReflectorListener() { 97 ~ChannelReflectorListener() {
98 VLOG(1) << "Client listener down"; 98 VLOG(1) << "Client listener down";
99 latency_tracker_.ShowResults(); 99 latency_tracker_.ShowResults();
100 } 100 }
101 101
102 void Init(IPC::Channel* channel) {
103 DCHECK(!channel_);
104 channel_ = channel;
105 }
106
102 virtual bool OnMessageReceived(const IPC::Message& message) { 107 virtual bool OnMessageReceived(const IPC::Message& message) {
108 CHECK(channel_);
109
103 PickleIterator iter(message); 110 PickleIterator iter(message);
104 int64 time_internal; 111 int64 time_internal;
105 EXPECT_TRUE(iter.ReadInt64(&time_internal)); 112 EXPECT_TRUE(iter.ReadInt64(&time_internal));
106 int msgid; 113 int msgid;
107 EXPECT_TRUE(iter.ReadInt(&msgid)); 114 EXPECT_TRUE(iter.ReadInt(&msgid));
108 std::string payload; 115 std::string payload;
109 EXPECT_TRUE(iter.ReadString(&payload)); 116 EXPECT_TRUE(iter.ReadString(&payload));
110 117
111 // Include message deserialization in latency. 118 // Include message deserialization in latency.
112 base::TimeTicks now = base::TimeTicks::Now(); 119 base::TimeTicks now = base::TimeTicks::Now();
(...skipping 18 matching lines...) Expand all
131 return true; 138 return true;
132 } 139 }
133 140
134 private: 141 private:
135 IPC::Channel* channel_; 142 IPC::Channel* channel_;
136 EventTimeTracker latency_tracker_; 143 EventTimeTracker latency_tracker_;
137 }; 144 };
138 145
139 class ChannelPerfListener : public IPC::Listener { 146 class ChannelPerfListener : public IPC::Listener {
140 public: 147 public:
141 ChannelPerfListener(IPC::Channel* channel) 148 ChannelPerfListener()
142 : channel_(channel), 149 : channel_(NULL),
143 msg_count_(0), 150 msg_count_(0),
144 msg_size_(0), 151 msg_size_(0),
145 count_down_(0), 152 count_down_(0),
146 latency_tracker_("Server messages") { 153 latency_tracker_("Server messages") {
147 VLOG(1) << "Server listener up"; 154 VLOG(1) << "Server listener up";
148 } 155 }
149 156
150 ~ChannelPerfListener() { 157 ~ChannelPerfListener() {
151 VLOG(1) << "Server listener down"; 158 VLOG(1) << "Server listener down";
152 } 159 }
153 160
161 void Init(IPC::Channel* channel) {
162 DCHECK(!channel_);
163 channel_ = channel;
164 }
165
154 // Call this before running the message loop. 166 // Call this before running the message loop.
155 void SetTestParams(int msg_count, size_t msg_size) { 167 void SetTestParams(int msg_count, size_t msg_size) {
156 DCHECK_EQ(0, count_down_); 168 DCHECK_EQ(0, count_down_);
157 msg_count_ = msg_count; 169 msg_count_ = msg_count;
158 msg_size_ = msg_size; 170 msg_size_ = msg_size;
159 count_down_ = msg_count_; 171 count_down_ = msg_count_;
160 payload_ = std::string(msg_size_, 'a'); 172 payload_ = std::string(msg_size_, 'a');
161 } 173 }
162 174
163 virtual bool OnMessageReceived(const IPC::Message& message) { 175 virtual bool OnMessageReceived(const IPC::Message& message) {
176 CHECK(channel_);
177
164 PickleIterator iter(message); 178 PickleIterator iter(message);
165 int64 time_internal; 179 int64 time_internal;
166 EXPECT_TRUE(iter.ReadInt64(&time_internal)); 180 EXPECT_TRUE(iter.ReadInt64(&time_internal));
167 int msgid; 181 int msgid;
168 EXPECT_TRUE(iter.ReadInt(&msgid)); 182 EXPECT_TRUE(iter.ReadInt(&msgid));
169 std::string reflected_payload; 183 std::string reflected_payload;
170 EXPECT_TRUE(iter.ReadString(&reflected_payload)); 184 EXPECT_TRUE(iter.ReadString(&reflected_payload));
171 185
172 // Include message deserialization in latency. 186 // Include message deserialization in latency.
173 base::TimeTicks now = base::TimeTicks::Now(); 187 base::TimeTicks now = base::TimeTicks::Now();
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 size_t msg_size_; 223 size_t msg_size_;
210 224
211 int count_down_; 225 int count_down_;
212 std::string payload_; 226 std::string payload_;
213 EventTimeTracker latency_tracker_; 227 EventTimeTracker latency_tracker_;
214 scoped_ptr<PerfTimeLogger> perf_logger_; 228 scoped_ptr<PerfTimeLogger> perf_logger_;
215 }; 229 };
216 230
217 TEST_F(IPCChannelPerfTest, Performance) { 231 TEST_F(IPCChannelPerfTest, Performance) {
218 // Setup IPC channel. 232 // Setup IPC channel.
219 IPC::Channel chan(kReflectorChannel, IPC::Channel::MODE_SERVER, NULL); 233 ChannelPerfListener perf_listener;
220 ChannelPerfListener perf_listener(&chan); 234 IPC::Channel chan(kReflectorChannel, IPC::Channel::MODE_SERVER,
221 chan.set_listener(&perf_listener); 235 &perf_listener);
236 perf_listener.Init(&chan);
222 ASSERT_TRUE(chan.Connect()); 237 ASSERT_TRUE(chan.Connect());
223 238
224 base::ProcessHandle process_handle = SpawnChild(TEST_REFLECTOR, &chan); 239 base::ProcessHandle process_handle = SpawnChild(TEST_REFLECTOR, &chan);
225 ASSERT_TRUE(process_handle); 240 ASSERT_TRUE(process_handle);
226 241
227 const size_t kMsgSizeBase = 12; 242 const size_t kMsgSizeBase = 12;
228 const int kMsgSizeMaxExp = 5; 243 const int kMsgSizeMaxExp = 5;
229 int msg_count = 100000; 244 int msg_count = 100000;
230 size_t msg_size = kMsgSizeBase; 245 size_t msg_size = kMsgSizeBase;
231 for (int i = 1; i <= kMsgSizeMaxExp; i++) { 246 for (int i = 1; i <= kMsgSizeMaxExp; i++) {
(...skipping 22 matching lines...) Expand all
254 269
255 // Clean up child process. 270 // Clean up child process.
256 EXPECT_TRUE(base::WaitForSingleProcess(process_handle, 271 EXPECT_TRUE(base::WaitForSingleProcess(process_handle,
257 base::TimeDelta::FromSeconds(5))); 272 base::TimeDelta::FromSeconds(5)));
258 base::CloseProcessHandle(process_handle); 273 base::CloseProcessHandle(process_handle);
259 } 274 }
260 275
261 // This message loop bounces all messages back to the sender. 276 // This message loop bounces all messages back to the sender.
262 MULTIPROCESS_IPC_TEST_MAIN(RunReflector) { 277 MULTIPROCESS_IPC_TEST_MAIN(RunReflector) {
263 MessageLoopForIO main_message_loop; 278 MessageLoopForIO main_message_loop;
264 IPC::Channel chan(kReflectorChannel, IPC::Channel::MODE_CLIENT, NULL); 279 ChannelReflectorListener channel_reflector_listener;
265 ChannelReflectorListener channel_reflector_listener(&chan); 280 IPC::Channel chan(kReflectorChannel, IPC::Channel::MODE_CLIENT,
266 chan.set_listener(&channel_reflector_listener); 281 &channel_reflector_listener);
282 channel_reflector_listener.Init(&chan);
267 CHECK(chan.Connect()); 283 CHECK(chan.Connect());
268 284
269 MessageLoop::current()->Run(); 285 MessageLoop::current()->Run();
270 return 0; 286 return 0;
271 } 287 }
272 288
273 } // namespace 289 } // namespace
OLDNEW
« no previous file with comments | « ipc/ipc_channel_win.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698