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

Unified Diff: ipc/ipc_perftests.cc

Issue 488003003: Add ChannelProxy benchmark to ipc_perftests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Landing. Created 6 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/test/test_io_thread.cc ('k') | ipc/ipc_test_base.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ipc/ipc_perftests.cc
diff --git a/ipc/ipc_perftests.cc b/ipc/ipc_perftests.cc
index 3feabda9d106382a2774714a49c492ce7d54c8a3..dd08cf7b0e1625a16470287502a34c6fff91b788 100644
--- a/ipc/ipc_perftests.cc
+++ b/ipc/ipc_perftests.cc
@@ -13,6 +13,7 @@
#include "base/pickle.h"
#include "base/strings/stringprintf.h"
#include "base/test/perf_time_logger.h"
+#include "base/test/test_io_thread.h"
#include "base/threading/thread.h"
#include "base/time/time.h"
#include "ipc/ipc_channel.h"
@@ -137,8 +138,9 @@ class ChannelReflectorListener : public IPC::Listener {
class PerformanceChannelListener : public IPC::Listener {
public:
- PerformanceChannelListener()
- : channel_(NULL),
+ explicit PerformanceChannelListener(const std::string& label)
+ : label_(label),
+ sender_(NULL),
msg_count_(0),
msg_size_(0),
count_down_(0),
@@ -150,9 +152,9 @@ class PerformanceChannelListener : public IPC::Listener {
VLOG(1) << "Server listener down";
}
- void Init(IPC::Channel* channel) {
- DCHECK(!channel_);
- channel_ = channel;
+ void Init(IPC::Sender* sender) {
+ DCHECK(!sender_);
+ sender_ = sender;
}
// Call this before running the message loop.
@@ -165,7 +167,7 @@ class PerformanceChannelListener : public IPC::Listener {
}
virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE {
- CHECK(channel_);
+ CHECK(sender_);
PickleIterator iter(message);
int64 time_internal;
@@ -182,8 +184,11 @@ class PerformanceChannelListener : public IPC::Listener {
// Start timing on hello.
latency_tracker_.Reset();
DCHECK(!perf_logger_.get());
- std::string test_name = base::StringPrintf(
- "IPC_Perf_%dx_%u", msg_count_, static_cast<unsigned>(msg_size_));
+ std::string test_name =
+ base::StringPrintf("IPC_%s_Perf_%dx_%u",
+ label_.c_str(),
+ msg_count_,
+ static_cast<unsigned>(msg_size_));
perf_logger_.reset(new base::PerfTimeLogger(test_name.c_str()));
} else {
DCHECK_EQ(payload_.size(), reflected_payload.size());
@@ -205,12 +210,13 @@ class PerformanceChannelListener : public IPC::Listener {
msg->WriteInt64(base::TimeTicks::Now().ToInternalValue());
msg->WriteInt(count_down_);
msg->WriteString(payload_);
- channel_->Send(msg);
+ sender_->Send(msg);
return true;
}
private:
- IPC::Channel* channel_;
+ std::string label_;
+ IPC::Sender* sender_;
int msg_count_;
size_t msg_size_;
@@ -220,11 +226,11 @@ class PerformanceChannelListener : public IPC::Listener {
scoped_ptr<base::PerfTimeLogger> perf_logger_;
};
-TEST_F(IPCChannelPerfTest, Performance) {
+TEST_F(IPCChannelPerfTest, ChannelPingPong) {
Init("PerformanceClient");
// Set up IPC channel and start client.
- PerformanceChannelListener listener;
+ PerformanceChannelListener listener("Channel");
CreateChannel(&listener);
listener.Init(channel());
ASSERT_TRUE(ConnectChannel());
@@ -274,4 +280,47 @@ MULTIPROCESS_IPC_TEST_CLIENT_MAIN(PerformanceClient) {
return 0;
}
+TEST_F(IPCChannelPerfTest, ChannelProxyPingPong) {
+ set_message_loop(make_scoped_ptr(new base::MessageLoop()));
+ Init("PerformanceClient");
+
+ base::TestIOThread io_thread(base::TestIOThread::kAutoStart);
+
+ // Set up IPC channel and start client.
+ PerformanceChannelListener listener("ChannelProxy");
+ CreateChannelProxy(&listener, io_thread.task_runner());
+ listener.Init(channel_proxy());
+ ASSERT_TRUE(StartClient());
+
+ // Test several sizes. We use 12^N for message size, and limit the message
+ // count to keep the test duration reasonable.
+ const size_t kMsgSize[5] = {12, 144, 1728, 20736, 248832};
+ const int kMessageCount[5] = {50000, 50000, 50000, 12000, 1000};
+
+ for (size_t i = 0; i < 5; i++) {
+ listener.SetTestParams(kMessageCount[i], kMsgSize[i]);
+
+ // This initial message will kick-start the ping-pong of messages.
+ IPC::Message* message =
+ new IPC::Message(0, 2, IPC::Message::PRIORITY_NORMAL);
+ message->WriteInt64(base::TimeTicks::Now().ToInternalValue());
+ message->WriteInt(-1);
+ message->WriteString("hello");
+ sender()->Send(message);
+
+ // Run message loop.
+ base::MessageLoop::current()->Run();
+ }
+
+ // Send quit message.
+ IPC::Message* message = new IPC::Message(0, 2, IPC::Message::PRIORITY_NORMAL);
+ message->WriteInt64(base::TimeTicks::Now().ToInternalValue());
+ message->WriteInt(-1);
+ message->WriteString("quit");
+ sender()->Send(message);
+
+ EXPECT_TRUE(WaitForClientShutdown());
+ DestroyChannelProxy();
+}
+
} // namespace
« no previous file with comments | « base/test/test_io_thread.cc ('k') | ipc/ipc_test_base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698