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

Unified Diff: remoting/test/protocol_perftest.cc

Issue 2464613002: Update remoting_perftest to evaluate bandwidth estimation. (Closed)
Patch Set: Created 4 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 | « remoting/test/fake_socket_factory.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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) {
« no previous file with comments | « remoting/test/fake_socket_factory.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698