Index: remoting/test/protocol_perftest.cc |
diff --git a/remoting/test/protocol_perftest.cc b/remoting/test/protocol_perftest.cc |
index ce9eea4f758178579c54d91779e84d8fd939eeeb..97bae35ddcf1070c9b88a78f854aba82c9413b1b 100644 |
--- a/remoting/test/protocol_perftest.cc |
+++ b/remoting/test/protocol_perftest.cc |
@@ -43,6 +43,7 @@ |
#include "remoting/test/fake_network_dispatcher.h" |
#include "remoting/test/fake_port_allocator.h" |
#include "remoting/test/fake_socket_factory.h" |
+#include "remoting/test/scroll_frame_generator.h" |
#include "testing/gtest/include/gtest/gtest.h" |
namespace remoting { |
@@ -415,7 +416,7 @@ class ProtocolPerfTest |
secret_fetched_callback.Run(kHostPin); |
} |
- void MeasureTotalLatency(bool webrtc) { |
+ void MeasureTotalLatency(bool use_webrtc) { |
scoped_refptr<test::CyclicFrameGenerator> frame_generator = |
test::CyclicFrameGenerator::Create(); |
frame_generator->set_draw_barcode(true); |
@@ -423,7 +424,7 @@ class ProtocolPerfTest |
desktop_environment_factory_.set_frame_generator(base::Bind( |
&test::CyclicFrameGenerator::GenerateFrame, frame_generator)); |
- StartHostAndClient(webrtc, protocol::ChannelConfig::CODEC_VP8); |
+ StartHostAndClient(use_webrtc, protocol::ChannelConfig::CODEC_VP8); |
ASSERT_NO_FATAL_FAILURE(WaitConnected()); |
int skipped_frames = 0; |
@@ -473,6 +474,41 @@ class ProtocolPerfTest |
} |
} |
+ void MeasureScrollPerformance(bool use_webrtc) { |
+ scoped_refptr<test::ScrollFrameGenerator> frame_generator = |
+ new test::ScrollFrameGenerator(); |
+ |
+ desktop_environment_factory_.set_frame_generator(base::Bind( |
+ &test::ScrollFrameGenerator::GenerateFrame, frame_generator)); |
+ |
+ StartHostAndClient(use_webrtc, protocol::ChannelConfig::CODEC_VP8); |
+ ASSERT_NO_FATAL_FAILURE(WaitConnected()); |
+ |
+ base::TimeTicks start_time = base::TimeTicks::Now(); |
+ const base::TimeDelta kWarmUpTime = base::TimeDelta::FromSeconds(2); |
+ while ((base::TimeTicks::Now() - start_time) < kWarmUpTime) { |
+ ReceiveFrame(); |
+ } |
+ |
+ // Run the test for 2 seconds. |
+ const base::TimeDelta kTestTime = base::TimeDelta::FromSeconds(2); |
+ |
+ int num_frames = 0; |
+ base::TimeDelta total_latency; |
+ start_time = base::TimeTicks::Now(); |
+ while ((base::TimeTicks::Now() - start_time) < kTestTime) { |
+ std::unique_ptr<webrtc::DesktopFrame> frame = ReceiveFrame(); |
+ ++num_frames; |
+ total_latency += frame_generator->GetFrameLatency(*frame); |
+ } |
+ |
+ VLOG(0) << "FPS: " |
+ << num_frames / (base::TimeTicks::Now() - start_time).InSecondsF(); |
+ |
+ VLOG(0) << "Average latency: " |
+ << (total_latency).InMillisecondsF() / num_frames; |
+ } |
+ |
base::MessageLoopForIO message_loop_; |
scoped_refptr<FakeNetworkDispatcher> fake_network_dispatcher_; |
@@ -645,4 +681,12 @@ TEST_P(ProtocolPerfTest, TotalLatencyWebrtc) { |
MeasureTotalLatency(true); |
} |
+TEST_P(ProtocolPerfTest, ScrollPerformanceIce) { |
+ MeasureScrollPerformance(false); |
+} |
+ |
+TEST_P(ProtocolPerfTest, ScrollPerformanceWebrtc) { |
+ MeasureScrollPerformance(true); |
+} |
+ |
} // namespace remoting |