Index: remoting/protocol/jingle_session_unittest.cc |
diff --git a/remoting/protocol/jingle_session_unittest.cc b/remoting/protocol/jingle_session_unittest.cc |
index 003fcfd21532ae900c253927c09094b22ee9bbab..0cbb4e8b54e022f1b05e1396d2e60b43f156cb98 100644 |
--- a/remoting/protocol/jingle_session_unittest.cc |
+++ b/remoting/protocol/jingle_session_unittest.cc |
@@ -323,14 +323,18 @@ class TCPChannelTester : public ChannelTesterBase { |
public: |
TCPChannelTester(MessageLoop* message_loop, |
Session* host_session, |
- Session* client_session) |
+ Session* client_session, |
+ int message_size, int message_count) |
: ChannelTesterBase(message_loop, host_session, client_session), |
ALLOW_THIS_IN_INITIALIZER_LIST( |
write_cb_(this, &TCPChannelTester::OnWritten)), |
ALLOW_THIS_IN_INITIALIZER_LIST( |
read_cb_(this, &TCPChannelTester::OnRead)), |
write_errors_(0), |
- read_errors_(0) { |
+ read_errors_(0), |
+ message_size_(message_size), |
+ message_count_(message_count), |
+ test_data_size_(message_size * message_count) { |
} |
virtual ~TCPChannelTester() { } |
@@ -339,24 +343,24 @@ class TCPChannelTester : public ChannelTesterBase { |
EXPECT_EQ(0, write_errors_); |
EXPECT_EQ(0, read_errors_); |
- ASSERT_EQ(kTestDataSize + kMessageSize, input_buffer_->capacity()); |
+ ASSERT_EQ(test_data_size_ + message_size_, input_buffer_->capacity()); |
output_buffer_->SetOffset(0); |
- ASSERT_EQ(kTestDataSize, output_buffer_->size()); |
+ ASSERT_EQ(test_data_size_, output_buffer_->size()); |
EXPECT_EQ(0, memcmp(output_buffer_->data(), |
- input_buffer_->StartOfBuffer(), kTestDataSize)); |
+ input_buffer_->StartOfBuffer(), test_data_size_)); |
} |
protected: |
virtual void InitBuffers() { |
output_buffer_ = new net::DrainableIOBuffer( |
- new net::IOBuffer(kTestDataSize), kTestDataSize); |
- memset(output_buffer_->data(), 123, kTestDataSize); |
+ new net::IOBuffer(test_data_size_), test_data_size_); |
+ memset(output_buffer_->data(), 123, test_data_size_); |
input_buffer_ = new net::GrowableIOBuffer(); |
- // Always keep kMessageSize bytes available at the end of the input buffer. |
- input_buffer_->SetCapacity(kMessageSize); |
+ // Always keep message_size_ bytes available at the end of the input buffer. |
+ input_buffer_->SetCapacity(message_size_); |
} |
virtual void DoWrite() { |
@@ -366,7 +370,7 @@ class TCPChannelTester : public ChannelTesterBase { |
break; |
int bytes_to_write = std::min(output_buffer_->BytesRemaining(), |
- kMessageSize); |
+ message_size_); |
result = socket_1_->Write(output_buffer_, bytes_to_write, &write_cb_); |
HandleWriteResult(result); |
}; |
@@ -390,9 +394,9 @@ class TCPChannelTester : public ChannelTesterBase { |
virtual void DoRead() { |
int result = 1; |
while (result > 0) { |
- input_buffer_->set_offset(input_buffer_->capacity() - kMessageSize); |
+ input_buffer_->set_offset(input_buffer_->capacity() - message_size_); |
- result = socket_2_->Read(input_buffer_, kMessageSize, &read_cb_); |
+ result = socket_2_->Read(input_buffer_, message_size_, &read_cb_); |
HandleReadResult(result); |
}; |
} |
@@ -413,12 +417,11 @@ class TCPChannelTester : public ChannelTesterBase { |
} else if (result > 0) { |
// Allocate memory for the next read. |
input_buffer_->SetCapacity(input_buffer_->capacity() + result); |
- if (input_buffer_->capacity() == kTestDataSize + kMessageSize) |
+ if (input_buffer_->capacity() == test_data_size_ + message_size_) |
done_event_.Signal(); |
} |
} |
- private: |
scoped_refptr<net::DrainableIOBuffer> output_buffer_; |
scoped_refptr<net::GrowableIOBuffer> input_buffer_; |
@@ -426,6 +429,39 @@ class TCPChannelTester : public ChannelTesterBase { |
net::CompletionCallbackImpl<TCPChannelTester> read_cb_; |
int write_errors_; |
int read_errors_; |
+ int message_size_; |
+ int message_count_; |
+ int test_data_size_; |
+}; |
+ |
+class ChannelLatencyTester : public TCPChannelTester { |
+ public: |
+ ChannelLatencyTester(MessageLoop* message_loop, |
+ Session* host_session, |
+ Session* client_session, |
+ int message_size) |
+ : TCPChannelTester(message_loop, host_session, |
+ client_session, message_size, 1) { |
+ CHECK(message_size >= 8); |
+ } |
+ |
+ virtual ~ChannelLatencyTester() { } |
+ |
+ virtual void CheckResults() { |
+ } |
+ |
+ base::TimeDelta GetLatency() { |
+ return base::Time::Now() - start_time_; |
Wez
2011/06/28 19:27:18
This isn't latency, it's elapsed time.
|
+ } |
+ |
+ protected: |
+ virtual void InitBuffers() { |
+ TCPChannelTester::InitBuffers(); |
+ |
+ start_time_ = base::Time::Now(); |
+ } |
+ |
+ base::Time start_time_; |
}; |
class UDPChannelTester : public ChannelTesterBase { |
@@ -606,7 +642,7 @@ TEST_F(JingleSessionTest, TestControlChannel) { |
ASSERT_TRUE(InitiateConnection()); |
scoped_refptr<TCPChannelTester> tester( |
new TCPChannelTester(thread_.message_loop(), host_session_, |
- client_session_)); |
+ client_session_, kMessageSize, kMessages)); |
tester->Start(ChannelTesterBase::CONTROL); |
ASSERT_TRUE(tester->WaitFinished()); |
tester->CheckResults(); |
@@ -621,7 +657,7 @@ TEST_F(JingleSessionTest, TestVideoChannel) { |
ASSERT_TRUE(InitiateConnection()); |
scoped_refptr<TCPChannelTester> tester( |
new TCPChannelTester(thread_.message_loop(), host_session_, |
- client_session_)); |
+ client_session_, kMessageSize, kMessageSize)); |
tester->Start(ChannelTesterBase::VIDEO); |
ASSERT_TRUE(tester->WaitFinished()); |
tester->CheckResults(); |
@@ -636,7 +672,7 @@ TEST_F(JingleSessionTest, TestEventChannel) { |
ASSERT_TRUE(InitiateConnection()); |
scoped_refptr<TCPChannelTester> tester( |
new TCPChannelTester(thread_.message_loop(), host_session_, |
- client_session_)); |
+ client_session_, kMessageSize, kMessageSize)); |
tester->Start(ChannelTesterBase::EVENT); |
ASSERT_TRUE(tester->WaitFinished()); |
tester->CheckResults(); |
@@ -660,6 +696,46 @@ TEST_F(JingleSessionTest, TestVideoRtpChannel) { |
CloseSessions(); |
} |
+// Send packets of different size to get the latency for sending data |
+// using sockets from JingleSession. |
+// Latency numbers are measured to catch regression. |
+TEST_F(JingleSessionTest, TestLatency) { |
Wez
2011/06/28 19:27:18
This isn't testing latency, it's testing elapsed t
|
+ CreateServerPair(); |
+ ASSERT_TRUE(InitiateConnection()); |
+ scoped_refptr<ChannelLatencyTester> tester; |
+ |
+ tester = new ChannelLatencyTester(thread_.message_loop(), host_session_, |
+ client_session_, 512); |
+ tester->Start(ChannelTesterBase::VIDEO); |
+ ASSERT_TRUE(tester->WaitFinished()); |
+ LOG(INFO) << "Latency for 512 bytes " |
+ << tester->GetLatency().InMilliseconds() << " ms."; |
+ |
+ tester = new ChannelLatencyTester(thread_.message_loop(), host_session_, |
+ client_session_, 1024); |
+ tester->Start(ChannelTesterBase::VIDEO); |
+ ASSERT_TRUE(tester->WaitFinished()); |
+ LOG(INFO) << "Latency for 1024 bytes " |
+ << tester->GetLatency().InMilliseconds() << " ms."; |
+ |
+ tester = new ChannelLatencyTester(thread_.message_loop(), host_session_, |
+ client_session_, 51200); |
+ tester->Start(ChannelTesterBase::VIDEO); |
+ ASSERT_TRUE(tester->WaitFinished()); |
+ LOG(INFO) << "Latency for 50k bytes " |
+ << tester->GetLatency().InMilliseconds() << " ms."; |
+ |
+ tester = new ChannelLatencyTester(thread_.message_loop(), host_session_, |
+ client_session_, 512000); |
+ tester->Start(ChannelTesterBase::VIDEO); |
+ ASSERT_TRUE(tester->WaitFinished()); |
+ LOG(INFO) << "Latency for 500k bytes " |
+ << tester->GetLatency().InMilliseconds() << " ms."; |
+ |
+ // Connections must be closed while |tester| still exists. |
+ CloseSessions(); |
+} |
+ |
#endif |
} // namespace protocol |