Index: remoting/test/protocol_perftest.cc |
diff --git a/remoting/test/protocol_perftest.cc b/remoting/test/protocol_perftest.cc |
index f7d0907ac90e2bc66342b5821c598a7d60453b6c..f243cfb4be9904f70313c5886feab9aaeb633e36 100644 |
--- a/remoting/test/protocol_perftest.cc |
+++ b/remoting/test/protocol_perftest.cc |
@@ -163,10 +163,6 @@ |
// FrameStatsConsumer interface. |
void OnVideoFrameStats(const protocol::FrameStats& frame_stats) override { |
- // Ignore store stats for empty frames. |
- if (!frame_stats.host_stats.frame_size) |
- return; |
- |
frame_stats_.push_back(frame_stats); |
if (waiting_frame_stats_loop_ && |
@@ -176,14 +172,6 @@ |
} |
// HostStatusObserver interface. |
- void OnClientAuthenticated(const std::string& jid) override { |
- if (event_timestamp_source_) { |
- auto& session = host_->client_sessions_for_tests().front(); |
- session->SetEventTimestampsSourceForTests( |
- std::move(event_timestamp_source_)); |
- } |
- } |
- |
void OnClientConnected(const std::string& jid) override { |
message_loop_.task_runner()->PostTask( |
FROM_HERE, base::Bind(&ProtocolPerfTest::OnHostConnectedMainThread, |
@@ -372,8 +360,6 @@ |
base::Thread decode_thread_; |
std::unique_ptr<FakeDesktopEnvironmentFactory> desktop_environment_factory_; |
- scoped_refptr<protocol::InputEventTimestampsSource> event_timestamp_source_; |
- |
FakeCursorShapeStub cursor_shape_stub_; |
std::unique_ptr<protocol::CandidateSessionConfig> protocol_config_; |
@@ -450,76 +436,58 @@ |
void ProtocolPerfTest::MeasureTotalLatency(bool use_webrtc) { |
scoped_refptr<test::CyclicFrameGenerator> frame_generator = |
test::CyclicFrameGenerator::Create(); |
+ frame_generator->set_draw_barcode(true); |
+ |
desktop_environment_factory_->set_frame_generator( |
base::Bind(&test::CyclicFrameGenerator::GenerateFrame, frame_generator)); |
- event_timestamp_source_ = frame_generator; |
StartHostAndClient(use_webrtc); |
ASSERT_NO_FATAL_FAILURE(WaitConnected()); |
- int total_frames = 0; |
- |
- const base::TimeDelta kWarmUpTime = base::TimeDelta::FromSeconds(2); |
- const base::TimeDelta kTestTime = base::TimeDelta::FromSeconds(5); |
- |
- base::TimeTicks start_time = base::TimeTicks::Now(); |
- while ((base::TimeTicks::Now() - start_time) < (kWarmUpTime + kTestTime)) { |
- ReceiveFrame(); |
- ++total_frames; |
- } |
- |
- WaitFrameStats(total_frames); |
- |
- int warm_up_frames = 0; |
- |
- int big_update_count = 0; |
- base::TimeDelta total_latency_big_updates; |
- int small_update_count = 0; |
- base::TimeDelta total_latency_small_updates; |
- for (int i = 0; i < total_frames; ++i) { |
- const protocol::FrameStats& stats = frame_stats_[i]; |
- |
- // CyclicFrameGenerator::TakeLastEventTimestamps() always returns non-null |
- // timestamps. |
- CHECK(!stats.host_stats.latest_event_timestamp.is_null()); |
- |
+ int skipped_frames = 0; |
+ while (skipped_frames < 10) { |
+ std::unique_ptr<webrtc::DesktopFrame> frame = ReceiveFrame(); |
test::CyclicFrameGenerator::ChangeInfoList changes = |
- frame_generator->GetChangeList(stats.host_stats.latest_event_timestamp); |
- |
- // Allow 2 seconds for the connection to warm-up, e.g. to get bandwidth |
- // estimate, etc. These frames are ignored when calculating stats below. |
- if (stats.client_stats.time_rendered < (start_time + kWarmUpTime)) { |
- ++warm_up_frames; |
- continue; |
- } |
- |
+ frame_generator->GetChangeList(frame.get()); |
+ skipped_frames += changes.size(); |
+ } |
+ |
+ base::TimeDelta total_latency_big_frames; |
+ int big_frame_count = 0; |
+ base::TimeDelta total_latency_small_frames; |
+ int small_frame_count = 0; |
+ |
+ while (big_frame_count + small_frame_count < 30) { |
+ std::unique_ptr<webrtc::DesktopFrame> frame = ReceiveFrame(); |
+ base::TimeTicks frame_received_time = base::TimeTicks::Now(); |
+ test::CyclicFrameGenerator::ChangeInfoList changes = |
+ frame_generator->GetChangeList(frame.get()); |
for (auto& change_info : changes) { |
- base::TimeDelta latency = |
- stats.client_stats.time_rendered - change_info.timestamp; |
+ base::TimeDelta latency = frame_received_time - change_info.timestamp; |
switch (change_info.type) { |
case test::CyclicFrameGenerator::ChangeType::NO_CHANGES: |
NOTREACHED(); |
break; |
case test::CyclicFrameGenerator::ChangeType::FULL: |
- total_latency_big_updates += latency; |
- ++big_update_count; |
+ total_latency_big_frames += latency; |
+ ++big_frame_count; |
break; |
case test::CyclicFrameGenerator::ChangeType::CURSOR: |
- total_latency_small_updates += latency; |
- ++small_update_count; |
+ total_latency_small_frames += latency; |
+ ++small_frame_count; |
break; |
} |
} |
} |
- CHECK(big_update_count); |
- VLOG(0) << "Average latency for big updates: " |
- << (total_latency_big_updates / big_update_count).InMillisecondsF(); |
- |
- if (small_update_count) { |
+ CHECK(big_frame_count); |
+ VLOG(0) << "Average latency for big frames: " |
+ << (total_latency_big_frames / big_frame_count).InMillisecondsF(); |
+ |
+ if (small_frame_count) { |
VLOG(0) |
- << "Average latency for small updates: " |
- << (total_latency_small_updates / small_update_count).InMillisecondsF(); |
+ << "Average latency for small frames: " |
+ << (total_latency_small_frames / small_frame_count).InMillisecondsF(); |
} |
} |
@@ -536,29 +504,34 @@ |
void ProtocolPerfTest::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)); |
- event_timestamp_source_ = frame_generator; |
StartHostAndClient(use_webrtc); |
ASSERT_NO_FATAL_FAILURE(WaitConnected()); |
+ int warm_up_frames = 0; |
+ |
+ base::TimeTicks start_time = base::TimeTicks::Now(); |
const base::TimeDelta kWarmUpTime = base::TimeDelta::FromSeconds(2); |
+ while ((base::TimeTicks::Now() - start_time) < kWarmUpTime) { |
+ ReceiveFrame(); |
+ ++warm_up_frames; |
+ } |
+ |
+ client_socket_factory_->ResetStats(); |
+ |
+ // Run the test for 2 seconds. |
const base::TimeDelta kTestTime = base::TimeDelta::FromSeconds(2); |
int num_frames = 0; |
- int warm_up_frames = 0; |
- base::TimeTicks start_time = base::TimeTicks::Now(); |
- while ((base::TimeTicks::Now() - start_time) < (kTestTime + kWarmUpTime)) { |
- ReceiveFrame(); |
+ base::TimeDelta latency_sum; |
+ start_time = base::TimeTicks::Now(); |
+ while ((base::TimeTicks::Now() - start_time) < kTestTime) { |
+ std::unique_ptr<webrtc::DesktopFrame> frame = ReceiveFrame(); |
++num_frames; |
- |
- // Allow 2 seconds for the connection to warm-up, e.g. to get bandwidth |
- // estimate, etc. These frames are ignored when calculating stats below. |
- if ((base::TimeTicks::Now() - start_time) < kWarmUpTime) { |
- ++warm_up_frames; |
- client_socket_factory_->ResetStats(); |
- } |
+ latency_sum += frame_generator->GetFrameLatency(*frame); |
} |
base::TimeDelta total_time = (base::TimeTicks::Now() - start_time); |
@@ -571,14 +544,6 @@ |
[](int sum, const protocol::FrameStats& stats) { |
return sum + stats.host_stats.frame_size; |
}); |
- |
- base::TimeDelta latency_sum = std::accumulate( |
- frame_stats_.begin() + warm_up_frames, |
- frame_stats_.begin() + warm_up_frames + num_frames, base::TimeDelta(), |
- [](base::TimeDelta sum, const protocol::FrameStats& stats) { |
- return sum + (stats.client_stats.time_rendered - |
- stats.host_stats.latest_event_timestamp); |
- }); |
VLOG(0) << "FPS: " << num_frames / total_time.InSecondsF(); |
VLOG(0) << "Average latency: " << latency_sum.InMillisecondsF() / num_frames |