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

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

Issue 2890913002: Add CompositorFrameSinkClientBinding To Be Used By FrameGenerator (Closed)
Patch Set: Address comments Created 3 years, 7 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
1 // Copyright 2017 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "services/ui/ws/frame_generator.h" 5 #include "services/ui/ws/frame_generator.h"
6 6
7 #include "base/debug/stack_trace.h"
7 #include "base/macros.h" 8 #include "base/macros.h"
8 #include "cc/output/compositor_frame_sink.h" 9 #include "cc/output/compositor_frame_sink.h"
9 #include "cc/scheduler/begin_frame_source.h" 10 #include "cc/scheduler/begin_frame_source.h"
10 #include "cc/test/begin_frame_args_test.h" 11 #include "cc/test/begin_frame_args_test.h"
11 #include "cc/test/fake_external_begin_frame_source.h" 12 #include "cc/test/fake_external_begin_frame_source.h"
12 #include "services/ui/ws/server_window.h" 13 #include "services/ui/ws/server_window.h"
13 #include "services/ui/ws/server_window_delegate.h" 14 #include "services/ui/ws/server_window_delegate.h"
14 #include "services/ui/ws/test_utils.h" 15 #include "services/ui/ws/test_utils.h"
15 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
16 17
(...skipping 14 matching lines...) Expand all
31 } 32 }
32 33
33 ServerWindow* GetRootWindow(const ServerWindow* window) override { 34 ServerWindow* GetRootWindow(const ServerWindow* window) override {
34 return nullptr; 35 return nullptr;
35 } 36 }
36 37
37 private: 38 private:
38 DISALLOW_COPY_AND_ASSIGN(TestServerWindowDelegate); 39 DISALLOW_COPY_AND_ASSIGN(TestServerWindowDelegate);
39 }; 40 };
40 41
41 // FakeCompositorFrameSink observes a FakeExternalBeginFrameSource and receives 42 // TestClientBinding Observes a BeginFrame and accepts CompositorFrame submitted
42 // CompositorFrames from a FrameGenerator. 43 // from FrameGenerator. It provides a way to inspect CompositorFrames.
43 class FakeCompositorFrameSink : public cc::CompositorFrameSink, 44 class TestClientBinding : public CompositorFrameSinkClientBinding,
44 public cc::BeginFrameObserver, 45 public cc::BeginFrameObserver {
45 public cc::ExternalBeginFrameSourceClient {
46 public: 46 public:
47 FakeCompositorFrameSink() 47 explicit TestClientBinding(
48 : cc::CompositorFrameSink(nullptr, nullptr, nullptr, nullptr) {} 48 cc::mojom::MojoCompositorFrameSinkClient* sink_client)
49 : sink_client_(sink_client) {}
50 ~TestClientBinding() override = default;
49 51
50 // cc::CompositorFrameSink implementation: 52 // CompositorFrameSinkClientBinding implementation:
51 bool BindToClient(cc::CompositorFrameSinkClient* client) override { 53 void SubmitCompositorFrame(cc::CompositorFrame frame) override {
52 if (!cc::CompositorFrameSink::BindToClient(client)) 54 ++frames_submitted_;
53 return false; 55 last_frame_ = std::move(frame);
54 56 begin_frame_source_->DidFinishFrame(this,
55 external_begin_frame_source_ = 57 last_frame_.metadata.begin_frame_ack);
56 base::MakeUnique<cc::ExternalBeginFrameSource>(this);
57 client_->SetBeginFrameSource(external_begin_frame_source_.get());
58 return true;
59 } 58 }
60 59
61 void DetachFromClient() override { 60 void SetNeedsBeginFrame(bool needs_begin_frame) override {
62 cc::CompositorFrameSink::DetachFromClient(); 61 if (needs_begin_frame == observing_begin_frames_)
63 } 62 return;
64 63
65 void SubmitCompositorFrame(cc::CompositorFrame frame) override { 64 observing_begin_frames_ = needs_begin_frame;
66 ++number_frames_received_; 65 if (needs_begin_frame) {
67 last_frame_ = std::move(frame); 66 begin_frame_source_->AddObserver(this);
67 } else
68 begin_frame_source_->RemoveObserver(this);
68 } 69 }
69 70
70 // cc::BeginFrameObserver implementation. 71 // cc::BeginFrameObserver implementation.
71 void OnBeginFrame(const cc::BeginFrameArgs& args) override { 72 void OnBeginFrame(const cc::BeginFrameArgs& args) override {
72 external_begin_frame_source_->OnBeginFrame(args); 73 sink_client_->OnBeginFrame(args);
73 last_begin_frame_args_ = args; 74 last_begin_frame_args_ = args;
74 } 75 }
75 76
76 const cc::BeginFrameArgs& LastUsedBeginFrameArgs() const override { 77 const cc::BeginFrameArgs& LastUsedBeginFrameArgs() const override {
77 return last_begin_frame_args_; 78 return last_begin_frame_args_;
78 } 79 }
79 80
80 void OnBeginFrameSourcePausedChanged(bool paused) override {} 81 void OnBeginFrameSourcePausedChanged(bool paused) override {}
81 82
82 // cc::ExternalBeginFrameSourceClient implementation: 83 void SetBeginFrameSource(cc::BeginFrameSource* begin_frame_source) {
83 void OnNeedsBeginFrames(bool needs_begin_frames) override { 84 begin_frame_source_ = begin_frame_source;
84 needs_begin_frames_ = needs_begin_frames;
85 UpdateNeedsBeginFramesInternal();
86 } 85 }
87 86
88 void OnDidFinishFrame(const cc::BeginFrameAck& ack) override { 87 const cc::RenderPassList& last_render_pass_list() const {
89 begin_frame_source_->DidFinishFrame(this, ack); 88 return last_frame_.render_pass_list;
90 }
91
92 void SetBeginFrameSource(cc::BeginFrameSource* source) {
93 if (begin_frame_source_ && observing_begin_frames_) {
94 begin_frame_source_->RemoveObserver(this);
95 observing_begin_frames_ = false;
96 }
97 begin_frame_source_ = source;
98 UpdateNeedsBeginFramesInternal();
99 } 89 }
100 90
101 const cc::CompositorFrameMetadata& last_metadata() const { 91 const cc::CompositorFrameMetadata& last_metadata() const {
102 return last_frame_.metadata; 92 return last_frame_.metadata;
103 } 93 }
104 94
105 const cc::RenderPassList& last_render_pass_list() const { 95 int frames_submitted() const { return frames_submitted_; }
106 return last_frame_.render_pass_list;
107 }
108
109 int number_frames_received() { return number_frames_received_; }
110 96
111 private: 97 private:
112 void UpdateNeedsBeginFramesInternal() { 98 cc::mojom::MojoCompositorFrameSinkClient* sink_client_;
113 if (!begin_frame_source_) 99 cc::BeginFrameArgs last_begin_frame_args_;
114 return; 100 cc::CompositorFrame last_frame_;
115
116 if (needs_begin_frames_ == observing_begin_frames_)
117 return;
118
119 observing_begin_frames_ = needs_begin_frames_;
120 if (needs_begin_frames_) {
121 begin_frame_source_->AddObserver(this);
122 } else {
123 begin_frame_source_->RemoveObserver(this);
124 }
125 }
126
127 int number_frames_received_ = 0;
128 std::unique_ptr<cc::ExternalBeginFrameSource> external_begin_frame_source_;
129 cc::BeginFrameSource* begin_frame_source_ = nullptr; 101 cc::BeginFrameSource* begin_frame_source_ = nullptr;
130 cc::BeginFrameArgs last_begin_frame_args_;
131 bool observing_begin_frames_ = false; 102 bool observing_begin_frames_ = false;
132 bool needs_begin_frames_ = false; 103 int frames_submitted_ = 0;
133 cc::CompositorFrame last_frame_;
134
135 DISALLOW_COPY_AND_ASSIGN(FakeCompositorFrameSink);
136 }; 104 };
137 105
138 class FrameGeneratorTest : public testing::Test { 106 class FrameGeneratorTest : public testing::Test {
139 public: 107 public:
140 FrameGeneratorTest() {} 108 FrameGeneratorTest() {}
141 ~FrameGeneratorTest() override {} 109 ~FrameGeneratorTest() override = default;
142 110
143 // testing::Test overrides: 111 // testing::Test overrides:
144 void SetUp() override { 112 void SetUp() override {
145 testing::Test::SetUp(); 113 testing::Test::SetUp();
146 114
147 std::unique_ptr<FakeCompositorFrameSink> compositor_frame_sink =
148 base::MakeUnique<FakeCompositorFrameSink>();
149 compositor_frame_sink_ = compositor_frame_sink.get();
150
151 constexpr float kRefreshRate = 0.f; 115 constexpr float kRefreshRate = 0.f;
152 constexpr bool kTickAutomatically = false; 116 constexpr bool kTickAutomatically = false;
117 frame_generator_ = base::MakeUnique<FrameGenerator>();
153 begin_frame_source_ = base::MakeUnique<cc::FakeExternalBeginFrameSource>( 118 begin_frame_source_ = base::MakeUnique<cc::FakeExternalBeginFrameSource>(
154 kRefreshRate, kTickAutomatically); 119 kRefreshRate, kTickAutomatically);
155 compositor_frame_sink_->SetBeginFrameSource(begin_frame_source_.get());
156 server_window_delegate_ = base::MakeUnique<TestServerWindowDelegate>();
157 frame_generator_ =
158 base::MakeUnique<FrameGenerator>(std::move(compositor_frame_sink));
159 frame_generator_->OnWindowSizeChanged(gfx::Size(1, 2));
160 }; 120 };
161 121
162 void InitWithSurfaceInfo() { 122 void InitWithSurfaceInfo(std::unique_ptr<TestClientBinding> client_binding) {
163 // FrameGenerator requires a valid SurfaceInfo before generating 123 // FrameGenerator requires a valid SurfaceInfo before generating
164 // CompositorFrames. 124 // CompositorFrames.
125 TestClientBinding* binding = client_binding.get();
126 client_binding->SetBeginFrameSource(begin_frame_source_.get());
127 frame_generator_->Bind(std::move(client_binding));
165 const cc::SurfaceId kArbitrarySurfaceId( 128 const cc::SurfaceId kArbitrarySurfaceId(
166 cc::FrameSinkId(1, 1), 129 cc::FrameSinkId(1, 1),
167 cc::LocalSurfaceId(1, base::UnguessableToken::Create())); 130 cc::LocalSurfaceId(1, base::UnguessableToken::Create()));
168 const cc::SurfaceInfo kArbitrarySurfaceInfo(kArbitrarySurfaceId, 1.0f, 131 const cc::SurfaceInfo kArbitrarySurfaceInfo(kArbitrarySurfaceId, 1.0f,
169 gfx::Size(100, 100)); 132 gfx::Size(100, 100));
170 133 frame_generator_->OnSurfaceCreated(kArbitrarySurfaceInfo);
171 frame_generator()->OnSurfaceCreated(kArbitrarySurfaceInfo);
172 IssueBeginFrame(); 134 IssueBeginFrame();
173 EXPECT_EQ(1, NumberOfFramesReceived()); 135 EXPECT_EQ(1, binding->frames_submitted());
174 }
175
176 int NumberOfFramesReceived() {
177 return compositor_frame_sink_->number_frames_received();
178 } 136 }
179 137
180 void IssueBeginFrame() { 138 void IssueBeginFrame() {
181 begin_frame_source_->TestOnBeginFrame(cc::CreateBeginFrameArgsForTesting( 139 begin_frame_source_->TestOnBeginFrame(cc::CreateBeginFrameArgsForTesting(
182 BEGINFRAME_FROM_HERE, 0, next_sequence_number_)); 140 BEGINFRAME_FROM_HERE, 0, next_sequence_number_));
183 ++next_sequence_number_; 141 ++next_sequence_number_;
184 } 142 }
185 143
186 FrameGenerator* frame_generator() { return frame_generator_.get(); } 144 const cc::BeginFrameAck& LastBeginFrameAck(
187 145 TestClientBinding* test_client_binding) {
188 const cc::CompositorFrameMetadata& LastMetadata() const { 146 return begin_frame_source_->LastAckForObserver(test_client_binding);
189 return compositor_frame_sink_->last_metadata();
190 } 147 }
191 148
192 const cc::RenderPassList& LastRenderPassList() const { 149 FrameGenerator* frame_generator() { return frame_generator_.get(); }
193 return compositor_frame_sink_->last_render_pass_list(); 150 cc::BeginFrameSource* begin_frame_source() {
194 } 151 return begin_frame_source_.get();
195
196 const cc::BeginFrameAck& LastBeginFrameAck() {
197 return begin_frame_source_->LastAckForObserver(compositor_frame_sink_);
198 } 152 }
199 153
200 private: 154 private:
201 FakeCompositorFrameSink* compositor_frame_sink_ = nullptr;
202 std::unique_ptr<cc::FakeExternalBeginFrameSource> begin_frame_source_; 155 std::unique_ptr<cc::FakeExternalBeginFrameSource> begin_frame_source_;
203 std::unique_ptr<TestServerWindowDelegate> server_window_delegate_;
204 std::unique_ptr<FrameGenerator> frame_generator_; 156 std::unique_ptr<FrameGenerator> frame_generator_;
205 int next_sequence_number_ = 1; 157 int next_sequence_number_ = 1;
206 158
207 DISALLOW_COPY_AND_ASSIGN(FrameGeneratorTest); 159 DISALLOW_COPY_AND_ASSIGN(FrameGeneratorTest);
208 }; 160 };
209 161
210 TEST_F(FrameGeneratorTest, InvalidSurfaceInfo) {
211 // After SetUP(), frame_generator() has its |is_window_visible_| set to true
212 // and |bounds_| to an arbitrary non-empty gfx::Rect but not a valid
213 // SurfaceInfo. frame_generator() should not request BeginFrames in this
214 // state.
215 IssueBeginFrame();
216 EXPECT_EQ(0, NumberOfFramesReceived());
217 }
218
219 TEST_F(FrameGeneratorTest, OnSurfaceCreated) { 162 TEST_F(FrameGeneratorTest, OnSurfaceCreated) {
220 EXPECT_EQ(0, NumberOfFramesReceived()); 163 std::unique_ptr<TestClientBinding> test_client_binding =
221 164 base::MakeUnique<TestClientBinding>(frame_generator());
165 test_client_binding->SetBeginFrameSource(begin_frame_source());
166 TestClientBinding* binding = test_client_binding.get();
167 frame_generator()->Bind(std::move(test_client_binding));
222 // FrameGenerator does not request BeginFrames upon creation. 168 // FrameGenerator does not request BeginFrames upon creation.
223 IssueBeginFrame(); 169 IssueBeginFrame();
224 EXPECT_EQ(0, NumberOfFramesReceived()); 170 EXPECT_EQ(cc::BeginFrameAck(), LastBeginFrameAck(binding));
225 EXPECT_EQ(cc::BeginFrameAck(), LastBeginFrameAck());
226 171
227 const cc::SurfaceId kArbitrarySurfaceId( 172 const cc::SurfaceId kArbitrarySurfaceId(
228 cc::FrameSinkId(1, 1), 173 cc::FrameSinkId(1, 1),
229 cc::LocalSurfaceId(1, base::UnguessableToken::Create())); 174 cc::LocalSurfaceId(1, base::UnguessableToken::Create()));
230 const cc::SurfaceInfo kArbitrarySurfaceInfo(kArbitrarySurfaceId, 1.0f, 175 const cc::SurfaceInfo kArbitrarySurfaceInfo(kArbitrarySurfaceId, 1.0f,
231 gfx::Size(100, 100)); 176 gfx::Size(100, 100));
232 frame_generator()->OnSurfaceCreated(kArbitrarySurfaceInfo); 177 frame_generator()->OnSurfaceCreated(kArbitrarySurfaceInfo);
233 EXPECT_EQ(0, NumberOfFramesReceived()); 178 frame_generator()->OnWindowSizeChanged(gfx::Size(1, 2));
234 179
235 IssueBeginFrame(); 180 IssueBeginFrame();
236 EXPECT_EQ(1, NumberOfFramesReceived()); 181 EXPECT_EQ(1, binding->frames_submitted());
237 182
238 // Verify that the CompositorFrame refers to the window manager's surface via 183 // Verify that the CompositorFrame refers to the window manager's surface via
239 // referenced_surfaces. 184 // referenced_surfaces.
240 const cc::CompositorFrameMetadata& last_metadata = LastMetadata(); 185 const cc::CompositorFrameMetadata& last_metadata = binding->last_metadata();
241 const std::vector<cc::SurfaceId>& referenced_surfaces = 186 const std::vector<cc::SurfaceId>& referenced_surfaces =
242 last_metadata.referenced_surfaces; 187 last_metadata.referenced_surfaces;
243 EXPECT_EQ(1lu, referenced_surfaces.size()); 188 EXPECT_EQ(1lu, referenced_surfaces.size());
244 EXPECT_EQ(kArbitrarySurfaceId, referenced_surfaces.front()); 189 EXPECT_EQ(kArbitrarySurfaceId, referenced_surfaces.front());
245 190
246 cc::BeginFrameAck expected_ack(0, 2, 2, true); 191 cc::BeginFrameAck expected_ack(0, 2, 2, true);
247 EXPECT_EQ(expected_ack, LastBeginFrameAck()); 192 EXPECT_EQ(expected_ack, LastBeginFrameAck(binding));
248 EXPECT_EQ(expected_ack, last_metadata.begin_frame_ack); 193 EXPECT_EQ(expected_ack, last_metadata.begin_frame_ack);
249 194
250 // FrameGenerator stops requesting BeginFrames after submitting a 195 // FrameGenerator stops requesting BeginFrames after submitting a
251 // CompositorFrame. 196 // CompositorFrame.
252 IssueBeginFrame(); 197 IssueBeginFrame();
253 EXPECT_EQ(1, NumberOfFramesReceived()); 198 EXPECT_EQ(expected_ack, LastBeginFrameAck(binding));
254 EXPECT_EQ(expected_ack, LastBeginFrameAck());
255 } 199 }
256 200
257 TEST_F(FrameGeneratorTest, SetDeviceScaleFactor) { 201 TEST_F(FrameGeneratorTest, SetDeviceScaleFactor) {
258 EXPECT_EQ(0, NumberOfFramesReceived()); 202 std::unique_ptr<TestClientBinding> test_client_binding =
259 const cc::SurfaceId kArbitrarySurfaceId( 203 base::MakeUnique<TestClientBinding>(frame_generator());
260 cc::FrameSinkId(1, 1), 204 TestClientBinding* binding = test_client_binding.get();
261 cc::LocalSurfaceId(1, base::UnguessableToken::Create())); 205 InitWithSurfaceInfo(std::move(test_client_binding));
262 const cc::SurfaceInfo kArbitrarySurfaceInfo(kArbitrarySurfaceId, 1.0f,
263 gfx::Size(100, 100));
264 constexpr float kDefaultScaleFactor = 1.0f; 206 constexpr float kDefaultScaleFactor = 1.0f;
265 constexpr float kArbitraryScaleFactor = 0.5f; 207 constexpr float kArbitraryScaleFactor = 0.5f;
266 208
267 // A valid SurfaceInfo is required before setting device scale factor.
268 frame_generator()->OnSurfaceCreated(kArbitrarySurfaceInfo);
269 IssueBeginFrame();
270 EXPECT_EQ(1, NumberOfFramesReceived());
271
272 // FrameGenerator stops requesting BeginFrames after receiving one.
273 IssueBeginFrame();
274 EXPECT_EQ(1, NumberOfFramesReceived());
275
276 // FrameGenerator does not request BeginFrames if its device scale factor 209 // FrameGenerator does not request BeginFrames if its device scale factor
277 // remains unchanged. 210 // remains unchanged.
278 frame_generator()->SetDeviceScaleFactor(kDefaultScaleFactor); 211 frame_generator()->SetDeviceScaleFactor(kDefaultScaleFactor);
279 IssueBeginFrame(); 212 IssueBeginFrame();
280 EXPECT_EQ(1, NumberOfFramesReceived()); 213 const cc::CompositorFrameMetadata& last_metadata = binding->last_metadata();
281 const cc::CompositorFrameMetadata& last_metadata = LastMetadata();
282 EXPECT_EQ(kDefaultScaleFactor, last_metadata.device_scale_factor); 214 EXPECT_EQ(kDefaultScaleFactor, last_metadata.device_scale_factor);
283 215
284 frame_generator()->SetDeviceScaleFactor(kArbitraryScaleFactor); 216 frame_generator()->SetDeviceScaleFactor(kArbitraryScaleFactor);
285 IssueBeginFrame(); 217 IssueBeginFrame();
286 EXPECT_EQ(2, NumberOfFramesReceived()); 218 EXPECT_EQ(2, binding->frames_submitted());
287 const cc::CompositorFrameMetadata& second_last_metadata = LastMetadata(); 219 const cc::CompositorFrameMetadata& second_last_metadata =
220 binding->last_metadata();
288 EXPECT_EQ(kArbitraryScaleFactor, second_last_metadata.device_scale_factor); 221 EXPECT_EQ(kArbitraryScaleFactor, second_last_metadata.device_scale_factor);
289 } 222 }
290 223
291 TEST_F(FrameGeneratorTest, SetHighContrastMode) { 224 TEST_F(FrameGeneratorTest, SetHighContrastMode) {
292 InitWithSurfaceInfo(); 225 std::unique_ptr<TestClientBinding> test_client_binding =
226 base::MakeUnique<TestClientBinding>(frame_generator());
227 TestClientBinding* binding = test_client_binding.get();
228 InitWithSurfaceInfo(std::move(test_client_binding));
293 229
294 // Changing high contrast mode should trigger a BeginFrame. 230 // Changing high contrast mode should trigger a BeginFrame.
295 frame_generator()->SetHighContrastMode(true); 231 frame_generator()->SetHighContrastMode(true);
296 IssueBeginFrame(); 232 IssueBeginFrame();
297 EXPECT_EQ(2, NumberOfFramesReceived()); 233 EXPECT_EQ(2, binding->frames_submitted());
298 234
299 // Verify that the last frame has an invert filter. 235 // Verify that the last frame has an invert filter.
300 const cc::RenderPassList& render_pass_list = LastRenderPassList(); 236 const cc::RenderPassList& render_pass_list = binding->last_render_pass_list();
301 const cc::FilterOperations expected_filters( 237 const cc::FilterOperations expected_filters(
302 {cc::FilterOperation::CreateInvertFilter(1.f)}); 238 {cc::FilterOperation::CreateInvertFilter(1.f)});
303 EXPECT_EQ(expected_filters, render_pass_list.front()->filters); 239 EXPECT_EQ(expected_filters, render_pass_list.front()->filters);
304 } 240 }
305 241
306 TEST_F(FrameGeneratorTest, WindowBoundsChanged) { 242 TEST_F(FrameGeneratorTest, WindowBoundsChanged) {
307 InitWithSurfaceInfo(); 243 std::unique_ptr<TestClientBinding> test_client_binding =
244 base::MakeUnique<TestClientBinding>(frame_generator());
245 TestClientBinding* binding = test_client_binding.get();
246 InitWithSurfaceInfo(std::move(test_client_binding));
308 247
309 // Window bounds change triggers a BeginFrame. 248 // Window bounds change triggers a BeginFrame.
310 constexpr int expected_render_pass_id = 1; 249 constexpr int expected_render_pass_id = 1;
311 const gfx::Size kArbitrarySize(3, 4); 250 const gfx::Size kArbitrarySize(3, 4);
312 frame_generator()->OnWindowSizeChanged(kArbitrarySize); 251 frame_generator()->OnWindowSizeChanged(kArbitrarySize);
313 IssueBeginFrame(); 252 IssueBeginFrame();
314 EXPECT_EQ(2, NumberOfFramesReceived()); 253 EXPECT_EQ(2, binding->frames_submitted());
315 cc::RenderPass* received_render_pass = LastRenderPassList().front().get(); 254 cc::RenderPass* received_render_pass =
255 binding->last_render_pass_list().front().get();
316 EXPECT_EQ(expected_render_pass_id, received_render_pass->id); 256 EXPECT_EQ(expected_render_pass_id, received_render_pass->id);
317 EXPECT_EQ(kArbitrarySize, received_render_pass->output_rect.size()); 257 EXPECT_EQ(kArbitrarySize, received_render_pass->output_rect.size());
318 EXPECT_EQ(kArbitrarySize, received_render_pass->damage_rect.size()); 258 EXPECT_EQ(kArbitrarySize, received_render_pass->damage_rect.size());
319 EXPECT_EQ(gfx::Transform(), received_render_pass->transform_to_root_target); 259 EXPECT_EQ(gfx::Transform(), received_render_pass->transform_to_root_target);
320 } 260 }
321 261
322 // Change window bounds twice before issuing a BeginFrame. The CompositorFrame 262 // Change window bounds twice before issuing a BeginFrame. The CompositorFrame
323 // submitted by frame_generator() should only has the second bounds. 263 // submitted by frame_generator() should only has the second bounds.
324 TEST_F(FrameGeneratorTest, WindowBoundsChangedTwice) { 264 TEST_F(FrameGeneratorTest, WindowBoundsChangedTwice) {
325 InitWithSurfaceInfo(); 265 std::unique_ptr<TestClientBinding> test_client_binding =
266 base::MakeUnique<TestClientBinding>(frame_generator());
267 TestClientBinding* binding = test_client_binding.get();
268 InitWithSurfaceInfo(std::move(test_client_binding));
326 269
327 const gfx::Size kArbitrarySize(3, 4); 270 const gfx::Size kArbitrarySize(3, 4);
328 const gfx::Size kAnotherArbitrarySize(5, 6); 271 const gfx::Size kAnotherArbitrarySize(5, 6);
329 frame_generator()->OnWindowSizeChanged(kArbitrarySize); 272 frame_generator()->OnWindowSizeChanged(kArbitrarySize);
330 frame_generator()->OnWindowSizeChanged(kAnotherArbitrarySize); 273 frame_generator()->OnWindowSizeChanged(kAnotherArbitrarySize);
331 IssueBeginFrame(); 274 IssueBeginFrame();
332 EXPECT_EQ(2, NumberOfFramesReceived()); 275 EXPECT_EQ(2, binding->frames_submitted());
333 cc::RenderPass* received_render_pass = LastRenderPassList().front().get(); 276 cc::RenderPass* received_render_pass =
277 binding->last_render_pass_list().front().get();
334 EXPECT_EQ(kAnotherArbitrarySize, received_render_pass->output_rect.size()); 278 EXPECT_EQ(kAnotherArbitrarySize, received_render_pass->output_rect.size());
335 EXPECT_EQ(kAnotherArbitrarySize, received_render_pass->damage_rect.size()); 279 EXPECT_EQ(kAnotherArbitrarySize, received_render_pass->damage_rect.size());
336 280
337 // frame_generator() stops requesting BeginFrames after getting one. 281 // frame_generator() stops requesting BeginFrames after getting one.
338 IssueBeginFrame(); 282 IssueBeginFrame();
339 EXPECT_EQ(2, NumberOfFramesReceived());
340 } 283 }
341 284
342 TEST_F(FrameGeneratorTest, WindowDamaged) { 285 TEST_F(FrameGeneratorTest, WindowDamaged) {
343 InitWithSurfaceInfo(); 286 std::unique_ptr<TestClientBinding> test_client_binding =
287 base::MakeUnique<TestClientBinding>(frame_generator());
288 TestClientBinding* binding = test_client_binding.get();
Fady Samuel 2017/05/17 20:33:04 This pattern seems to be used over and over again.
Alex Z. 2017/05/17 21:20:25 Done.
289 InitWithSurfaceInfo(std::move(test_client_binding));
344 290
345 frame_generator()->OnWindowDamaged(); 291 frame_generator()->OnWindowDamaged();
346 IssueBeginFrame(); 292 IssueBeginFrame();
347 EXPECT_EQ(2, NumberOfFramesReceived()); 293 EXPECT_EQ(2, binding->frames_submitted());
Fady Samuel 2017/05/17 20:33:04 If you restore this method then you don't need thi
Alex Z. 2017/05/17 21:20:25 Done.
348 } 294 }
349 295
350 } // namespace test 296 } // namespace test
351 } // namespace ws 297 } // namespace ws
352 } // namespace ui 298 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698