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

Unified Diff: ppapi/tests/test_udp_socket_private.cc

Issue 11274013: Added queued SendTo/RecvFrom calls. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ppapi/tests/test_udp_socket_private.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ppapi/tests/test_udp_socket_private.cc
diff --git a/ppapi/tests/test_udp_socket_private.cc b/ppapi/tests/test_udp_socket_private.cc
index 4680ff2a1390ff4cb091d6271262217cf6da383d..d5684ee15daf41ab4656cac44ce2a60e54cb46f4 100644
--- a/ppapi/tests/test_udp_socket_private.cc
+++ b/ppapi/tests/test_udp_socket_private.cc
@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include <cstdio>
#include <cstring>
#include <vector>
@@ -58,6 +59,8 @@ void TestUDPSocketPrivate::RunTests(const std::string& filter) {
RUN_TEST_FORCEASYNC_AND_NOT(ConnectFailure, filter);
RUN_TEST_FORCEASYNC_AND_NOT(Broadcast, filter);
RUN_TEST_FORCEASYNC_AND_NOT(SetSocketFeatureErrors, filter);
+ RUN_TEST_FORCEASYNC_AND_NOT(QueuedRequests, filter);
+ RUN_TEST_FORCEASYNC_AND_NOT(SequentialRequests, filter);
}
std::string TestUDPSocketPrivate::GetLocalAddress(
@@ -182,6 +185,135 @@ std::string TestUDPSocketPrivate::PassMessage(pp::UDPSocketPrivate* target,
PASS();
}
+std::string TestUDPSocketPrivate::BenchmarkQueuedRequests(size_t num_messages,
+ size_t message_size,
+ timeval* elapsed) {
+ pp::UDPSocketPrivate server_socket(instance_), client_socket(instance_);
+ PP_NetAddress_Private server_address, client_address;
+
+ ASSERT_SUBTEST_SUCCESS(LookupPortAndBindUDPSocket(&server_socket,
+ &server_address));
+ ASSERT_SUBTEST_SUCCESS(LookupPortAndBindUDPSocket(&client_socket,
+ &client_address));
+
+ std::vector<std::string> messages(num_messages);
+ for (size_t i = 0; i < num_messages; ++i)
+ messages[i].resize(message_size, 'a');
+
+ struct timeval tv_start;
+ gettimeofday(&tv_start, NULL);
+
+ std::vector<TestCompletionCallback*> sendto_callbacks(num_messages);
+ std::vector<int32_t> sendto_rv(num_messages);
+
+ std::vector<std::vector<char> > buffers(num_messages);
+ std::vector<TestCompletionCallback*> recvfrom_callbacks(num_messages);
+ std::vector<int32_t> recvfrom_rv(num_messages);
+
+ for (size_t i = 0; i < num_messages; ++i) {
+ sendto_callbacks[i] = new TestCompletionCallback(instance_->pp_instance(),
+ force_async_);
+ sendto_rv[i] = client_socket.SendTo(messages[i].c_str(), messages[i].size(),
+ &server_address, *sendto_callbacks[i]);
+ if (force_async_ && sendto_rv[i] != PP_OK_COMPLETIONPENDING) {
+ return ReportError("PPB_UDPSocket_Private::SendTo force_async",
+ sendto_rv[i]);
+ }
+
+ buffers[i].resize(messages[i].size());
+ recvfrom_callbacks[i] = new TestCompletionCallback(instance_->pp_instance(),
+ force_async_);
+ recvfrom_rv[i] = server_socket.RecvFrom(&buffers[i][0], messages[i].size(),
+ *recvfrom_callbacks[i]);
+ if (force_async_ && recvfrom_rv[i] != PP_OK_COMPLETIONPENDING) {
+ return ReportError("PPB_UDPSocket_Private::RecvFrom force_async",
+ recvfrom_rv[i]);
+ }
+ }
+
+ for (size_t i = 0; i < num_messages; ++i) {
+ if (recvfrom_rv[i] == PP_OK_COMPLETIONPENDING)
+ recvfrom_rv[i] = recvfrom_callbacks[i]->WaitForResult();
+ if (recvfrom_rv[i] < 0 ||
+ messages[i].size() != static_cast<size_t>(recvfrom_rv[i])) {
+ return ReportError("PPB_UDPSocket_Private::RecvFrom", recvfrom_rv[i]);
+ }
+
+ if (sendto_rv[i] == PP_OK_COMPLETIONPENDING)
+ sendto_rv[i] = sendto_callbacks[i]->WaitForResult();
+ if (sendto_rv[i] < 0 ||
+ messages[i].size() != static_cast<size_t>(sendto_rv[i])) {
+ return ReportError("PPB_UDPSocket_Private::SendTo", sendto_rv[i]);
+ }
+
+ ASSERT_EQ(messages[i], std::string(buffers[i].begin(), buffers[i].end()));
+ }
+
+ struct timeval tv_end;
+ gettimeofday(&tv_end, NULL);
+
+ long sec = tv_end.tv_sec - tv_start.tv_sec;
+ long usec = tv_end.tv_usec - tv_start.tv_usec;
+ if (usec < 0) {
+ --sec;
+ usec += 1000000;
+ }
+
+ elapsed->tv_sec = sec;
+ elapsed->tv_usec = usec;
+
+ for (size_t i = 0; i < num_messages; ++i) {
+ delete sendto_callbacks[i];
+ delete recvfrom_callbacks[i];
+ }
+
+ server_socket.Close();
+ client_socket.Close();
+ PASS();
+}
+
+std::string TestUDPSocketPrivate::BenchmarkSequentialRequests(
+ size_t num_messages,
+ size_t message_size,
+ timeval* elapsed) {
+ pp::UDPSocketPrivate server_socket(instance_), client_socket(instance_);
+ PP_NetAddress_Private server_address, client_address;
+
+ ASSERT_SUBTEST_SUCCESS(LookupPortAndBindUDPSocket(&server_socket,
+ &server_address));
+ ASSERT_SUBTEST_SUCCESS(LookupPortAndBindUDPSocket(&client_socket,
+ &client_address));
+ std::vector<std::string> messages(num_messages);
+ for (size_t i = 0; i < num_messages; ++i)
+ messages[i].resize(message_size, 'a');
+
+ struct timeval tv_start;
+ gettimeofday(&tv_start, NULL);
+
+ for (size_t i = 0; i < num_messages; ++i) {
+ ASSERT_SUBTEST_SUCCESS(PassMessage(&server_socket,
+ &client_socket,
+ &server_address,
+ messages[i]));
+ }
+
+ struct timeval tv_end;
+ gettimeofday(&tv_end, NULL);
+
+ long sec = tv_end.tv_sec - tv_start.tv_sec;
+ long usec = tv_end.tv_usec - tv_start.tv_usec;
+ if (usec < 0) {
+ --sec;
+ usec += 1000000;
+ }
+ elapsed->tv_sec = sec;
+ elapsed->tv_usec = usec;
+
+ server_socket.Close();
+ client_socket.Close();
+ PASS();
+}
+
std::string TestUDPSocketPrivate::TestConnect() {
pp::UDPSocketPrivate server_socket(instance_), client_socket(instance_);
PP_NetAddress_Private server_address, client_address;
@@ -274,3 +406,39 @@ std::string TestUDPSocketPrivate::TestSetSocketFeatureErrors() {
ASSERT_EQ(PP_ERROR_BADARGUMENT, rv);
PASS();
}
+
+std::string TestUDPSocketPrivate::TestSequentialRequests() {
+ fprintf(stderr, "TestSequentialRequests:\n");
+ const size_t kMessageSize = 1 << 12;
+ const size_t kMaxNumMessages = 1 << 14;
+ for (size_t num_messages = 256;
+ num_messages <= kMaxNumMessages; num_messages <<= 1) {
+ struct timeval elapsed;
+ ASSERT_SUBTEST_SUCCESS(BenchmarkSequentialRequests(num_messages,
+ kMessageSize,
+ &elapsed));
+ fprintf(stderr, "num messages: %zu, message size: %zu, force_async_: %d\n",
+ num_messages, kMessageSize, (int) force_async_);
+ fprintf(stderr, "time elapsed: %ld.%06ld\n",
+ (long) elapsed.tv_sec, (long) elapsed.tv_usec);
+ }
+ PASS();
+}
+
+std::string TestUDPSocketPrivate::TestQueuedRequests() {
+ fprintf(stderr, "TestQueuedRequests:\n");
+ const size_t kMessageSize = 1 << 12;
+ const size_t kMaxNumMessages = 1 << 14;
+ for (size_t num_messages = 256;
+ num_messages <= kMaxNumMessages; num_messages <<= 1) {
+ struct timeval elapsed;
+ ASSERT_SUBTEST_SUCCESS(BenchmarkQueuedRequests(num_messages,
+ kMessageSize,
+ &elapsed));
+ fprintf(stderr, "num messages: %zu, message size: %zu, force_async_: %d\n",
+ num_messages, kMessageSize, (int) force_async_);
+ fprintf(stderr, "time elapsed: %ld.%06ld\n",
+ (long) elapsed.tv_sec, (long) elapsed.tv_usec);
+ }
+ PASS();
+}
« no previous file with comments | « ppapi/tests/test_udp_socket_private.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698