1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "remoting/test/scroll_frame_generator.h"
6 
7 #include "remoting/test/frame_generator_util.h"
8 #include "third_party/webrtc/modules/desktop_capture/desktop_geometry.h"
9 
10 namespace remoting {
11 namespace test {
12 
13 namespace {
14 int kScrollSpeedPixelsPerSecond = 500;
15 }  // namespace
16 
ScrollFrameGenerator()17 ScrollFrameGenerator::ScrollFrameGenerator()
18     : base_frame_(LoadDesktopFrameFromPng("test_frame2.png")),
19       start_time_(base::TimeTicks::Now()) {}
20 ScrollFrameGenerator::~ScrollFrameGenerator() = default;
21 
GenerateFrame(webrtc::SharedMemoryFactory * shared_memory_factory)22 std::unique_ptr<webrtc::DesktopFrame> ScrollFrameGenerator::GenerateFrame(
23     webrtc::SharedMemoryFactory* shared_memory_factory) {
24   base::TimeTicks now = base::TimeTicks::Now();
25   int position = static_cast<int>(kScrollSpeedPixelsPerSecond *
26                                   (now - start_time_).InSecondsF()) %
27                  base_frame_->size().height();
28   std::unique_ptr<webrtc::DesktopFrame> result(
29       new webrtc::BasicDesktopFrame(base_frame_->size()));
30 
31   int top_height = base_frame_->size().height() - position;
32 
33   result->CopyPixelsFrom(*base_frame_, webrtc::DesktopVector(0, position),
34                          webrtc::DesktopRect::MakeLTRB(
35                              0, 0, base_frame_->size().width(), top_height));
36   result->CopyPixelsFrom(
37       *base_frame_, webrtc::DesktopVector(0, 0),
38       webrtc::DesktopRect::MakeLTRB(0, top_height, base_frame_->size().width(),
39                                   base_frame_->size().height()));
40 
41   result->mutable_updated_region()->SetRect(
42       webrtc::DesktopRect::MakeSize(result->size()));
43 
44   return result;
45 }
46 
TakeLastEventTimestamps()47 protocol::InputEventTimestamps ScrollFrameGenerator::TakeLastEventTimestamps() {
48   base::TimeTicks now = base::TimeTicks::Now();
49   return protocol::InputEventTimestamps{now, now};
50 }
51 
52 }  // namespace test
53 }  // namespace remoting
54