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

Side by Side Diff: services/ui/ws/frame_generator_unittest.cc

Issue 2755573002: Add FrameGenerator Unit Tests (Closed)
Patch Set: Clean up Created 3 years, 9 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 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 "services/ui/ws/frame_generator.h"
6
7 #include "base/macros.h"
8 #include "cc/output/compositor_frame_sink.h"
9 #include "cc/scheduler/begin_frame_source.h"
10 #include "cc/test/begin_frame_args_test.cc"
11 #include "cc/test/fake_external_begin_frame_source.h"
12 #include "services/ui/ws/frame_generator_delegate.h"
13 #include "services/ui/ws/server_window.h"
14 #include "services/ui/ws/server_window_delegate.h"
15 #include "testing/gtest/include/gtest/gtest.h"
16
17 namespace ui {
18 namespace ws {
19 namespace test {
20
21 class TestFrameGeneratorDelegate : public FrameGeneratorDelegate {
22 public:
23 TestFrameGeneratorDelegate() {}
24 ~TestFrameGeneratorDelegate() override {}
25
26 // FrameGeneratorDelegate implementation:
27 bool IsInHighContrastMode() override { return false; }
28 };
29
30 class TestServerWindowDelegate : public ServerWindowDelegate {
31 public:
32 TestServerWindowDelegate() {}
33 ~TestServerWindowDelegate() override {}
34
35 // ServerWindowDelegate implementation:
36 cc::mojom::DisplayCompositor* GetDisplayCompositor() override {
37 return nullptr;
38 }
39
40 ServerWindow* GetRootWindow(const ServerWindow* window) override {
41 return nullptr;
42 }
43 };
44
45 // FakeCompositorFrameSink observes a FakeExternalBeginFrameSource and receives
46 // CompositorFrame from a FrameGenerator.
47 class FakeCompositorFrameSink : public cc::CompositorFrameSink,
48 public cc::BeginFrameObserver,
49 public cc::ExternalBeginFrameSourceClient {
50 public:
51 FakeCompositorFrameSink()
52 : cc::CompositorFrameSink(nullptr, nullptr, nullptr, nullptr) {}
53
54 // cc::CompositorFrameSink implementation:
55 bool BindToClient(cc::CompositorFrameSinkClient* client) override {
56 if (!cc::CompositorFrameSink::BindToClient(client))
57 return false;
58
59 begin_frame_source_ = base::MakeUnique<cc::ExternalBeginFrameSource>(this);
60 client_->SetBeginFrameSource(begin_frame_source_.get());
61 return true;
62 }
63
64 void DetachFromClient() override {
65 cc::CompositorFrameSink::DetachFromClient();
66 }
67
68 void SubmitCompositorFrame(cc::CompositorFrame frame) override {
69 ++number_frames_received_;
70 }
71
72 // cc::BeginFrameObserver implementation.
73 void OnBeginFrame(const cc::BeginFrameArgs& args) override {
74 begin_frame_source_->OnBeginFrame(args);
75 last_begin_frame_args_ = args;
76 }
77
78 const cc::BeginFrameArgs& LastUsedBeginFrameArgs() const override {
79 return last_begin_frame_args_;
80 }
81
82 void OnBeginFrameSourcePausedChanged(bool paused) override {}
83
84 // cc::ExternalBeginFrameSourceClient implementation:
85 void OnNeedsBeginFrames(bool needs_begin_frames) override {}
86
87 void OnDidFinishFrame(const cc::BeginFrameAck& ack) override {}
88
89 int number_frames_received() { return number_frames_received_; }
90
91 private:
92 int number_frames_received_ = 0;
93 std::unique_ptr<cc::ExternalBeginFrameSource> begin_frame_source_;
94 cc::BeginFrameArgs last_begin_frame_args_;
95 };
96
97 class FrameGeneratorTest : public testing::Test {
98 public:
99 FrameGeneratorTest() {}
100 ~FrameGeneratorTest() override {}
101
102 // testing::Test overrides:
103 void SetUp() override {
104 testing::Test::SetUp();
105
106 std::unique_ptr<FakeCompositorFrameSink> compositor_frame_sink =
107 base::MakeUnique<FakeCompositorFrameSink>();
108 compositor_frame_sink_ = compositor_frame_sink.get();
109
110 constexpr float kRefreshRate = 0.f;
111 constexpr bool kTickAutomatically = false;
112 begin_frame_source_ = base::MakeUnique<cc::FakeExternalBeginFrameSource>(
113 kRefreshRate, kTickAutomatically);
114 begin_frame_source_->AddObserver(compositor_frame_sink_);
115 delegate_ = base::MakeUnique<TestFrameGeneratorDelegate>();
116 server_window_delegate_ = base::MakeUnique<TestServerWindowDelegate>();
117 root_window_ = base::MakeUnique<ServerWindow>(server_window_delegate_.get(),
118 WindowId());
119 root_window_->SetVisible(true);
120 frame_generator_ = base::MakeUnique<FrameGenerator>(
121 delegate_.get(), root_window_.get(), std::move(compositor_frame_sink));
122 };
123
124 void TearDown() override { testing::Test::TearDown(); }
125
126 int NumberOfFramesRecieved() {
127 return compositor_frame_sink_->number_frames_received();
128 }
129
130 void IssueBeginFrame(const cc::BeginFrameArgs& args) {
131 begin_frame_source_->TestOnBeginFrame(args);
132 }
133
134 private:
135 FakeCompositorFrameSink* compositor_frame_sink_ = nullptr;
136 std::unique_ptr<cc::FakeExternalBeginFrameSource> begin_frame_source_;
137 std::unique_ptr<TestFrameGeneratorDelegate> delegate_;
138 std::unique_ptr<TestServerWindowDelegate> server_window_delegate_;
139 std::unique_ptr<ServerWindow> root_window_;
140 std::unique_ptr<FrameGenerator> frame_generator_;
141
142 DISALLOW_COPY_AND_ASSIGN(FrameGeneratorTest);
143 };
144
145 TEST_F(FrameGeneratorTest, Creation) {
146 DCHECK_EQ(0, NumberOfFramesRecieved());
147
148 // FrameGenerator does not request BeginFrames upon creation.
149 cc::BeginFrameArgs args =
150 cc::CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 0, 1);
151 IssueBeginFrame(args);
152 EXPECT_EQ(0, NumberOfFramesRecieved());
Fady Samuel 2017/03/15 17:47:00 I'd like to see this do a bit more: EXPECT_EQ(0,
Alex Z. 2017/03/15 20:37:12 Done.
153 }
154
155 // TODO(staraz): Add OnSurfaceCreated test and SetDeviceScaleFactor test.
156
157 } // namespace test
158 } // namespace ws
159 } // namespace ui
OLDNEW
« services/ui/ws/frame_generator.cc ('K') | « services/ui/ws/frame_generator.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698