summaryrefslogtreecommitdiffstats
path: root/ipc/ipc_perftests.cc
diff options
context:
space:
mode:
authorviettrungluu@chromium.org <viettrungluu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-25 21:51:35 +0000
committerviettrungluu@chromium.org <viettrungluu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-25 21:51:35 +0000
commit3c78858906d3d0d7f5319d7c993240284b4503b5 (patch)
tree1abeaac1ec6d16e96c05ef5f534681979d1f4ef6 /ipc/ipc_perftests.cc
parentcdf594b2db94ff9c66d3f552a063706c16015c2b (diff)
downloadchromium_src-3c78858906d3d0d7f5319d7c993240284b4503b5.zip
chromium_src-3c78858906d3d0d7f5319d7c993240284b4503b5.tar.gz
chromium_src-3c78858906d3d0d7f5319d7c993240284b4503b5.tar.bz2
Refactor (many) IPC tests, notably most of the multiprocess tests.
This factors out common code and, more importantly/usefully, makes test-specific code more local, and thus easier to add new tests and maintain existing ones. In particular, this allows you to add a new test "client" (running in another process) without modifying ipc_test_base.*. Review URL: https://codereview.chromium.org/12051048 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@178901 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ipc/ipc_perftests.cc')
-rw-r--r--ipc/ipc_perftests.cc54
1 files changed, 22 insertions, 32 deletions
diff --git a/ipc/ipc_perftests.cc b/ipc/ipc_perftests.cc
index 901f07a..a24c47d 100644
--- a/ipc/ipc_perftests.cc
+++ b/ipc/ipc_perftests.cc
@@ -4,13 +4,6 @@
#include "build/build_config.h"
-#if defined(OS_WIN)
-#include <windows.h>
-#elif defined(OS_POSIX)
-#include <sys/types.h>
-#include <unistd.h>
-#endif
-
#include <algorithm>
#include <string>
@@ -26,7 +19,6 @@
#include "ipc/ipc_channel.h"
#include "ipc/ipc_channel_proxy.h"
#include "ipc/ipc_message_utils.h"
-#include "ipc/ipc_multiprocess_test.h"
#include "ipc/ipc_sender.h"
#include "ipc/ipc_test_base.h"
@@ -143,9 +135,9 @@ class ChannelReflectorListener : public IPC::Listener {
EventTimeTracker latency_tracker_;
};
-class ChannelPerfListener : public IPC::Listener {
+class PerformanceChannelListener : public IPC::Listener {
public:
- ChannelPerfListener()
+ PerformanceChannelListener()
: channel_(NULL),
msg_count_(0),
msg_size_(0),
@@ -154,7 +146,7 @@ class ChannelPerfListener : public IPC::Listener {
VLOG(1) << "Server listener up";
}
- ~ChannelPerfListener() {
+ ~PerformanceChannelListener() {
VLOG(1) << "Server listener down";
}
@@ -229,22 +221,21 @@ class ChannelPerfListener : public IPC::Listener {
};
TEST_F(IPCChannelPerfTest, Performance) {
- // Setup IPC channel.
- ChannelPerfListener perf_listener;
- IPC::Channel chan(kReflectorChannel, IPC::Channel::MODE_SERVER,
- &perf_listener);
- perf_listener.Init(&chan);
- ASSERT_TRUE(chan.Connect());
+ Init("PerformanceClient");
- base::ProcessHandle process_handle = SpawnChild(TEST_REFLECTOR, &chan);
- ASSERT_TRUE(process_handle);
+ // Set up IPC channel and start client.
+ PerformanceChannelListener listener;
+ CreateChannel(&listener);
+ listener.Init(channel());
+ ASSERT_TRUE(ConnectChannel());
+ ASSERT_TRUE(StartClient());
const size_t kMsgSizeBase = 12;
const int kMsgSizeMaxExp = 5;
int msg_count = 100000;
size_t msg_size = kMsgSizeBase;
for (int i = 1; i <= kMsgSizeMaxExp; i++) {
- perf_listener.SetTestParams(msg_count, msg_size);
+ listener.SetTestParams(msg_count, msg_size);
// This initial message will kick-start the ping-pong of messages.
IPC::Message* message =
@@ -252,7 +243,7 @@ TEST_F(IPCChannelPerfTest, Performance) {
message->WriteInt64(base::TimeTicks::Now().ToInternalValue());
message->WriteInt(-1);
message->WriteString("hello");
- chan.Send(message);
+ sender()->Send(message);
// Run message loop.
MessageLoop::current()->Run();
@@ -265,22 +256,21 @@ TEST_F(IPCChannelPerfTest, Performance) {
message->WriteInt64(base::TimeTicks::Now().ToInternalValue());
message->WriteInt(-1);
message->WriteString("quit");
- chan.Send(message);
+ sender()->Send(message);
- // Clean up child process.
- EXPECT_TRUE(base::WaitForSingleProcess(process_handle,
- base::TimeDelta::FromSeconds(5)));
- base::CloseProcessHandle(process_handle);
+ EXPECT_TRUE(WaitForClientShutdown());
+ DestroyChannel();
}
// This message loop bounces all messages back to the sender.
-MULTIPROCESS_IPC_TEST_MAIN(RunReflector) {
+MULTIPROCESS_IPC_TEST_CLIENT_MAIN(PerformanceClient) {
MessageLoopForIO main_message_loop;
- ChannelReflectorListener channel_reflector_listener;
- IPC::Channel chan(kReflectorChannel, IPC::Channel::MODE_CLIENT,
- &channel_reflector_listener);
- channel_reflector_listener.Init(&chan);
- CHECK(chan.Connect());
+ ChannelReflectorListener listener;
+ IPC::Channel channel(IPCTestBase::GetChannelName("PerformanceClient"),
+ IPC::Channel::MODE_CLIENT,
+ &listener);
+ listener.Init(&channel);
+ CHECK(channel.Connect());
MessageLoop::current()->Run();
return 0;