| Index: remoting/test/protocol_perftest.cc
|
| diff --git a/remoting/test/protocol_perftest.cc b/remoting/test/protocol_perftest.cc
|
| index f7d0907ac90e2bc66342b5821c598a7d60453b6c..12081453569164a05e03a4979ebb7f3def01e9c3 100644
|
| --- a/remoting/test/protocol_perftest.cc
|
| +++ b/remoting/test/protocol_perftest.cc
|
| @@ -60,22 +60,28 @@ const char kHostId[] = "ABC123";
|
| const char kHostPin[] = "123456";
|
|
|
| struct NetworkPerformanceParams {
|
| - NetworkPerformanceParams(int bandwidth,
|
| - int max_buffers,
|
| + // |buffer_s| defines buffer size in seconds. actual buffer size is calculated
|
| + // based on bandwidth_kbps
|
| + NetworkPerformanceParams(int bandwidth_kbps,
|
| + double buffer_s,
|
| double latency_average_ms,
|
| double latency_stddev_ms,
|
| - double out_of_order_rate)
|
| - : bandwidth(bandwidth),
|
| - max_buffers(max_buffers),
|
| + double out_of_order_rate,
|
| + double signaling_latency_ms)
|
| + : bandwidth_kbps(bandwidth_kbps),
|
| + max_buffers(buffer_s * bandwidth_kbps * 1000 / 8),
|
| latency_average(base::TimeDelta::FromMillisecondsD(latency_average_ms)),
|
| latency_stddev(base::TimeDelta::FromMillisecondsD(latency_stddev_ms)),
|
| - out_of_order_rate(out_of_order_rate) {}
|
| + out_of_order_rate(out_of_order_rate),
|
| + signaling_latency(
|
| + base::TimeDelta::FromMillisecondsD(signaling_latency_ms)) {}
|
|
|
| - int bandwidth;
|
| + int bandwidth_kbps;
|
| int max_buffers;
|
| base::TimeDelta latency_average;
|
| base::TimeDelta latency_stddev;
|
| double out_of_order_rate;
|
| + base::TimeDelta signaling_latency;
|
| };
|
|
|
| class FakeCursorShapeStub : public protocol::CursorShapeStub {
|
| @@ -256,6 +262,7 @@ class ProtocolPerfTest
|
| jingle_glue::JingleThreadWrapper::EnsureForCurrentMessageLoop();
|
|
|
| host_signaling_.reset(new FakeSignalStrategy(kHostJid));
|
| + host_signaling_->set_send_delay(GetParam().signaling_latency);
|
| host_signaling_->ConnectTo(client_signaling_.get());
|
|
|
| protocol::NetworkSettings network_settings(
|
| @@ -264,7 +271,7 @@ class ProtocolPerfTest
|
| std::unique_ptr<FakePortAllocatorFactory> port_allocator_factory(
|
| new FakePortAllocatorFactory(fake_network_dispatcher_));
|
| port_allocator_factory->socket_factory()->SetBandwidth(
|
| - GetParam().bandwidth, GetParam().max_buffers);
|
| + GetParam().bandwidth_kbps * 1000 / 8, GetParam().max_buffers);
|
| port_allocator_factory->socket_factory()->SetLatency(
|
| GetParam().latency_average, GetParam().latency_stddev);
|
| port_allocator_factory->socket_factory()->set_out_of_order_rate(
|
| @@ -314,6 +321,7 @@ class ProtocolPerfTest
|
| }
|
|
|
| void StartClientAfterHost() {
|
| + client_signaling_->set_send_delay(GetParam().signaling_latency);
|
| client_signaling_->ConnectTo(host_signaling_.get());
|
|
|
| protocol::NetworkSettings network_settings(
|
| @@ -328,7 +336,7 @@ class ProtocolPerfTest
|
| new FakePortAllocatorFactory(fake_network_dispatcher_));
|
| client_socket_factory_ = port_allocator_factory->socket_factory();
|
| port_allocator_factory->socket_factory()->SetBandwidth(
|
| - GetParam().bandwidth, GetParam().max_buffers);
|
| + GetParam().bandwidth_kbps * 1000 / 8, GetParam().max_buffers);
|
| port_allocator_factory->socket_factory()->SetLatency(
|
| GetParam().latency_average, GetParam().latency_stddev);
|
| port_allocator_factory->socket_factory()->set_out_of_order_rate(
|
| @@ -410,38 +418,45 @@ class ProtocolPerfTest
|
| INSTANTIATE_TEST_CASE_P(
|
| NoDelay,
|
| ProtocolPerfTest,
|
| - ::testing::Values(NetworkPerformanceParams(0, 0, 0, 0, 0.0)));
|
| + ::testing::Values(NetworkPerformanceParams(0, 0, 0, 0, 0.0, 0)));
|
|
|
| INSTANTIATE_TEST_CASE_P(
|
| HighLatency,
|
| ProtocolPerfTest,
|
| - ::testing::Values(NetworkPerformanceParams(0, 0, 300, 30, 0.0),
|
| - NetworkPerformanceParams(0, 0, 30, 10, 0.0)));
|
| + ::testing::Values(NetworkPerformanceParams(0, 0, 300, 30, 0.0, 0),
|
| + NetworkPerformanceParams(0, 0, 30, 10, 0.0, 0)));
|
|
|
| INSTANTIATE_TEST_CASE_P(
|
| OutOfOrder,
|
| ProtocolPerfTest,
|
| - ::testing::Values(NetworkPerformanceParams(0, 0, 2, 0, 0.01),
|
| - NetworkPerformanceParams(0, 0, 30, 1, 0.01),
|
| - NetworkPerformanceParams(0, 0, 30, 1, 0.1),
|
| - NetworkPerformanceParams(0, 0, 300, 20, 0.01),
|
| - NetworkPerformanceParams(0, 0, 300, 20, 0.1)));
|
| + ::testing::Values(NetworkPerformanceParams(0, 0, 2, 0, 0.01, 0),
|
| + NetworkPerformanceParams(0, 0, 30, 1, 0.01, 0),
|
| + NetworkPerformanceParams(0, 0, 30, 1, 0.1, 0),
|
| + NetworkPerformanceParams(0, 0, 300, 20, 0.01, 0),
|
| + NetworkPerformanceParams(0, 0, 300, 20, 0.1, 0)));
|
|
|
| INSTANTIATE_TEST_CASE_P(
|
| LimitedBandwidth,
|
| ProtocolPerfTest,
|
| ::testing::Values(
|
| // 100 Mbps
|
| - NetworkPerformanceParams(12500000, 12500000, 2, 1, 0.0),
|
| + NetworkPerformanceParams(100000, 0.25, 2, 1, 0.0, 0),
|
| + NetworkPerformanceParams(100000, 1.0, 2, 1, 0.0, 0),
|
| // 8 Mbps
|
| - NetworkPerformanceParams(1000000, 300000, 30, 5, 0.01),
|
| - NetworkPerformanceParams(1000000, 2000000, 30, 5, 0.01),
|
| + NetworkPerformanceParams(8000, 0.25, 30, 5, 0.01, 0),
|
| + NetworkPerformanceParams(8000, 1.0, 30, 5, 0.01, 0),
|
| // 2 Mbps
|
| - NetworkPerformanceParams(250000, 300000, 30, 5, 0.01),
|
| - NetworkPerformanceParams(250000, 2000000, 30, 5, 0.01),
|
| - // 800 kBps
|
| - NetworkPerformanceParams(100000, 30000, 130, 5, 0.00),
|
| - NetworkPerformanceParams(100000, 200000, 130, 5, 0.00)));
|
| + NetworkPerformanceParams(2000, 0.25, 30, 5, 0.01, 0),
|
| + NetworkPerformanceParams(2000, 1.0, 30, 5, 0.01, 0),
|
| + // 800 kbps
|
| + NetworkPerformanceParams(800, 0.25, 130, 5, 0.00, 0),
|
| + NetworkPerformanceParams(800, 1.0, 130, 5, 0.00, 0)));
|
| +
|
| +INSTANTIATE_TEST_CASE_P(
|
| + SlowSignaling,
|
| + ProtocolPerfTest,
|
| + ::testing::Values(NetworkPerformanceParams(8000, 0.25, 30, 0, 0.0, 50),
|
| + NetworkPerformanceParams(8000, 0.25, 30, 0, 0.0, 500)));
|
|
|
| // TotalLatency[Ice|Webrtc] tests measure video latency in the case when the
|
| // whole screen is updated occasionally. It's intended to simulate the case when
|
| @@ -512,6 +527,8 @@ void ProtocolPerfTest::MeasureTotalLatency(bool use_webrtc) {
|
| }
|
| }
|
|
|
| + WaitFrameStats(total_frames);
|
| +
|
| CHECK(big_update_count);
|
| VLOG(0) << "Average latency for big updates: "
|
| << (total_latency_big_updates / big_update_count).InMillisecondsF();
|
| @@ -521,6 +538,16 @@ void ProtocolPerfTest::MeasureTotalLatency(bool use_webrtc) {
|
| << "Average latency for small updates: "
|
| << (total_latency_small_updates / small_update_count).InMillisecondsF();
|
| }
|
| +
|
| + double average_bwe =
|
| + std::accumulate(frame_stats_.begin() + warm_up_frames,
|
| + frame_stats_.begin() + total_frames, 0.0,
|
| + [](double sum, const protocol::FrameStats& stats) {
|
| + return sum + stats.host_stats.bandwidth_estimate_kbps;
|
| + }) /
|
| + (total_frames - warm_up_frames);
|
| + VLOG(0) << "Average BW estimate: " << average_bwe
|
| + << " (actual: " << GetParam().bandwidth_kbps << ")";
|
| }
|
|
|
| TEST_P(ProtocolPerfTest, TotalLatencyIce) {
|
| @@ -580,12 +607,21 @@ void ProtocolPerfTest::MeasureScrollPerformance(bool use_webrtc) {
|
| stats.host_stats.latest_event_timestamp);
|
| });
|
|
|
| + double average_bwe =
|
| + std::accumulate(frame_stats_.begin() + warm_up_frames,
|
| + frame_stats_.begin() + warm_up_frames + num_frames, 0.0,
|
| + [](double sum, const protocol::FrameStats& stats) {
|
| + return sum + stats.host_stats.bandwidth_estimate_kbps;
|
| + }) /
|
| + num_frames;
|
| +
|
| VLOG(0) << "FPS: " << num_frames / total_time.InSecondsF();
|
| VLOG(0) << "Average latency: " << latency_sum.InMillisecondsF() / num_frames
|
| << " ms";
|
| VLOG(0) << "Total size: " << total_size << " bytes";
|
| VLOG(0) << "Bandwidth utilization: "
|
| - << 100 * total_size / (total_time.InSecondsF() * GetParam().bandwidth)
|
| + << 100 * total_size / (total_time.InSecondsF() *
|
| + GetParam().bandwidth_kbps * 1000 / 8)
|
| << "%";
|
| VLOG(0) << "Network buffer delay (bufferbloat), average: "
|
| << client_socket_factory_->average_buffer_delay().InMilliseconds()
|
| @@ -593,6 +629,8 @@ void ProtocolPerfTest::MeasureScrollPerformance(bool use_webrtc) {
|
| << client_socket_factory_->max_buffer_delay().InMilliseconds()
|
| << " ms";
|
| VLOG(0) << "Packet drop rate: " << client_socket_factory_->drop_rate();
|
| + VLOG(0) << "Average BW estimate: " << average_bwe
|
| + << " (actual: " << GetParam().bandwidth_kbps << ")";
|
| }
|
|
|
| TEST_P(ProtocolPerfTest, ScrollPerformanceIce) {
|
|
|