Index: remoting/test/scroll_frame_generator.cc |
diff --git a/remoting/test/scroll_frame_generator.cc b/remoting/test/scroll_frame_generator.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1a6a1ec0b6834d89306d5a3dffc81980f8141410 |
--- /dev/null |
+++ b/remoting/test/scroll_frame_generator.cc |
@@ -0,0 +1,60 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "remoting/test/scroll_frame_generator.h" |
+ |
+#include "remoting/test/frame_generator_util.h" |
+#include "third_party/webrtc/modules/desktop_capture/desktop_geometry.h" |
+ |
+namespace remoting { |
+namespace test { |
+ |
+namespace { |
+int kScrollSpeedPixelsPerSecond = 500; |
+} // namespace |
+ |
+ScrollFrameGenerator::ScrollFrameGenerator() |
+ : base_frame_(LoadDesktopFrameFromPng("test_frame2.png")), |
+ start_time_(base::TimeTicks::Now()) {} |
+ScrollFrameGenerator::~ScrollFrameGenerator() {} |
+ |
+std::unique_ptr<webrtc::DesktopFrame> ScrollFrameGenerator::GenerateFrame( |
+ webrtc::SharedMemoryFactory* shared_memory_factory) { |
+ base::TimeTicks now = base::TimeTicks::Now(); |
+ int position = static_cast<int>(kScrollSpeedPixelsPerSecond * |
+ (now - start_time_).InSecondsF()) % |
+ base_frame_->size().height(); |
+ std::unique_ptr<webrtc::DesktopFrame> result( |
+ new webrtc::BasicDesktopFrame(base_frame_->size())); |
+ |
+ int top_height = base_frame_->size().height() - position; |
+ |
+ result->CopyPixelsFrom(*base_frame_, webrtc::DesktopVector(0, position), |
+ webrtc::DesktopRect::MakeLTRB( |
+ 0, 0, base_frame_->size().width(), top_height)); |
+ result->CopyPixelsFrom( |
+ *base_frame_, webrtc::DesktopVector(0, 0), |
+ webrtc::DesktopRect::MakeLTRB(0, top_height, base_frame_->size().width(), |
+ base_frame_->size().height())); |
+ |
+ result->mutable_updated_region()->SetRect( |
+ webrtc::DesktopRect::MakeSize(result->size())); |
+ |
+ ++last_frame_id_; |
+ frame_timestamp_[last_frame_id_] = now; |
+ DrawBarcode(last_frame_id_, true, result.get()); |
+ |
+ return result; |
+} |
+ |
+base::TimeDelta ScrollFrameGenerator::GetFrameLatency( |
+ const webrtc::DesktopFrame& frame) { |
+ int frame_id = ReadBarcode(frame); |
+ if (!frame_timestamp_.count(frame_id)) |
+ LOG(FATAL) << "Unknown frame_id."; |
+ return base::TimeTicks::Now() - frame_timestamp_[frame_id]; |
+} |
+ |
+} // namespace test |
+} // namespace remoting |