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

Side by Side Diff: cc/surfaces/surface_aggregator_unittest.cc

Issue 1304063014: cc: Plumbing for BeginFrameSource based on Surfaces (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix webview Created 5 years, 2 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "cc/output/compositor_frame.h" 5 #include "cc/output/compositor_frame.h"
6 #include "cc/output/delegated_frame_data.h" 6 #include "cc/output/delegated_frame_data.h"
7 #include "cc/quads/render_pass.h" 7 #include "cc/quads/render_pass.h"
8 #include "cc/quads/render_pass_draw_quad.h" 8 #include "cc/quads/render_pass_draw_quad.h"
9 #include "cc/quads/solid_color_draw_quad.h" 9 #include "cc/quads/solid_color_draw_quad.h"
10 #include "cc/quads/surface_draw_quad.h" 10 #include "cc/quads/surface_draw_quad.h"
(...skipping 25 matching lines...) Expand all
36 } 36 }
37 37
38 gfx::Size SurfaceSize() { 38 gfx::Size SurfaceSize() {
39 static gfx::Size size(5, 5); 39 static gfx::Size size(5, 5);
40 return size; 40 return size;
41 } 41 }
42 42
43 class EmptySurfaceFactoryClient : public SurfaceFactoryClient { 43 class EmptySurfaceFactoryClient : public SurfaceFactoryClient {
44 public: 44 public:
45 void ReturnResources(const ReturnedResourceArray& resources) override {} 45 void ReturnResources(const ReturnedResourceArray& resources) override {}
46
46 void WillDrawSurface(SurfaceId id, const gfx::Rect& damage_rect) override { 47 void WillDrawSurface(SurfaceId id, const gfx::Rect& damage_rect) override {
47 last_surface_id_ = id; 48 last_surface_id_ = id;
48 last_damage_rect_ = damage_rect; 49 last_damage_rect_ = damage_rect;
49 } 50 }
50 51
52 void SetBeginFrameSource(SurfaceId surface_id,
53 BeginFrameSource* begin_frame_source) override {}
54
51 gfx::Rect last_damage_rect_; 55 gfx::Rect last_damage_rect_;
52 SurfaceId last_surface_id_; 56 SurfaceId last_surface_id_;
53 }; 57 };
54 58
59 class FakeSurfaceAggregatorClient : public SurfaceAggregatorClient {
60 public:
61 void AddSurface(Surface* surface) override {
62 EXPECT_FALSE(HasSurface(surface));
63 surfaces_.insert(surface);
64 }
65
66 void RemoveSurface(Surface* surface) override {
67 EXPECT_TRUE(HasSurface(surface));
68 surfaces_.erase(surface);
69 }
70
71 bool HasSurface(Surface* surface) const {
72 return surfaces_.count(surface) != 0;
73 }
74
75 private:
76 std::set<Surface*> surfaces_;
77 };
78
55 class SurfaceAggregatorTest : public testing::Test { 79 class SurfaceAggregatorTest : public testing::Test {
56 public: 80 public:
57 explicit SurfaceAggregatorTest(bool use_damage_rect) 81 explicit SurfaceAggregatorTest(bool use_damage_rect)
58 : factory_(&manager_, &empty_client_), 82 : factory_(&manager_, &empty_client_),
59 aggregator_(&manager_, NULL, use_damage_rect) {} 83 aggregator_(&surface_aggregator_client_,
84 &manager_,
85 NULL,
86 use_damage_rect) {}
60 87
61 SurfaceAggregatorTest() : SurfaceAggregatorTest(false) {} 88 SurfaceAggregatorTest() : SurfaceAggregatorTest(false) {}
62 89
63 protected: 90 protected:
64 SurfaceManager manager_; 91 SurfaceManager manager_;
65 EmptySurfaceFactoryClient empty_client_; 92 EmptySurfaceFactoryClient empty_client_;
66 SurfaceFactory factory_; 93 SurfaceFactory factory_;
94 FakeSurfaceAggregatorClient surface_aggregator_client_;
67 SurfaceAggregator aggregator_; 95 SurfaceAggregator aggregator_;
68 }; 96 };
69 97
70 TEST_F(SurfaceAggregatorTest, ValidSurfaceNoFrame) { 98 TEST_F(SurfaceAggregatorTest, ValidSurfaceNoFrame) {
71 SurfaceId one_id(7); 99 SurfaceId one_id(7);
72 factory_.Create(one_id); 100 factory_.Create(one_id);
101 Surface* surface = manager_.GetSurfaceForId(one_id);
102
103 EXPECT_FALSE(surface_aggregator_client_.HasSurface(surface));
73 scoped_ptr<CompositorFrame> frame = aggregator_.Aggregate(one_id); 104 scoped_ptr<CompositorFrame> frame = aggregator_.Aggregate(one_id);
74 EXPECT_FALSE(frame); 105 EXPECT_FALSE(frame);
106 EXPECT_FALSE(surface_aggregator_client_.HasSurface(surface));
107
75 factory_.Destroy(one_id); 108 factory_.Destroy(one_id);
76 } 109 }
77 110
78 class SurfaceAggregatorValidSurfaceTest : public SurfaceAggregatorTest { 111 class SurfaceAggregatorValidSurfaceTest : public SurfaceAggregatorTest {
79 public: 112 public:
80 explicit SurfaceAggregatorValidSurfaceTest(bool use_damage_rect) 113 explicit SurfaceAggregatorValidSurfaceTest(bool use_damage_rect)
81 : SurfaceAggregatorTest(use_damage_rect), 114 : SurfaceAggregatorTest(use_damage_rect),
82 allocator_(1u), 115 allocator_(1u),
83 child_allocator_(2u) {} 116 child_allocator_(2u) {}
84 SurfaceAggregatorValidSurfaceTest() 117 SurfaceAggregatorValidSurfaceTest()
85 : SurfaceAggregatorValidSurfaceTest(false) {} 118 : SurfaceAggregatorValidSurfaceTest(false) {}
86 119
87 void SetUp() override { 120 void SetUp() override {
88 SurfaceAggregatorTest::SetUp(); 121 SurfaceAggregatorTest::SetUp();
89 root_surface_id_ = allocator_.GenerateId(); 122 root_surface_id_ = allocator_.GenerateId();
90 factory_.Create(root_surface_id_); 123 factory_.Create(root_surface_id_);
124 root_surface_ = manager_.GetSurfaceForId(root_surface_id_);
91 } 125 }
92 126
93 void TearDown() override { 127 void TearDown() override {
94 factory_.Destroy(root_surface_id_); 128 factory_.Destroy(root_surface_id_);
95 SurfaceAggregatorTest::TearDown(); 129 SurfaceAggregatorTest::TearDown();
96 } 130 }
97 131
98 void AggregateAndVerify(test::Pass* expected_passes, 132 void AggregateAndVerify(test::Pass* expected_passes,
99 size_t expected_pass_count, 133 size_t expected_pass_count,
100 SurfaceId* surface_ids, 134 SurfaceId* surface_ids,
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 185
152 scoped_ptr<CompositorFrame> child_frame(new CompositorFrame); 186 scoped_ptr<CompositorFrame> child_frame(new CompositorFrame);
153 child_frame->delegated_frame_data = delegated_frame_data.Pass(); 187 child_frame->delegated_frame_data = delegated_frame_data.Pass();
154 188
155 factory_.SubmitCompositorFrame(surface_id, child_frame.Pass(), 189 factory_.SubmitCompositorFrame(surface_id, child_frame.Pass(),
156 SurfaceFactory::DrawCallback()); 190 SurfaceFactory::DrawCallback());
157 } 191 }
158 192
159 protected: 193 protected:
160 SurfaceId root_surface_id_; 194 SurfaceId root_surface_id_;
195 Surface* root_surface_;
161 SurfaceIdAllocator allocator_; 196 SurfaceIdAllocator allocator_;
162 SurfaceIdAllocator child_allocator_; 197 SurfaceIdAllocator child_allocator_;
163 }; 198 };
164 199
165 // Tests that a very simple frame containing only two solid color quads makes it 200 // Tests that a very simple frame containing only two solid color quads makes it
166 // through the aggregator correctly. 201 // through the aggregator correctly.
167 TEST_F(SurfaceAggregatorValidSurfaceTest, SimpleFrame) { 202 TEST_F(SurfaceAggregatorValidSurfaceTest, SimpleFrame) {
168 test::Quad quads[] = {test::Quad::SolidColorQuad(SK_ColorRED), 203 test::Quad quads[] = {test::Quad::SolidColorQuad(SK_ColorRED),
169 test::Quad::SolidColorQuad(SK_ColorBLUE)}; 204 test::Quad::SolidColorQuad(SK_ColorBLUE)};
170 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; 205 test::Pass passes[] = {test::Pass(quads, arraysize(quads))};
171 206
172 SubmitCompositorFrame(passes, arraysize(passes), root_surface_id_); 207 SubmitCompositorFrame(passes, arraysize(passes), root_surface_id_);
173 208
174 SurfaceId ids[] = {root_surface_id_}; 209 SurfaceId ids[] = {root_surface_id_};
210
211 EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_));
175 AggregateAndVerify(passes, arraysize(passes), ids, arraysize(ids)); 212 AggregateAndVerify(passes, arraysize(passes), ids, arraysize(ids));
213 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
176 214
177 // Check that WillDrawSurface was called. 215 // Check that WillDrawSurface was called.
178 EXPECT_EQ(gfx::Rect(SurfaceSize()), empty_client_.last_damage_rect_); 216 EXPECT_EQ(gfx::Rect(SurfaceSize()), empty_client_.last_damage_rect_);
179 EXPECT_EQ(root_surface_id_, empty_client_.last_surface_id_); 217 EXPECT_EQ(root_surface_id_, empty_client_.last_surface_id_);
180 } 218 }
181 219
182 TEST_F(SurfaceAggregatorValidSurfaceTest, OpacityCopied) { 220 TEST_F(SurfaceAggregatorValidSurfaceTest, OpacityCopied) {
183 SurfaceId embedded_surface_id = allocator_.GenerateId(); 221 SurfaceId embedded_surface_id = allocator_.GenerateId();
184 factory_.Create(embedded_surface_id); 222 factory_.Create(embedded_surface_id);
223 Surface* embedded_surface = manager_.GetSurfaceForId(embedded_surface_id);
224 EXPECT_FALSE(surface_aggregator_client_.HasSurface(embedded_surface));
185 225
186 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), 226 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN),
187 test::Quad::SolidColorQuad(SK_ColorBLUE)}; 227 test::Quad::SolidColorQuad(SK_ColorBLUE)};
188 test::Pass embedded_passes[] = { 228 test::Pass embedded_passes[] = {
189 test::Pass(embedded_quads, arraysize(embedded_quads))}; 229 test::Pass(embedded_quads, arraysize(embedded_quads))};
190 230
191 SubmitCompositorFrame(embedded_passes, arraysize(embedded_passes), 231 SubmitCompositorFrame(embedded_passes, arraysize(embedded_passes),
192 embedded_surface_id); 232 embedded_surface_id);
193 233
194 test::Quad quads[] = {test::Quad::SurfaceQuad(embedded_surface_id, .5f)}; 234 test::Quad quads[] = {test::Quad::SurfaceQuad(embedded_surface_id, .5f)};
195 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; 235 test::Pass passes[] = {test::Pass(quads, arraysize(quads))};
196 236
197 SubmitCompositorFrame(passes, arraysize(passes), root_surface_id_); 237 SubmitCompositorFrame(passes, arraysize(passes), root_surface_id_);
198 238
239 EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_));
240 EXPECT_FALSE(surface_aggregator_client_.HasSurface(embedded_surface));
241
199 scoped_ptr<CompositorFrame> aggregated_frame = 242 scoped_ptr<CompositorFrame> aggregated_frame =
200 aggregator_.Aggregate(root_surface_id_); 243 aggregator_.Aggregate(root_surface_id_);
201 244
245 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
246 EXPECT_TRUE(surface_aggregator_client_.HasSurface(embedded_surface));
247
202 ASSERT_TRUE(aggregated_frame); 248 ASSERT_TRUE(aggregated_frame);
203 ASSERT_TRUE(aggregated_frame->delegated_frame_data); 249 ASSERT_TRUE(aggregated_frame->delegated_frame_data);
204 250
205 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); 251 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get();
206 252
207 RenderPassList& render_pass_list(frame_data->render_pass_list); 253 RenderPassList& render_pass_list(frame_data->render_pass_list);
208 ASSERT_EQ(2u, render_pass_list.size()); 254 ASSERT_EQ(2u, render_pass_list.size());
209 SharedQuadStateList& shared_quad_state_list( 255 SharedQuadStateList& shared_quad_state_list(
210 render_pass_list[0]->shared_quad_state_list); 256 render_pass_list[0]->shared_quad_state_list);
211 ASSERT_EQ(2u, shared_quad_state_list.size()); 257 ASSERT_EQ(2u, shared_quad_state_list.size());
(...skipping 13 matching lines...) Expand all
225 test::Quad::SolidColorQuad(SK_ColorLTGRAY)}, 271 test::Quad::SolidColorQuad(SK_ColorLTGRAY)},
226 {test::Quad::SolidColorQuad(SK_ColorGRAY), 272 {test::Quad::SolidColorQuad(SK_ColorGRAY),
227 test::Quad::SolidColorQuad(SK_ColorDKGRAY)}}; 273 test::Quad::SolidColorQuad(SK_ColorDKGRAY)}};
228 test::Pass passes[] = { 274 test::Pass passes[] = {
229 test::Pass(quads[0], arraysize(quads[0]), RenderPassId(1, 1)), 275 test::Pass(quads[0], arraysize(quads[0]), RenderPassId(1, 1)),
230 test::Pass(quads[1], arraysize(quads[1]), RenderPassId(1, 2))}; 276 test::Pass(quads[1], arraysize(quads[1]), RenderPassId(1, 2))};
231 277
232 SubmitCompositorFrame(passes, arraysize(passes), root_surface_id_); 278 SubmitCompositorFrame(passes, arraysize(passes), root_surface_id_);
233 279
234 SurfaceId ids[] = {root_surface_id_}; 280 SurfaceId ids[] = {root_surface_id_};
281
282 EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_));
235 AggregateAndVerify(passes, arraysize(passes), ids, arraysize(ids)); 283 AggregateAndVerify(passes, arraysize(passes), ids, arraysize(ids));
284 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
236 } 285 }
237 286
238 // This tests very simple embedding. root_surface has a frame containing a few 287 // This tests very simple embedding. root_surface has a frame containing a few
239 // solid color quads and a surface quad referencing embedded_surface. 288 // solid color quads and a surface quad referencing embedded_surface.
240 // embedded_surface has a frame containing only a solid color quad. The solid 289 // embedded_surface has a frame containing only a solid color quad. The solid
241 // color quad should be aggregated into the final frame. 290 // color quad should be aggregated into the final frame.
242 TEST_F(SurfaceAggregatorValidSurfaceTest, SimpleSurfaceReference) { 291 TEST_F(SurfaceAggregatorValidSurfaceTest, SimpleSurfaceReference) {
243 SurfaceId embedded_surface_id = allocator_.GenerateId(); 292 SurfaceId embedded_surface_id = allocator_.GenerateId();
244 factory_.Create(embedded_surface_id); 293 factory_.Create(embedded_surface_id);
294 Surface* embedded_surface = manager_.GetSurfaceForId(embedded_surface_id);
295 EXPECT_FALSE(surface_aggregator_client_.HasSurface(embedded_surface));
245 296
246 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)}; 297 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)};
247 test::Pass embedded_passes[] = { 298 test::Pass embedded_passes[] = {
248 test::Pass(embedded_quads, arraysize(embedded_quads))}; 299 test::Pass(embedded_quads, arraysize(embedded_quads))};
249 300
250 SubmitCompositorFrame(embedded_passes, arraysize(embedded_passes), 301 SubmitCompositorFrame(embedded_passes, arraysize(embedded_passes),
251 embedded_surface_id); 302 embedded_surface_id);
252 303
253 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), 304 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE),
254 test::Quad::SurfaceQuad(embedded_surface_id, 1.f), 305 test::Quad::SurfaceQuad(embedded_surface_id, 1.f),
255 test::Quad::SolidColorQuad(SK_ColorBLACK)}; 306 test::Quad::SolidColorQuad(SK_ColorBLACK)};
256 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; 307 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))};
257 308
258 SubmitCompositorFrame(root_passes, arraysize(root_passes), root_surface_id_); 309 SubmitCompositorFrame(root_passes, arraysize(root_passes), root_surface_id_);
259 310
311 EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_));
312 EXPECT_FALSE(surface_aggregator_client_.HasSurface(embedded_surface));
313
260 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), 314 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE),
261 test::Quad::SolidColorQuad(SK_ColorGREEN), 315 test::Quad::SolidColorQuad(SK_ColorGREEN),
262 test::Quad::SolidColorQuad(SK_ColorBLACK)}; 316 test::Quad::SolidColorQuad(SK_ColorBLACK)};
263 test::Pass expected_passes[] = { 317 test::Pass expected_passes[] = {
264 test::Pass(expected_quads, arraysize(expected_quads))}; 318 test::Pass(expected_quads, arraysize(expected_quads))};
265 SurfaceId ids[] = {root_surface_id_, embedded_surface_id}; 319 SurfaceId ids[] = {root_surface_id_, embedded_surface_id};
266 AggregateAndVerify( 320 AggregateAndVerify(
267 expected_passes, arraysize(expected_passes), ids, arraysize(ids)); 321 expected_passes, arraysize(expected_passes), ids, arraysize(ids));
268 322
323 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
324 EXPECT_TRUE(surface_aggregator_client_.HasSurface(embedded_surface));
325
269 factory_.Destroy(embedded_surface_id); 326 factory_.Destroy(embedded_surface_id);
270 } 327 }
271 328
272 TEST_F(SurfaceAggregatorValidSurfaceTest, CopyRequest) { 329 TEST_F(SurfaceAggregatorValidSurfaceTest, CopyRequest) {
273 SurfaceId embedded_surface_id = allocator_.GenerateId(); 330 SurfaceId embedded_surface_id = allocator_.GenerateId();
274 factory_.Create(embedded_surface_id); 331 factory_.Create(embedded_surface_id);
332 Surface* embedded_surface = manager_.GetSurfaceForId(embedded_surface_id);
333 EXPECT_FALSE(surface_aggregator_client_.HasSurface(embedded_surface));
275 334
276 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)}; 335 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)};
277 test::Pass embedded_passes[] = { 336 test::Pass embedded_passes[] = {
278 test::Pass(embedded_quads, arraysize(embedded_quads))}; 337 test::Pass(embedded_quads, arraysize(embedded_quads))};
279 338
280 SubmitCompositorFrame(embedded_passes, arraysize(embedded_passes), 339 SubmitCompositorFrame(embedded_passes, arraysize(embedded_passes),
281 embedded_surface_id); 340 embedded_surface_id);
282 scoped_ptr<CopyOutputRequest> copy_request( 341 scoped_ptr<CopyOutputRequest> copy_request(
283 CopyOutputRequest::CreateEmptyRequest()); 342 CopyOutputRequest::CreateEmptyRequest());
284 CopyOutputRequest* copy_request_ptr = copy_request.get(); 343 CopyOutputRequest* copy_request_ptr = copy_request.get();
285 factory_.RequestCopyOfSurface(embedded_surface_id, copy_request.Pass()); 344 factory_.RequestCopyOfSurface(embedded_surface_id, copy_request.Pass());
286 345
287 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), 346 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE),
288 test::Quad::SurfaceQuad(embedded_surface_id, 1.f), 347 test::Quad::SurfaceQuad(embedded_surface_id, 1.f),
289 test::Quad::SolidColorQuad(SK_ColorBLACK)}; 348 test::Quad::SolidColorQuad(SK_ColorBLACK)};
290 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; 349 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))};
291 350
292 SubmitCompositorFrame(root_passes, arraysize(root_passes), root_surface_id_); 351 SubmitCompositorFrame(root_passes, arraysize(root_passes), root_surface_id_);
293 352
353 EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_));
354 EXPECT_FALSE(surface_aggregator_client_.HasSurface(embedded_surface));
355
294 scoped_ptr<CompositorFrame> aggregated_frame = 356 scoped_ptr<CompositorFrame> aggregated_frame =
295 aggregator_.Aggregate(root_surface_id_); 357 aggregator_.Aggregate(root_surface_id_);
296 358
359 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
360 EXPECT_TRUE(surface_aggregator_client_.HasSurface(embedded_surface));
361
297 ASSERT_TRUE(aggregated_frame); 362 ASSERT_TRUE(aggregated_frame);
298 ASSERT_TRUE(aggregated_frame->delegated_frame_data); 363 ASSERT_TRUE(aggregated_frame->delegated_frame_data);
299 364
300 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); 365 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get();
301 366
302 test::Quad expected_quads[] = { 367 test::Quad expected_quads[] = {
303 test::Quad::SolidColorQuad(SK_ColorWHITE), 368 test::Quad::SolidColorQuad(SK_ColorWHITE),
304 test::Quad::RenderPassQuad(frame_data->render_pass_list[0]->id), 369 test::Quad::RenderPassQuad(frame_data->render_pass_list[0]->id),
305 test::Quad::SolidColorQuad(SK_ColorBLACK)}; 370 test::Quad::SolidColorQuad(SK_ColorBLACK)};
306 test::Pass expected_passes[] = { 371 test::Pass expected_passes[] = {
(...skipping 16 matching lines...) Expand all
323 aggregator_.previous_contained_surfaces().end()); 388 aggregator_.previous_contained_surfaces().end());
324 } 389 }
325 390
326 factory_.Destroy(embedded_surface_id); 391 factory_.Destroy(embedded_surface_id);
327 } 392 }
328 393
329 // Root surface may contain copy requests. 394 // Root surface may contain copy requests.
330 TEST_F(SurfaceAggregatorValidSurfaceTest, RootCopyRequest) { 395 TEST_F(SurfaceAggregatorValidSurfaceTest, RootCopyRequest) {
331 SurfaceId embedded_surface_id = allocator_.GenerateId(); 396 SurfaceId embedded_surface_id = allocator_.GenerateId();
332 factory_.Create(embedded_surface_id); 397 factory_.Create(embedded_surface_id);
398 Surface* embedded_surface = manager_.GetSurfaceForId(embedded_surface_id);
399 EXPECT_FALSE(surface_aggregator_client_.HasSurface(embedded_surface));
333 400
334 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)}; 401 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)};
335 test::Pass embedded_passes[] = { 402 test::Pass embedded_passes[] = {
336 test::Pass(embedded_quads, arraysize(embedded_quads))}; 403 test::Pass(embedded_quads, arraysize(embedded_quads))};
337 404
338 SubmitCompositorFrame(embedded_passes, arraysize(embedded_passes), 405 SubmitCompositorFrame(embedded_passes, arraysize(embedded_passes),
339 embedded_surface_id); 406 embedded_surface_id);
340 scoped_ptr<CopyOutputRequest> copy_request( 407 scoped_ptr<CopyOutputRequest> copy_request(
341 CopyOutputRequest::CreateEmptyRequest()); 408 CopyOutputRequest::CreateEmptyRequest());
342 CopyOutputRequest* copy_request_ptr = copy_request.get(); 409 CopyOutputRequest* copy_request_ptr = copy_request.get();
(...skipping 20 matching lines...) Expand all
363 scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); 430 scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData);
364 pass_list.swap(frame_data->render_pass_list); 431 pass_list.swap(frame_data->render_pass_list);
365 432
366 scoped_ptr<CompositorFrame> frame(new CompositorFrame); 433 scoped_ptr<CompositorFrame> frame(new CompositorFrame);
367 frame->delegated_frame_data = frame_data.Pass(); 434 frame->delegated_frame_data = frame_data.Pass();
368 435
369 factory_.SubmitCompositorFrame(root_surface_id_, frame.Pass(), 436 factory_.SubmitCompositorFrame(root_surface_id_, frame.Pass(),
370 SurfaceFactory::DrawCallback()); 437 SurfaceFactory::DrawCallback());
371 } 438 }
372 439
440 EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_));
441 EXPECT_FALSE(surface_aggregator_client_.HasSurface(embedded_surface));
442
373 scoped_ptr<CompositorFrame> aggregated_frame = 443 scoped_ptr<CompositorFrame> aggregated_frame =
374 aggregator_.Aggregate(root_surface_id_); 444 aggregator_.Aggregate(root_surface_id_);
375 445
446 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
447 EXPECT_TRUE(surface_aggregator_client_.HasSurface(embedded_surface));
448
376 ASSERT_TRUE(aggregated_frame); 449 ASSERT_TRUE(aggregated_frame);
377 ASSERT_TRUE(aggregated_frame->delegated_frame_data); 450 ASSERT_TRUE(aggregated_frame->delegated_frame_data);
378 451
379 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); 452 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get();
380 453
381 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), 454 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE),
382 test::Quad::SolidColorQuad(SK_ColorGREEN), 455 test::Quad::SolidColorQuad(SK_ColorGREEN),
383 test::Quad::SolidColorQuad(SK_ColorBLACK)}; 456 test::Quad::SolidColorQuad(SK_ColorBLACK)};
384 test::Pass expected_passes[] = { 457 test::Pass expected_passes[] = {
385 test::Pass(expected_quads, arraysize(expected_quads)), 458 test::Pass(expected_quads, arraysize(expected_quads)),
(...skipping 27 matching lines...) Expand all
413 DCHECK(original_pass_list[0]->copy_requests.empty()); 486 DCHECK(original_pass_list[0]->copy_requests.empty());
414 DCHECK(original_pass_list[1]->copy_requests.empty()); 487 DCHECK(original_pass_list[1]->copy_requests.empty());
415 488
416 factory_.Destroy(embedded_surface_id); 489 factory_.Destroy(embedded_surface_id);
417 } 490 }
418 491
419 // This tests referencing a surface that has multiple render passes. 492 // This tests referencing a surface that has multiple render passes.
420 TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassSurfaceReference) { 493 TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassSurfaceReference) {
421 SurfaceId embedded_surface_id = child_allocator_.GenerateId(); 494 SurfaceId embedded_surface_id = child_allocator_.GenerateId();
422 factory_.Create(embedded_surface_id); 495 factory_.Create(embedded_surface_id);
496 Surface* embedded_surface = manager_.GetSurfaceForId(embedded_surface_id);
497 EXPECT_FALSE(surface_aggregator_client_.HasSurface(embedded_surface));
423 498
424 RenderPassId pass_ids[] = {RenderPassId(1, 1), RenderPassId(1, 2), 499 RenderPassId pass_ids[] = {RenderPassId(1, 1), RenderPassId(1, 2),
425 RenderPassId(1, 3)}; 500 RenderPassId(1, 3)};
426 501
427 test::Quad embedded_quads[][2] = { 502 test::Quad embedded_quads[][2] = {
428 {test::Quad::SolidColorQuad(1), test::Quad::SolidColorQuad(2)}, 503 {test::Quad::SolidColorQuad(1), test::Quad::SolidColorQuad(2)},
429 {test::Quad::SolidColorQuad(3), test::Quad::RenderPassQuad(pass_ids[0])}, 504 {test::Quad::SolidColorQuad(3), test::Quad::RenderPassQuad(pass_ids[0])},
430 {test::Quad::SolidColorQuad(4), test::Quad::RenderPassQuad(pass_ids[1])}}; 505 {test::Quad::SolidColorQuad(4), test::Quad::RenderPassQuad(pass_ids[1])}};
431 test::Pass embedded_passes[] = { 506 test::Pass embedded_passes[] = {
432 test::Pass(embedded_quads[0], arraysize(embedded_quads[0]), pass_ids[0]), 507 test::Pass(embedded_quads[0], arraysize(embedded_quads[0]), pass_ids[0]),
433 test::Pass(embedded_quads[1], arraysize(embedded_quads[1]), pass_ids[1]), 508 test::Pass(embedded_quads[1], arraysize(embedded_quads[1]), pass_ids[1]),
434 test::Pass(embedded_quads[2], arraysize(embedded_quads[2]), pass_ids[2])}; 509 test::Pass(embedded_quads[2], arraysize(embedded_quads[2]), pass_ids[2])};
435 510
436 SubmitCompositorFrame(embedded_passes, arraysize(embedded_passes), 511 SubmitCompositorFrame(embedded_passes, arraysize(embedded_passes),
437 embedded_surface_id); 512 embedded_surface_id);
438 513
439 test::Quad root_quads[][2] = { 514 test::Quad root_quads[][2] = {
440 {test::Quad::SolidColorQuad(5), test::Quad::SolidColorQuad(6)}, 515 {test::Quad::SolidColorQuad(5), test::Quad::SolidColorQuad(6)},
441 {test::Quad::SurfaceQuad(embedded_surface_id, 1.f), 516 {test::Quad::SurfaceQuad(embedded_surface_id, 1.f),
442 test::Quad::RenderPassQuad(pass_ids[0])}, 517 test::Quad::RenderPassQuad(pass_ids[0])},
443 {test::Quad::SolidColorQuad(7), test::Quad::RenderPassQuad(pass_ids[1])}}; 518 {test::Quad::SolidColorQuad(7), test::Quad::RenderPassQuad(pass_ids[1])}};
444 test::Pass root_passes[] = { 519 test::Pass root_passes[] = {
445 test::Pass(root_quads[0], arraysize(root_quads[0]), pass_ids[0]), 520 test::Pass(root_quads[0], arraysize(root_quads[0]), pass_ids[0]),
446 test::Pass(root_quads[1], arraysize(root_quads[1]), pass_ids[1]), 521 test::Pass(root_quads[1], arraysize(root_quads[1]), pass_ids[1]),
447 test::Pass(root_quads[2], arraysize(root_quads[2]), pass_ids[2])}; 522 test::Pass(root_quads[2], arraysize(root_quads[2]), pass_ids[2])};
448 523
449 SubmitCompositorFrame(root_passes, arraysize(root_passes), root_surface_id_); 524 SubmitCompositorFrame(root_passes, arraysize(root_passes), root_surface_id_);
450 525
526 EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_));
527 EXPECT_FALSE(surface_aggregator_client_.HasSurface(embedded_surface));
528
451 scoped_ptr<CompositorFrame> aggregated_frame = 529 scoped_ptr<CompositorFrame> aggregated_frame =
452 aggregator_.Aggregate(root_surface_id_); 530 aggregator_.Aggregate(root_surface_id_);
453 531
532 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
533 EXPECT_TRUE(surface_aggregator_client_.HasSurface(embedded_surface));
534
454 ASSERT_TRUE(aggregated_frame); 535 ASSERT_TRUE(aggregated_frame);
455 ASSERT_TRUE(aggregated_frame->delegated_frame_data); 536 ASSERT_TRUE(aggregated_frame->delegated_frame_data);
456 537
457 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); 538 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get();
458 539
459 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; 540 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list;
460 541
461 ASSERT_EQ(5u, aggregated_pass_list.size()); 542 ASSERT_EQ(5u, aggregated_pass_list.size());
462 RenderPassId actual_pass_ids[] = { 543 RenderPassId actual_pass_ids[] = {
463 aggregated_pass_list[0]->id, aggregated_pass_list[1]->id, 544 aggregated_pass_list[0]->id, aggregated_pass_list[1]->id,
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
563 test::Quad::SolidColorQuad(SK_ColorBLUE)}; 644 test::Quad::SolidColorQuad(SK_ColorBLUE)};
564 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; 645 test::Pass passes[] = {test::Pass(quads, arraysize(quads))};
565 646
566 SubmitCompositorFrame(passes, arraysize(passes), root_surface_id_); 647 SubmitCompositorFrame(passes, arraysize(passes), root_surface_id_);
567 648
568 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), 649 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN),
569 test::Quad::SolidColorQuad(SK_ColorBLUE)}; 650 test::Quad::SolidColorQuad(SK_ColorBLUE)};
570 test::Pass expected_passes[] = { 651 test::Pass expected_passes[] = {
571 test::Pass(expected_quads, arraysize(expected_quads))}; 652 test::Pass(expected_quads, arraysize(expected_quads))};
572 SurfaceId ids[] = {root_surface_id_, InvalidSurfaceId()}; 653 SurfaceId ids[] = {root_surface_id_, InvalidSurfaceId()};
654
655 EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_));
573 AggregateAndVerify( 656 AggregateAndVerify(
574 expected_passes, arraysize(expected_passes), ids, arraysize(ids)); 657 expected_passes, arraysize(expected_passes), ids, arraysize(ids));
658 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
575 } 659 }
576 660
577 // Tests a reference to a valid surface with no submitted frame. This quad 661 // Tests a reference to a valid surface with no submitted frame. This quad
578 // should also just be dropped. 662 // should also just be dropped.
579 TEST_F(SurfaceAggregatorValidSurfaceTest, ValidSurfaceReferenceWithNoFrame) { 663 TEST_F(SurfaceAggregatorValidSurfaceTest, ValidSurfaceReferenceWithNoFrame) {
580 SurfaceId surface_with_no_frame_id = allocator_.GenerateId(); 664 SurfaceId surface_with_no_frame_id = allocator_.GenerateId();
581 factory_.Create(surface_with_no_frame_id); 665 factory_.Create(surface_with_no_frame_id);
666 Surface* surface_with_no_frame =
667 manager_.GetSurfaceForId(surface_with_no_frame_id);
668
582 test::Quad quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), 669 test::Quad quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN),
583 test::Quad::SurfaceQuad(surface_with_no_frame_id, 1.f), 670 test::Quad::SurfaceQuad(surface_with_no_frame_id, 1.f),
584 test::Quad::SolidColorQuad(SK_ColorBLUE)}; 671 test::Quad::SolidColorQuad(SK_ColorBLUE)};
585 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; 672 test::Pass passes[] = {test::Pass(quads, arraysize(quads))};
586 673
587 SubmitCompositorFrame(passes, arraysize(passes), root_surface_id_); 674 SubmitCompositorFrame(passes, arraysize(passes), root_surface_id_);
588 675
589 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), 676 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN),
590 test::Quad::SolidColorQuad(SK_ColorBLUE)}; 677 test::Quad::SolidColorQuad(SK_ColorBLUE)};
591 test::Pass expected_passes[] = { 678 test::Pass expected_passes[] = {
592 test::Pass(expected_quads, arraysize(expected_quads))}; 679 test::Pass(expected_quads, arraysize(expected_quads))};
593 SurfaceId ids[] = {root_surface_id_, surface_with_no_frame_id}; 680 SurfaceId ids[] = {root_surface_id_, surface_with_no_frame_id};
681 EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_));
682 EXPECT_FALSE(surface_aggregator_client_.HasSurface(surface_with_no_frame));
594 AggregateAndVerify( 683 AggregateAndVerify(
595 expected_passes, arraysize(expected_passes), ids, arraysize(ids)); 684 expected_passes, arraysize(expected_passes), ids, arraysize(ids));
685 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
686 EXPECT_TRUE(surface_aggregator_client_.HasSurface(surface_with_no_frame));
596 factory_.Destroy(surface_with_no_frame_id); 687 factory_.Destroy(surface_with_no_frame_id);
597 } 688 }
598 689
599 // Tests a surface quad referencing itself, generating a trivial cycle. 690 // Tests a surface quad referencing itself, generating a trivial cycle.
600 // The quad creating the cycle should be dropped from the final frame. 691 // The quad creating the cycle should be dropped from the final frame.
601 TEST_F(SurfaceAggregatorValidSurfaceTest, SimpleCyclicalReference) { 692 TEST_F(SurfaceAggregatorValidSurfaceTest, SimpleCyclicalReference) {
602 test::Quad quads[] = {test::Quad::SurfaceQuad(root_surface_id_, 1.f), 693 test::Quad quads[] = {test::Quad::SurfaceQuad(root_surface_id_, 1.f),
603 test::Quad::SolidColorQuad(SK_ColorYELLOW)}; 694 test::Quad::SolidColorQuad(SK_ColorYELLOW)};
604 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; 695 test::Pass passes[] = {test::Pass(quads, arraysize(quads))};
605 696
606 SubmitCompositorFrame(passes, arraysize(passes), root_surface_id_); 697 SubmitCompositorFrame(passes, arraysize(passes), root_surface_id_);
607 698
608 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorYELLOW)}; 699 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorYELLOW)};
609 test::Pass expected_passes[] = { 700 test::Pass expected_passes[] = {
610 test::Pass(expected_quads, arraysize(expected_quads))}; 701 test::Pass(expected_quads, arraysize(expected_quads))};
611 SurfaceId ids[] = {root_surface_id_}; 702 SurfaceId ids[] = {root_surface_id_};
703 EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_));
612 AggregateAndVerify( 704 AggregateAndVerify(
613 expected_passes, arraysize(expected_passes), ids, arraysize(ids)); 705 expected_passes, arraysize(expected_passes), ids, arraysize(ids));
706 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
614 } 707 }
615 708
616 // Tests a more complex cycle with one intermediate surface. 709 // Tests a more complex cycle with one intermediate surface.
617 TEST_F(SurfaceAggregatorValidSurfaceTest, TwoSurfaceCyclicalReference) { 710 TEST_F(SurfaceAggregatorValidSurfaceTest, TwoSurfaceCyclicalReference) {
618 SurfaceId child_surface_id = allocator_.GenerateId(); 711 SurfaceId child_surface_id = allocator_.GenerateId();
619 factory_.Create(child_surface_id); 712 factory_.Create(child_surface_id);
713 Surface* child_surface = manager_.GetSurfaceForId(child_surface_id);
714 EXPECT_FALSE(surface_aggregator_client_.HasSurface(child_surface));
620 715
621 test::Quad parent_quads[] = {test::Quad::SolidColorQuad(SK_ColorBLUE), 716 test::Quad parent_quads[] = {test::Quad::SolidColorQuad(SK_ColorBLUE),
622 test::Quad::SurfaceQuad(child_surface_id, 1.f), 717 test::Quad::SurfaceQuad(child_surface_id, 1.f),
623 test::Quad::SolidColorQuad(SK_ColorCYAN)}; 718 test::Quad::SolidColorQuad(SK_ColorCYAN)};
624 test::Pass parent_passes[] = { 719 test::Pass parent_passes[] = {
625 test::Pass(parent_quads, arraysize(parent_quads))}; 720 test::Pass(parent_quads, arraysize(parent_quads))};
626 721
627 SubmitCompositorFrame(parent_passes, arraysize(parent_passes), 722 SubmitCompositorFrame(parent_passes, arraysize(parent_passes),
628 root_surface_id_); 723 root_surface_id_);
629 724
(...skipping 11 matching lines...) Expand all
641 // SK_ColorGREEN from the child 736 // SK_ColorGREEN from the child
642 // SK_ColorMAGENTA from the child 737 // SK_ColorMAGENTA from the child
643 // SK_ColorCYAN from the parent 738 // SK_ColorCYAN from the parent
644 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorBLUE), 739 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorBLUE),
645 test::Quad::SolidColorQuad(SK_ColorGREEN), 740 test::Quad::SolidColorQuad(SK_ColorGREEN),
646 test::Quad::SolidColorQuad(SK_ColorMAGENTA), 741 test::Quad::SolidColorQuad(SK_ColorMAGENTA),
647 test::Quad::SolidColorQuad(SK_ColorCYAN)}; 742 test::Quad::SolidColorQuad(SK_ColorCYAN)};
648 test::Pass expected_passes[] = { 743 test::Pass expected_passes[] = {
649 test::Pass(expected_quads, arraysize(expected_quads))}; 744 test::Pass(expected_quads, arraysize(expected_quads))};
650 SurfaceId ids[] = {root_surface_id_, child_surface_id}; 745 SurfaceId ids[] = {root_surface_id_, child_surface_id};
746 EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_));
747 EXPECT_FALSE(surface_aggregator_client_.HasSurface(child_surface));
651 AggregateAndVerify( 748 AggregateAndVerify(
652 expected_passes, arraysize(expected_passes), ids, arraysize(ids)); 749 expected_passes, arraysize(expected_passes), ids, arraysize(ids));
750 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
751 EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface));
653 factory_.Destroy(child_surface_id); 752 factory_.Destroy(child_surface_id);
654 } 753 }
655 754
656 // Tests that we map render pass IDs from different surfaces into a unified 755 // Tests that we map render pass IDs from different surfaces into a unified
657 // namespace and update RenderPassDrawQuad's id references to match. 756 // namespace and update RenderPassDrawQuad's id references to match.
658 TEST_F(SurfaceAggregatorValidSurfaceTest, RenderPassIdMapping) { 757 TEST_F(SurfaceAggregatorValidSurfaceTest, RenderPassIdMapping) {
659 SurfaceId child_surface_id = allocator_.GenerateId(); 758 SurfaceId child_surface_id = allocator_.GenerateId();
660 factory_.Create(child_surface_id); 759 factory_.Create(child_surface_id);
760 Surface* child_surface = manager_.GetSurfaceForId(child_surface_id);
761 EXPECT_FALSE(surface_aggregator_client_.HasSurface(child_surface));
661 762
662 RenderPassId child_pass_id[] = {RenderPassId(1, 1), RenderPassId(1, 2)}; 763 RenderPassId child_pass_id[] = {RenderPassId(1, 1), RenderPassId(1, 2)};
663 test::Quad child_quad[][1] = {{test::Quad::SolidColorQuad(SK_ColorGREEN)}, 764 test::Quad child_quad[][1] = {{test::Quad::SolidColorQuad(SK_ColorGREEN)},
664 {test::Quad::RenderPassQuad(child_pass_id[0])}}; 765 {test::Quad::RenderPassQuad(child_pass_id[0])}};
665 test::Pass surface_passes[] = { 766 test::Pass surface_passes[] = {
666 test::Pass(child_quad[0], arraysize(child_quad[0]), child_pass_id[0]), 767 test::Pass(child_quad[0], arraysize(child_quad[0]), child_pass_id[0]),
667 test::Pass(child_quad[1], arraysize(child_quad[1]), child_pass_id[1])}; 768 test::Pass(child_quad[1], arraysize(child_quad[1]), child_pass_id[1])};
668 769
669 SubmitCompositorFrame(surface_passes, arraysize(surface_passes), 770 SubmitCompositorFrame(surface_passes, arraysize(surface_passes),
670 child_surface_id); 771 child_surface_id);
671 772
672 // Pass IDs from the parent surface may collide with ones from the child. 773 // Pass IDs from the parent surface may collide with ones from the child.
673 RenderPassId parent_pass_id[] = {RenderPassId(2, 1), RenderPassId(1, 2)}; 774 RenderPassId parent_pass_id[] = {RenderPassId(2, 1), RenderPassId(1, 2)};
674 test::Quad parent_quad[][1] = { 775 test::Quad parent_quad[][1] = {
675 {test::Quad::SurfaceQuad(child_surface_id, 1.f)}, 776 {test::Quad::SurfaceQuad(child_surface_id, 1.f)},
676 {test::Quad::RenderPassQuad(parent_pass_id[0])}}; 777 {test::Quad::RenderPassQuad(parent_pass_id[0])}};
677 test::Pass parent_passes[] = { 778 test::Pass parent_passes[] = {
678 test::Pass(parent_quad[0], arraysize(parent_quad[0]), parent_pass_id[0]), 779 test::Pass(parent_quad[0], arraysize(parent_quad[0]), parent_pass_id[0]),
679 test::Pass(parent_quad[1], arraysize(parent_quad[1]), parent_pass_id[1])}; 780 test::Pass(parent_quad[1], arraysize(parent_quad[1]), parent_pass_id[1])};
680 781
681 SubmitCompositorFrame(parent_passes, arraysize(parent_passes), 782 SubmitCompositorFrame(parent_passes, arraysize(parent_passes),
682 root_surface_id_); 783 root_surface_id_);
784
785 EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_));
786 EXPECT_FALSE(surface_aggregator_client_.HasSurface(child_surface));
787
683 scoped_ptr<CompositorFrame> aggregated_frame = 788 scoped_ptr<CompositorFrame> aggregated_frame =
684 aggregator_.Aggregate(root_surface_id_); 789 aggregator_.Aggregate(root_surface_id_);
685 790
791 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
792 EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface));
793
686 ASSERT_TRUE(aggregated_frame); 794 ASSERT_TRUE(aggregated_frame);
687 ASSERT_TRUE(aggregated_frame->delegated_frame_data); 795 ASSERT_TRUE(aggregated_frame->delegated_frame_data);
688 796
689 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); 797 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get();
690 798
691 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; 799 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list;
692 800
693 ASSERT_EQ(3u, aggregated_pass_list.size()); 801 ASSERT_EQ(3u, aggregated_pass_list.size());
694 RenderPassId actual_pass_ids[] = {aggregated_pass_list[0]->id, 802 RenderPassId actual_pass_ids[] = {aggregated_pass_list[0]->id,
695 aggregated_pass_list[1]->id, 803 aggregated_pass_list[1]->id,
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
773 SkXfermode::kDst_Mode, // 2 881 SkXfermode::kDst_Mode, // 2
774 SkXfermode::kSrcOver_Mode, // 3 882 SkXfermode::kSrcOver_Mode, // 3
775 SkXfermode::kDstOver_Mode, // 4 883 SkXfermode::kDstOver_Mode, // 4
776 SkXfermode::kSrcIn_Mode, // 5 884 SkXfermode::kSrcIn_Mode, // 5
777 SkXfermode::kDstIn_Mode, // 6 885 SkXfermode::kDstIn_Mode, // 6
778 }; 886 };
779 887
780 RenderPassId pass_id(1, 1); 888 RenderPassId pass_id(1, 1);
781 SurfaceId grandchild_surface_id = allocator_.GenerateId(); 889 SurfaceId grandchild_surface_id = allocator_.GenerateId();
782 factory_.Create(grandchild_surface_id); 890 factory_.Create(grandchild_surface_id);
891 Surface* grandchild_surface = manager_.GetSurfaceForId(grandchild_surface_id);
892 EXPECT_FALSE(surface_aggregator_client_.HasSurface(grandchild_surface));
783 scoped_ptr<RenderPass> grandchild_pass = RenderPass::Create(); 893 scoped_ptr<RenderPass> grandchild_pass = RenderPass::Create();
784 gfx::Rect output_rect(SurfaceSize()); 894 gfx::Rect output_rect(SurfaceSize());
785 gfx::Rect damage_rect(SurfaceSize()); 895 gfx::Rect damage_rect(SurfaceSize());
786 gfx::Transform transform_to_root_target; 896 gfx::Transform transform_to_root_target;
787 grandchild_pass->SetNew( 897 grandchild_pass->SetNew(
788 pass_id, output_rect, damage_rect, transform_to_root_target); 898 pass_id, output_rect, damage_rect, transform_to_root_target);
789 AddSolidColorQuadWithBlendMode( 899 AddSolidColorQuadWithBlendMode(
790 SurfaceSize(), grandchild_pass.get(), blend_modes[2]); 900 SurfaceSize(), grandchild_pass.get(), blend_modes[2]);
791 QueuePassAsFrame(grandchild_pass.Pass(), grandchild_surface_id); 901 QueuePassAsFrame(grandchild_pass.Pass(), grandchild_surface_id);
792 902
793 SurfaceId child_one_surface_id = allocator_.GenerateId(); 903 SurfaceId child_one_surface_id = allocator_.GenerateId();
794 factory_.Create(child_one_surface_id); 904 factory_.Create(child_one_surface_id);
905 Surface* child_one_surface = manager_.GetSurfaceForId(child_one_surface_id);
906 EXPECT_FALSE(surface_aggregator_client_.HasSurface(child_one_surface));
795 907
796 scoped_ptr<RenderPass> child_one_pass = RenderPass::Create(); 908 scoped_ptr<RenderPass> child_one_pass = RenderPass::Create();
797 child_one_pass->SetNew( 909 child_one_pass->SetNew(
798 pass_id, output_rect, damage_rect, transform_to_root_target); 910 pass_id, output_rect, damage_rect, transform_to_root_target);
799 AddSolidColorQuadWithBlendMode( 911 AddSolidColorQuadWithBlendMode(
800 SurfaceSize(), child_one_pass.get(), blend_modes[1]); 912 SurfaceSize(), child_one_pass.get(), blend_modes[1]);
801 SurfaceDrawQuad* grandchild_surface_quad = 913 SurfaceDrawQuad* grandchild_surface_quad =
802 child_one_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); 914 child_one_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>();
803 grandchild_surface_quad->SetNew(child_one_pass->shared_quad_state_list.back(), 915 grandchild_surface_quad->SetNew(child_one_pass->shared_quad_state_list.back(),
804 gfx::Rect(SurfaceSize()), 916 gfx::Rect(SurfaceSize()),
805 gfx::Rect(SurfaceSize()), 917 gfx::Rect(SurfaceSize()),
806 grandchild_surface_id); 918 grandchild_surface_id);
807 AddSolidColorQuadWithBlendMode( 919 AddSolidColorQuadWithBlendMode(
808 SurfaceSize(), child_one_pass.get(), blend_modes[3]); 920 SurfaceSize(), child_one_pass.get(), blend_modes[3]);
809 QueuePassAsFrame(child_one_pass.Pass(), child_one_surface_id); 921 QueuePassAsFrame(child_one_pass.Pass(), child_one_surface_id);
810 922
811 SurfaceId child_two_surface_id = allocator_.GenerateId(); 923 SurfaceId child_two_surface_id = allocator_.GenerateId();
812 factory_.Create(child_two_surface_id); 924 factory_.Create(child_two_surface_id);
925 Surface* child_two_surface = manager_.GetSurfaceForId(child_two_surface_id);
926 EXPECT_FALSE(surface_aggregator_client_.HasSurface(child_two_surface));
813 927
814 scoped_ptr<RenderPass> child_two_pass = RenderPass::Create(); 928 scoped_ptr<RenderPass> child_two_pass = RenderPass::Create();
815 child_two_pass->SetNew( 929 child_two_pass->SetNew(
816 pass_id, output_rect, damage_rect, transform_to_root_target); 930 pass_id, output_rect, damage_rect, transform_to_root_target);
817 AddSolidColorQuadWithBlendMode( 931 AddSolidColorQuadWithBlendMode(
818 SurfaceSize(), child_two_pass.get(), blend_modes[5]); 932 SurfaceSize(), child_two_pass.get(), blend_modes[5]);
819 QueuePassAsFrame(child_two_pass.Pass(), child_two_surface_id); 933 QueuePassAsFrame(child_two_pass.Pass(), child_two_surface_id);
820 934
821 scoped_ptr<RenderPass> root_pass = RenderPass::Create(); 935 scoped_ptr<RenderPass> root_pass = RenderPass::Create();
822 root_pass->SetNew( 936 root_pass->SetNew(
(...skipping 13 matching lines...) Expand all
836 root_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); 950 root_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>();
837 child_two_surface_quad->SetNew(root_pass->shared_quad_state_list.back(), 951 child_two_surface_quad->SetNew(root_pass->shared_quad_state_list.back(),
838 gfx::Rect(SurfaceSize()), 952 gfx::Rect(SurfaceSize()),
839 gfx::Rect(SurfaceSize()), 953 gfx::Rect(SurfaceSize()),
840 child_two_surface_id); 954 child_two_surface_id);
841 AddSolidColorQuadWithBlendMode( 955 AddSolidColorQuadWithBlendMode(
842 SurfaceSize(), root_pass.get(), blend_modes[6]); 956 SurfaceSize(), root_pass.get(), blend_modes[6]);
843 957
844 QueuePassAsFrame(root_pass.Pass(), root_surface_id_); 958 QueuePassAsFrame(root_pass.Pass(), root_surface_id_);
845 959
960 EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_));
961 EXPECT_FALSE(surface_aggregator_client_.HasSurface(grandchild_surface));
962 EXPECT_FALSE(surface_aggregator_client_.HasSurface(child_one_surface));
963 EXPECT_FALSE(surface_aggregator_client_.HasSurface(child_two_surface));
964
846 scoped_ptr<CompositorFrame> aggregated_frame = 965 scoped_ptr<CompositorFrame> aggregated_frame =
847 aggregator_.Aggregate(root_surface_id_); 966 aggregator_.Aggregate(root_surface_id_);
848 967
968 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
969 EXPECT_TRUE(surface_aggregator_client_.HasSurface(grandchild_surface));
970 EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_one_surface));
971 EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_two_surface));
972
849 ASSERT_TRUE(aggregated_frame); 973 ASSERT_TRUE(aggregated_frame);
850 ASSERT_TRUE(aggregated_frame->delegated_frame_data); 974 ASSERT_TRUE(aggregated_frame->delegated_frame_data);
851 975
852 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); 976 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get();
853 977
854 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; 978 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list;
855 979
856 ASSERT_EQ(1u, aggregated_pass_list.size()); 980 ASSERT_EQ(1u, aggregated_pass_list.size());
857 981
858 const QuadList& aggregated_quad_list = aggregated_pass_list[0]->quad_list; 982 const QuadList& aggregated_quad_list = aggregated_pass_list[0]->quad_list;
(...skipping 25 matching lines...) Expand all
884 // of +5 in the x direction. The second pass has a reference to the first pass' 1008 // of +5 in the x direction. The second pass has a reference to the first pass'
885 // pass id and a transform of +8 in the x direction. 1009 // pass id and a transform of +8 in the x direction.
886 // 1010 //
887 // After aggregation, the child surface's root pass quad should have all 1011 // After aggregation, the child surface's root pass quad should have all
888 // transforms concatenated for a total transform of +23 x, +10 y. The 1012 // transforms concatenated for a total transform of +23 x, +10 y. The
889 // contributing render pass' transform in the aggregate frame should not be 1013 // contributing render pass' transform in the aggregate frame should not be
890 // affected. 1014 // affected.
891 TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateMultiplePassWithTransform) { 1015 TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateMultiplePassWithTransform) {
892 // Innermost child surface. 1016 // Innermost child surface.
893 SurfaceId child_surface_id = allocator_.GenerateId(); 1017 SurfaceId child_surface_id = allocator_.GenerateId();
1018 factory_.Create(child_surface_id);
1019 Surface* child_surface = manager_.GetSurfaceForId(child_surface_id);
1020 EXPECT_FALSE(surface_aggregator_client_.HasSurface(child_surface));
894 { 1021 {
895 factory_.Create(child_surface_id);
896 RenderPassId child_pass_id[] = {RenderPassId(1, 1), RenderPassId(1, 2)}; 1022 RenderPassId child_pass_id[] = {RenderPassId(1, 1), RenderPassId(1, 2)};
897 test::Quad child_quads[][1] = { 1023 test::Quad child_quads[][1] = {
898 {test::Quad::SolidColorQuad(SK_ColorGREEN)}, 1024 {test::Quad::SolidColorQuad(SK_ColorGREEN)},
899 {test::Quad::RenderPassQuad(child_pass_id[0])}, 1025 {test::Quad::RenderPassQuad(child_pass_id[0])},
900 }; 1026 };
901 test::Pass child_passes[] = { 1027 test::Pass child_passes[] = {
902 test::Pass(child_quads[0], arraysize(child_quads[0]), child_pass_id[0]), 1028 test::Pass(child_quads[0], arraysize(child_quads[0]), child_pass_id[0]),
903 test::Pass(child_quads[1], arraysize(child_quads[1]), 1029 test::Pass(child_quads[1], arraysize(child_quads[1]),
904 child_pass_id[1])}; 1030 child_pass_id[1])};
905 1031
(...skipping 19 matching lines...) Expand all
925 1051
926 scoped_ptr<CompositorFrame> child_frame(new CompositorFrame); 1052 scoped_ptr<CompositorFrame> child_frame(new CompositorFrame);
927 child_frame->delegated_frame_data = child_frame_data.Pass(); 1053 child_frame->delegated_frame_data = child_frame_data.Pass();
928 1054
929 factory_.SubmitCompositorFrame(child_surface_id, child_frame.Pass(), 1055 factory_.SubmitCompositorFrame(child_surface_id, child_frame.Pass(),
930 SurfaceFactory::DrawCallback()); 1056 SurfaceFactory::DrawCallback());
931 } 1057 }
932 1058
933 // Middle child surface. 1059 // Middle child surface.
934 SurfaceId middle_surface_id = allocator_.GenerateId(); 1060 SurfaceId middle_surface_id = allocator_.GenerateId();
1061 factory_.Create(middle_surface_id);
1062 Surface* middle_surface = manager_.GetSurfaceForId(middle_surface_id);
1063 EXPECT_FALSE(surface_aggregator_client_.HasSurface(middle_surface));
935 { 1064 {
936 factory_.Create(middle_surface_id);
937 test::Quad middle_quads[] = { 1065 test::Quad middle_quads[] = {
938 test::Quad::SurfaceQuad(child_surface_id, 1.f)}; 1066 test::Quad::SurfaceQuad(child_surface_id, 1.f)};
939 test::Pass middle_passes[] = { 1067 test::Pass middle_passes[] = {
940 test::Pass(middle_quads, arraysize(middle_quads)), 1068 test::Pass(middle_quads, arraysize(middle_quads)),
941 }; 1069 };
942 1070
943 RenderPassList middle_pass_list; 1071 RenderPassList middle_pass_list;
944 AddPasses(&middle_pass_list, gfx::Rect(SurfaceSize()), middle_passes, 1072 AddPasses(&middle_pass_list, gfx::Rect(SurfaceSize()), middle_passes,
945 arraysize(middle_passes)); 1073 arraysize(middle_passes));
946 1074
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
989 1117
990 scoped_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData); 1118 scoped_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData);
991 root_pass_list.swap(root_frame_data->render_pass_list); 1119 root_pass_list.swap(root_frame_data->render_pass_list);
992 1120
993 scoped_ptr<CompositorFrame> root_frame(new CompositorFrame); 1121 scoped_ptr<CompositorFrame> root_frame(new CompositorFrame);
994 root_frame->delegated_frame_data = root_frame_data.Pass(); 1122 root_frame->delegated_frame_data = root_frame_data.Pass();
995 1123
996 factory_.SubmitCompositorFrame(root_surface_id_, root_frame.Pass(), 1124 factory_.SubmitCompositorFrame(root_surface_id_, root_frame.Pass(),
997 SurfaceFactory::DrawCallback()); 1125 SurfaceFactory::DrawCallback());
998 1126
1127 EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_));
1128 EXPECT_FALSE(surface_aggregator_client_.HasSurface(child_surface));
1129 EXPECT_FALSE(surface_aggregator_client_.HasSurface(middle_surface));
1130
999 scoped_ptr<CompositorFrame> aggregated_frame = 1131 scoped_ptr<CompositorFrame> aggregated_frame =
1000 aggregator_.Aggregate(root_surface_id_); 1132 aggregator_.Aggregate(root_surface_id_);
1001 1133
1134 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
1135 EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface));
1136 EXPECT_TRUE(surface_aggregator_client_.HasSurface(middle_surface));
1137
1002 ASSERT_TRUE(aggregated_frame); 1138 ASSERT_TRUE(aggregated_frame);
1003 ASSERT_TRUE(aggregated_frame->delegated_frame_data); 1139 ASSERT_TRUE(aggregated_frame->delegated_frame_data);
1004 1140
1005 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); 1141 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get();
1006 1142
1007 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; 1143 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list;
1008 1144
1009 ASSERT_EQ(3u, aggregated_pass_list.size()); 1145 ASSERT_EQ(3u, aggregated_pass_list.size());
1010 1146
1011 ASSERT_EQ(1u, aggregated_pass_list[0]->shared_quad_state_list.size()); 1147 ASSERT_EQ(1u, aggregated_pass_list[0]->shared_quad_state_list.size());
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
1095 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0); 1231 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0);
1096 1232
1097 scoped_ptr<DelegatedFrameData> child_frame_data(new DelegatedFrameData); 1233 scoped_ptr<DelegatedFrameData> child_frame_data(new DelegatedFrameData);
1098 child_pass_list.swap(child_frame_data->render_pass_list); 1234 child_pass_list.swap(child_frame_data->render_pass_list);
1099 1235
1100 scoped_ptr<CompositorFrame> child_frame(new CompositorFrame); 1236 scoped_ptr<CompositorFrame> child_frame(new CompositorFrame);
1101 child_frame->delegated_frame_data = child_frame_data.Pass(); 1237 child_frame->delegated_frame_data = child_frame_data.Pass();
1102 1238
1103 SurfaceId child_surface_id = allocator_.GenerateId(); 1239 SurfaceId child_surface_id = allocator_.GenerateId();
1104 factory_.Create(child_surface_id); 1240 factory_.Create(child_surface_id);
1241 Surface* child_surface = manager_.GetSurfaceForId(child_surface_id);
1105 factory_.SubmitCompositorFrame(child_surface_id, child_frame.Pass(), 1242 factory_.SubmitCompositorFrame(child_surface_id, child_frame.Pass(),
1106 SurfaceFactory::DrawCallback()); 1243 SurfaceFactory::DrawCallback());
1107 1244
1108 test::Quad parent_surface_quads[] = { 1245 test::Quad parent_surface_quads[] = {
1109 test::Quad::SurfaceQuad(child_surface_id, 1.f)}; 1246 test::Quad::SurfaceQuad(child_surface_id, 1.f)};
1110 test::Pass parent_surface_passes[] = { 1247 test::Pass parent_surface_passes[] = {
1111 test::Pass(parent_surface_quads, arraysize(parent_surface_quads), 1248 test::Pass(parent_surface_quads, arraysize(parent_surface_quads),
1112 RenderPassId(1, 1))}; 1249 RenderPassId(1, 1))};
1113 1250
1114 RenderPassList parent_surface_pass_list; 1251 RenderPassList parent_surface_pass_list;
1115 AddPasses(&parent_surface_pass_list, 1252 AddPasses(&parent_surface_pass_list,
1116 gfx::Rect(SurfaceSize()), 1253 gfx::Rect(SurfaceSize()),
1117 parent_surface_passes, 1254 parent_surface_passes,
1118 arraysize(parent_surface_passes)); 1255 arraysize(parent_surface_passes));
1119 1256
1120 // Parent surface is only used to test if the transform is applied correctly 1257 // Parent surface is only used to test if the transform is applied correctly
1121 // to the child surface's damage. 1258 // to the child surface's damage.
1122 scoped_ptr<DelegatedFrameData> parent_surface_frame_data( 1259 scoped_ptr<DelegatedFrameData> parent_surface_frame_data(
1123 new DelegatedFrameData); 1260 new DelegatedFrameData);
1124 parent_surface_pass_list.swap(parent_surface_frame_data->render_pass_list); 1261 parent_surface_pass_list.swap(parent_surface_frame_data->render_pass_list);
1125 1262
1126 scoped_ptr<CompositorFrame> parent_surface_frame(new CompositorFrame); 1263 scoped_ptr<CompositorFrame> parent_surface_frame(new CompositorFrame);
1127 parent_surface_frame->delegated_frame_data = parent_surface_frame_data.Pass(); 1264 parent_surface_frame->delegated_frame_data = parent_surface_frame_data.Pass();
1128 1265
1129 SurfaceId parent_surface_id = allocator_.GenerateId(); 1266 SurfaceId parent_surface_id = allocator_.GenerateId();
1130 factory_.Create(parent_surface_id); 1267 factory_.Create(parent_surface_id);
1268 Surface* parent_surface = manager_.GetSurfaceForId(parent_surface_id);
1131 factory_.SubmitCompositorFrame(parent_surface_id, parent_surface_frame.Pass(), 1269 factory_.SubmitCompositorFrame(parent_surface_id, parent_surface_frame.Pass(),
1132 SurfaceFactory::DrawCallback()); 1270 SurfaceFactory::DrawCallback());
1133 1271
1134 test::Quad root_surface_quads[] = { 1272 test::Quad root_surface_quads[] = {
1135 test::Quad::SurfaceQuad(parent_surface_id, 1.f)}; 1273 test::Quad::SurfaceQuad(parent_surface_id, 1.f)};
1136 test::Quad root_render_pass_quads[] = { 1274 test::Quad root_render_pass_quads[] = {
1137 test::Quad::RenderPassQuad(RenderPassId(1, 1))}; 1275 test::Quad::RenderPassQuad(RenderPassId(1, 1))};
1138 1276
1139 test::Pass root_passes[] = { 1277 test::Pass root_passes[] = {
1140 test::Pass(root_surface_quads, arraysize(root_surface_quads), 1278 test::Pass(root_surface_quads, arraysize(root_surface_quads),
(...skipping 15 matching lines...) Expand all
1156 1294
1157 scoped_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData); 1295 scoped_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData);
1158 root_pass_list.swap(root_frame_data->render_pass_list); 1296 root_pass_list.swap(root_frame_data->render_pass_list);
1159 1297
1160 scoped_ptr<CompositorFrame> root_frame(new CompositorFrame); 1298 scoped_ptr<CompositorFrame> root_frame(new CompositorFrame);
1161 root_frame->delegated_frame_data = root_frame_data.Pass(); 1299 root_frame->delegated_frame_data = root_frame_data.Pass();
1162 1300
1163 factory_.SubmitCompositorFrame(root_surface_id_, root_frame.Pass(), 1301 factory_.SubmitCompositorFrame(root_surface_id_, root_frame.Pass(),
1164 SurfaceFactory::DrawCallback()); 1302 SurfaceFactory::DrawCallback());
1165 1303
1304 EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_));
1305 EXPECT_FALSE(surface_aggregator_client_.HasSurface(child_surface));
1306 EXPECT_FALSE(surface_aggregator_client_.HasSurface(parent_surface));
1307
1166 scoped_ptr<CompositorFrame> aggregated_frame = 1308 scoped_ptr<CompositorFrame> aggregated_frame =
1167 aggregator_.Aggregate(root_surface_id_); 1309 aggregator_.Aggregate(root_surface_id_);
1168 1310
1311 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
1312 EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface));
1313 EXPECT_TRUE(surface_aggregator_client_.HasSurface(parent_surface));
1314
1169 ASSERT_TRUE(aggregated_frame); 1315 ASSERT_TRUE(aggregated_frame);
1170 ASSERT_TRUE(aggregated_frame->delegated_frame_data); 1316 ASSERT_TRUE(aggregated_frame->delegated_frame_data);
1171 1317
1172 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); 1318 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get();
1173 1319
1174 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; 1320 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list;
1175 1321
1176 ASSERT_EQ(2u, aggregated_pass_list.size()); 1322 ASSERT_EQ(2u, aggregated_pass_list.size());
1177 1323
1178 // Damage rect for first aggregation should contain entire root surface. 1324 // Damage rect for first aggregation should contain entire root surface.
(...skipping 14 matching lines...) Expand all
1193 1339
1194 scoped_ptr<DelegatedFrameData> child_frame_data(new DelegatedFrameData); 1340 scoped_ptr<DelegatedFrameData> child_frame_data(new DelegatedFrameData);
1195 child_pass_list.swap(child_frame_data->render_pass_list); 1341 child_pass_list.swap(child_frame_data->render_pass_list);
1196 1342
1197 scoped_ptr<CompositorFrame> child_frame(new CompositorFrame); 1343 scoped_ptr<CompositorFrame> child_frame(new CompositorFrame);
1198 child_frame->delegated_frame_data = child_frame_data.Pass(); 1344 child_frame->delegated_frame_data = child_frame_data.Pass();
1199 1345
1200 factory_.SubmitCompositorFrame(child_surface_id, child_frame.Pass(), 1346 factory_.SubmitCompositorFrame(child_surface_id, child_frame.Pass(),
1201 SurfaceFactory::DrawCallback()); 1347 SurfaceFactory::DrawCallback());
1202 1348
1349 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
1350 EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface));
1351 EXPECT_TRUE(surface_aggregator_client_.HasSurface(parent_surface));
1352
1203 scoped_ptr<CompositorFrame> aggregated_frame = 1353 scoped_ptr<CompositorFrame> aggregated_frame =
1204 aggregator_.Aggregate(root_surface_id_); 1354 aggregator_.Aggregate(root_surface_id_);
1205 1355
1356 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
1357 EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface));
1358 EXPECT_TRUE(surface_aggregator_client_.HasSurface(parent_surface));
1359
1206 ASSERT_TRUE(aggregated_frame); 1360 ASSERT_TRUE(aggregated_frame);
1207 ASSERT_TRUE(aggregated_frame->delegated_frame_data); 1361 ASSERT_TRUE(aggregated_frame->delegated_frame_data);
1208 1362
1209 DelegatedFrameData* frame_data = 1363 DelegatedFrameData* frame_data =
1210 aggregated_frame->delegated_frame_data.get(); 1364 aggregated_frame->delegated_frame_data.get();
1211 1365
1212 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; 1366 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list;
1213 1367
1214 ASSERT_EQ(2u, aggregated_pass_list.size()); 1368 ASSERT_EQ(2u, aggregated_pass_list.size());
1215 1369
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1255 1409
1256 scoped_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData); 1410 scoped_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData);
1257 root_pass_list.swap(root_frame_data->render_pass_list); 1411 root_pass_list.swap(root_frame_data->render_pass_list);
1258 1412
1259 scoped_ptr<CompositorFrame> root_frame(new CompositorFrame); 1413 scoped_ptr<CompositorFrame> root_frame(new CompositorFrame);
1260 root_frame->delegated_frame_data = root_frame_data.Pass(); 1414 root_frame->delegated_frame_data = root_frame_data.Pass();
1261 1415
1262 factory_.SubmitCompositorFrame(root_surface_id_, root_frame.Pass(), 1416 factory_.SubmitCompositorFrame(root_surface_id_, root_frame.Pass(),
1263 SurfaceFactory::DrawCallback()); 1417 SurfaceFactory::DrawCallback());
1264 1418
1419 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
1420 EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface));
1421 EXPECT_TRUE(surface_aggregator_client_.HasSurface(parent_surface));
1422
1265 scoped_ptr<CompositorFrame> aggregated_frame = 1423 scoped_ptr<CompositorFrame> aggregated_frame =
1266 aggregator_.Aggregate(root_surface_id_); 1424 aggregator_.Aggregate(root_surface_id_);
1267 1425
1426 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
1427 EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface));
1428 EXPECT_TRUE(surface_aggregator_client_.HasSurface(parent_surface));
1429
1268 ASSERT_TRUE(aggregated_frame); 1430 ASSERT_TRUE(aggregated_frame);
1269 ASSERT_TRUE(aggregated_frame->delegated_frame_data); 1431 ASSERT_TRUE(aggregated_frame->delegated_frame_data);
1270 1432
1271 DelegatedFrameData* frame_data = 1433 DelegatedFrameData* frame_data =
1272 aggregated_frame->delegated_frame_data.get(); 1434 aggregated_frame->delegated_frame_data.get();
1273 1435
1274 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; 1436 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list;
1275 1437
1276 ASSERT_EQ(2u, aggregated_pass_list.size()); 1438 ASSERT_EQ(2u, aggregated_pass_list.size());
1277 1439
1278 // The root surface was enqueued without being aggregated once, so it should 1440 // The root surface was enqueued without being aggregated once, so it should
1279 // be treated as completely damaged. 1441 // be treated as completely damaged.
1280 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.Contains( 1442 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.Contains(
1281 gfx::Rect(SurfaceSize()))); 1443 gfx::Rect(SurfaceSize())));
1282 } 1444 }
1283 1445
1284 // No Surface changed, so no damage should be given. 1446 // No Surface changed, so no damage should be given.
1285 { 1447 {
1448 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
1449 EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface));
1450 EXPECT_TRUE(surface_aggregator_client_.HasSurface(parent_surface));
1451
1286 scoped_ptr<CompositorFrame> aggregated_frame = 1452 scoped_ptr<CompositorFrame> aggregated_frame =
1287 aggregator_.Aggregate(root_surface_id_); 1453 aggregator_.Aggregate(root_surface_id_);
1288 1454
1455 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
1456 EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface));
1457 EXPECT_TRUE(surface_aggregator_client_.HasSurface(parent_surface));
1458
1289 ASSERT_TRUE(aggregated_frame); 1459 ASSERT_TRUE(aggregated_frame);
1290 ASSERT_TRUE(aggregated_frame->delegated_frame_data); 1460 ASSERT_TRUE(aggregated_frame->delegated_frame_data);
1291 1461
1292 DelegatedFrameData* frame_data = 1462 DelegatedFrameData* frame_data =
1293 aggregated_frame->delegated_frame_data.get(); 1463 aggregated_frame->delegated_frame_data.get();
1294 1464
1295 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; 1465 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list;
1296 1466
1297 ASSERT_EQ(2u, aggregated_pass_list.size()); 1467 ASSERT_EQ(2u, aggregated_pass_list.size());
1298 1468
1299 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.IsEmpty()); 1469 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.IsEmpty());
1300 } 1470 }
1301 1471
1302 // SetFullDamageRectForSurface should cause the entire output to be 1472 // SetFullDamageRectForSurface should cause the entire output to be
1303 // marked as damaged. 1473 // marked as damaged.
1304 { 1474 {
1475 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
1476 EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface));
1477 EXPECT_TRUE(surface_aggregator_client_.HasSurface(parent_surface));
1478
1305 aggregator_.SetFullDamageForSurface(root_surface_id_); 1479 aggregator_.SetFullDamageForSurface(root_surface_id_);
1306 scoped_ptr<CompositorFrame> aggregated_frame = 1480 scoped_ptr<CompositorFrame> aggregated_frame =
1307 aggregator_.Aggregate(root_surface_id_); 1481 aggregator_.Aggregate(root_surface_id_);
1308 1482
1483 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
1484 EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface));
1485 EXPECT_TRUE(surface_aggregator_client_.HasSurface(parent_surface));
1486
1309 ASSERT_TRUE(aggregated_frame); 1487 ASSERT_TRUE(aggregated_frame);
1310 ASSERT_TRUE(aggregated_frame->delegated_frame_data); 1488 ASSERT_TRUE(aggregated_frame->delegated_frame_data);
1311 1489
1312 DelegatedFrameData* frame_data = 1490 DelegatedFrameData* frame_data =
1313 aggregated_frame->delegated_frame_data.get(); 1491 aggregated_frame->delegated_frame_data.get();
1314 1492
1315 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; 1493 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list;
1316 1494
1317 ASSERT_EQ(2u, aggregated_pass_list.size()); 1495 ASSERT_EQ(2u, aggregated_pass_list.size());
1318 1496
1319 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.Contains( 1497 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.Contains(
1320 gfx::Rect(SurfaceSize()))); 1498 gfx::Rect(SurfaceSize())));
1321 } 1499 }
1322 1500
1323 factory_.Destroy(child_surface_id); 1501 factory_.Destroy(child_surface_id);
1324 } 1502 }
1325 1503
1326 class SurfaceAggregatorPartialSwapTest 1504 class SurfaceAggregatorPartialSwapTest
1327 : public SurfaceAggregatorValidSurfaceTest { 1505 : public SurfaceAggregatorValidSurfaceTest {
1328 public: 1506 public:
1329 SurfaceAggregatorPartialSwapTest() 1507 SurfaceAggregatorPartialSwapTest()
1330 : SurfaceAggregatorValidSurfaceTest(true) {} 1508 : SurfaceAggregatorValidSurfaceTest(true) {}
1331 }; 1509 };
1332 1510
1333 // Tests that quads outside the damage rect are ignored. 1511 // Tests that quads outside the damage rect are ignored.
1334 TEST_F(SurfaceAggregatorPartialSwapTest, IgnoreOutside) { 1512 TEST_F(SurfaceAggregatorPartialSwapTest, IgnoreOutside) {
1335 SurfaceId child_surface_id = allocator_.GenerateId(); 1513 SurfaceId child_surface_id = allocator_.GenerateId();
1336 factory_.Create(child_surface_id); 1514 factory_.Create(child_surface_id);
1515 Surface* child_surface = manager_.GetSurfaceForId(child_surface_id);
1337 // The child surface has two quads, one with a visible rect of 13,13 4x4 and 1516 // The child surface has two quads, one with a visible rect of 13,13 4x4 and
1338 // the other other with a visible rect of 10,10 2x2 (relative to root target 1517 // the other other with a visible rect of 10,10 2x2 (relative to root target
1339 // space). 1518 // space).
1340 { 1519 {
1341 RenderPassId child_pass_id = RenderPassId(1, 1); 1520 RenderPassId child_pass_id = RenderPassId(1, 1);
1342 test::Quad child_quads1[] = {test::Quad::RenderPassQuad(child_pass_id)}; 1521 test::Quad child_quads1[] = {test::Quad::RenderPassQuad(child_pass_id)};
1343 test::Quad child_quads2[] = {test::Quad::RenderPassQuad(child_pass_id)}; 1522 test::Quad child_quads2[] = {test::Quad::RenderPassQuad(child_pass_id)};
1344 test::Pass child_passes[] = { 1523 test::Pass child_passes[] = {
1345 test::Pass(child_quads1, arraysize(child_quads1), child_pass_id), 1524 test::Pass(child_quads1, arraysize(child_quads1), child_pass_id),
1346 test::Pass(child_quads2, arraysize(child_quads2), child_pass_id)}; 1525 test::Pass(child_quads2, arraysize(child_quads2), child_pass_id)};
(...skipping 25 matching lines...) Expand all
1372 arraysize(root_passes)); 1551 arraysize(root_passes));
1373 1552
1374 RenderPass* root_pass = root_pass_list.at(0u); 1553 RenderPass* root_pass = root_pass_list.at(0u);
1375 root_pass->shared_quad_state_list.front() 1554 root_pass->shared_quad_state_list.front()
1376 ->quad_to_target_transform.Translate(10, 10); 1555 ->quad_to_target_transform.Translate(10, 10);
1377 root_pass->damage_rect = gfx::Rect(0, 0, 1, 1); 1556 root_pass->damage_rect = gfx::Rect(0, 0, 1, 1);
1378 1557
1379 SubmitPassListAsFrame(root_surface_id_, &root_pass_list); 1558 SubmitPassListAsFrame(root_surface_id_, &root_pass_list);
1380 } 1559 }
1381 1560
1561 EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_));
1562 EXPECT_FALSE(surface_aggregator_client_.HasSurface(child_surface));
1563
1382 scoped_ptr<CompositorFrame> aggregated_frame = 1564 scoped_ptr<CompositorFrame> aggregated_frame =
1383 aggregator_.Aggregate(root_surface_id_); 1565 aggregator_.Aggregate(root_surface_id_);
1384 1566
1567 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
1568 EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface));
1569
1385 ASSERT_TRUE(aggregated_frame); 1570 ASSERT_TRUE(aggregated_frame);
1386 ASSERT_TRUE(aggregated_frame->delegated_frame_data); 1571 ASSERT_TRUE(aggregated_frame->delegated_frame_data);
1387 1572
1388 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); 1573 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get();
1389 1574
1390 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; 1575 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list;
1391 1576
1392 ASSERT_EQ(2u, aggregated_pass_list.size()); 1577 ASSERT_EQ(2u, aggregated_pass_list.size());
1393 1578
1394 // Damage rect for first aggregation should contain entire root surface. 1579 // Damage rect for first aggregation should contain entire root surface.
(...skipping 12 matching lines...) Expand all
1407 arraysize(root_passes)); 1592 arraysize(root_passes));
1408 1593
1409 RenderPass* root_pass = root_pass_list.at(0u); 1594 RenderPass* root_pass = root_pass_list.at(0u);
1410 root_pass->shared_quad_state_list.front() 1595 root_pass->shared_quad_state_list.front()
1411 ->quad_to_target_transform.Translate(10, 10); 1596 ->quad_to_target_transform.Translate(10, 10);
1412 root_pass->damage_rect = gfx::Rect(10, 10, 2, 2); 1597 root_pass->damage_rect = gfx::Rect(10, 10, 2, 2);
1413 SubmitPassListAsFrame(root_surface_id_, &root_pass_list); 1598 SubmitPassListAsFrame(root_surface_id_, &root_pass_list);
1414 } 1599 }
1415 1600
1416 { 1601 {
1602 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
1603 EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface));
1604
1417 scoped_ptr<CompositorFrame> aggregated_frame = 1605 scoped_ptr<CompositorFrame> aggregated_frame =
1418 aggregator_.Aggregate(root_surface_id_); 1606 aggregator_.Aggregate(root_surface_id_);
1419 1607
1608 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
1609 EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface));
1610
1420 ASSERT_TRUE(aggregated_frame); 1611 ASSERT_TRUE(aggregated_frame);
1421 ASSERT_TRUE(aggregated_frame->delegated_frame_data); 1612 ASSERT_TRUE(aggregated_frame->delegated_frame_data);
1422 1613
1423 DelegatedFrameData* frame_data = 1614 DelegatedFrameData* frame_data =
1424 aggregated_frame->delegated_frame_data.get(); 1615 aggregated_frame->delegated_frame_data.get();
1425 1616
1426 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; 1617 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list;
1427 1618
1428 ASSERT_EQ(2u, aggregated_pass_list.size()); 1619 ASSERT_EQ(2u, aggregated_pass_list.size());
1429 1620
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1462 1653
1463 RenderPass* child_root_pass = child_pass_list.at(1u); 1654 RenderPass* child_root_pass = child_pass_list.at(1u);
1464 1655
1465 child_root_pass->copy_requests.push_back( 1656 child_root_pass->copy_requests.push_back(
1466 CopyOutputRequest::CreateEmptyRequest()); 1657 CopyOutputRequest::CreateEmptyRequest());
1467 child_root_pass->damage_rect = gfx::Rect(); 1658 child_root_pass->damage_rect = gfx::Rect();
1468 SubmitPassListAsFrame(child_surface_id, &child_pass_list); 1659 SubmitPassListAsFrame(child_surface_id, &child_pass_list);
1469 } 1660 }
1470 1661
1471 { 1662 {
1663 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
1664 EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface));
1665
1472 scoped_ptr<CompositorFrame> aggregated_frame = 1666 scoped_ptr<CompositorFrame> aggregated_frame =
1473 aggregator_.Aggregate(root_surface_id_); 1667 aggregator_.Aggregate(root_surface_id_);
1474 1668
1669 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
1670 EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface));
1671
1475 ASSERT_TRUE(aggregated_frame); 1672 ASSERT_TRUE(aggregated_frame);
1476 ASSERT_TRUE(aggregated_frame->delegated_frame_data); 1673 ASSERT_TRUE(aggregated_frame->delegated_frame_data);
1477 1674
1478 DelegatedFrameData* frame_data = 1675 DelegatedFrameData* frame_data =
1479 aggregated_frame->delegated_frame_data.get(); 1676 aggregated_frame->delegated_frame_data.get();
1480 1677
1481 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; 1678 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list;
1482 1679
1483 // Output frame should have no damage, but all quads included. 1680 // Output frame should have no damage, but all quads included.
1484 ASSERT_EQ(3u, aggregated_pass_list.size()); 1681 ASSERT_EQ(3u, aggregated_pass_list.size());
1485 1682
1486 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.IsEmpty()); 1683 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.IsEmpty());
1487 ASSERT_EQ(1u, aggregated_pass_list[0]->quad_list.size()); 1684 ASSERT_EQ(1u, aggregated_pass_list[0]->quad_list.size());
1488 ASSERT_EQ(1u, aggregated_pass_list[1]->quad_list.size()); 1685 ASSERT_EQ(1u, aggregated_pass_list[1]->quad_list.size());
1489 EXPECT_EQ(gfx::Rect(1, 1, 2, 2), 1686 EXPECT_EQ(gfx::Rect(1, 1, 2, 2),
1490 aggregated_pass_list[0]->quad_list.ElementAt(0)->visible_rect); 1687 aggregated_pass_list[0]->quad_list.ElementAt(0)->visible_rect);
1491 EXPECT_EQ(gfx::Rect(0, 0, 2, 2), 1688 EXPECT_EQ(gfx::Rect(0, 0, 2, 2),
1492 aggregated_pass_list[1]->quad_list.ElementAt(0)->visible_rect); 1689 aggregated_pass_list[1]->quad_list.ElementAt(0)->visible_rect);
1493 } 1690 }
1494 1691
1495 { 1692 {
1693 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
1694 EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface));
1695
1496 scoped_ptr<CompositorFrame> aggregated_frame = 1696 scoped_ptr<CompositorFrame> aggregated_frame =
1497 aggregator_.Aggregate(root_surface_id_); 1697 aggregator_.Aggregate(root_surface_id_);
1498 1698
1699 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
1700 EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface));
1701
1499 ASSERT_TRUE(aggregated_frame); 1702 ASSERT_TRUE(aggregated_frame);
1500 ASSERT_TRUE(aggregated_frame->delegated_frame_data); 1703 ASSERT_TRUE(aggregated_frame->delegated_frame_data);
1501 1704
1502 DelegatedFrameData* frame_data = 1705 DelegatedFrameData* frame_data =
1503 aggregated_frame->delegated_frame_data.get(); 1706 aggregated_frame->delegated_frame_data.get();
1504 1707
1505 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; 1708 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list;
1506 // There were no changes since last aggregation, so output should be empty 1709 // There were no changes since last aggregation, so output should be empty
1507 // and have no damage. 1710 // and have no damage.
1508 ASSERT_EQ(1u, aggregated_pass_list.size()); 1711 ASSERT_EQ(1u, aggregated_pass_list.size());
1509 EXPECT_TRUE(aggregated_pass_list[0]->damage_rect.IsEmpty()); 1712 EXPECT_TRUE(aggregated_pass_list[0]->damage_rect.IsEmpty());
1510 ASSERT_EQ(0u, aggregated_pass_list[0]->quad_list.size()); 1713 ASSERT_EQ(0u, aggregated_pass_list[0]->quad_list.size());
1511 } 1714 }
1512 1715
1513 factory_.Destroy(child_surface_id); 1716 factory_.Destroy(child_surface_id);
1514 } 1717 }
1515 1718
1516 class SurfaceAggregatorWithResourcesTest : public testing::Test { 1719 class SurfaceAggregatorWithResourcesTest : public testing::Test {
1517 public: 1720 public:
1518 void SetUp() override { 1721 void SetUp() override {
1519 output_surface_ = FakeOutputSurface::CreateSoftware( 1722 output_surface_ = FakeOutputSurface::CreateSoftware(
1520 make_scoped_ptr(new SoftwareOutputDevice)); 1723 make_scoped_ptr(new SoftwareOutputDevice));
1521 output_surface_->BindToClient(&output_surface_client_); 1724 output_surface_->BindToClient(&output_surface_client_);
1522 shared_bitmap_manager_.reset(new TestSharedBitmapManager); 1725 shared_bitmap_manager_.reset(new TestSharedBitmapManager);
1523 1726
1524 resource_provider_ = FakeResourceProvider::Create( 1727 resource_provider_ = FakeResourceProvider::Create(
1525 output_surface_.get(), shared_bitmap_manager_.get()); 1728 output_surface_.get(), shared_bitmap_manager_.get());
1526 1729
1527 aggregator_.reset( 1730 aggregator_.reset(new SurfaceAggregator(&surface_aggregator_client_,
1528 new SurfaceAggregator(&manager_, resource_provider_.get(), false)); 1731 &manager_, resource_provider_.get(),
1732 false));
1529 } 1733 }
1530 1734
1531 protected: 1735 protected:
1532 SurfaceManager manager_; 1736 SurfaceManager manager_;
1533 FakeOutputSurfaceClient output_surface_client_; 1737 FakeOutputSurfaceClient output_surface_client_;
1534 scoped_ptr<OutputSurface> output_surface_; 1738 scoped_ptr<OutputSurface> output_surface_;
1535 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_; 1739 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_;
1536 scoped_ptr<ResourceProvider> resource_provider_; 1740 scoped_ptr<ResourceProvider> resource_provider_;
1537 scoped_ptr<SurfaceAggregator> aggregator_; 1741 scoped_ptr<SurfaceAggregator> aggregator_;
1742 FakeSurfaceAggregatorClient surface_aggregator_client_;
1538 }; 1743 };
1539 1744
1540 class ResourceTrackingSurfaceFactoryClient : public SurfaceFactoryClient { 1745 class ResourceTrackingSurfaceFactoryClient : public SurfaceFactoryClient {
1541 public: 1746 public:
1542 ResourceTrackingSurfaceFactoryClient() {} 1747 ResourceTrackingSurfaceFactoryClient() {}
1543 ~ResourceTrackingSurfaceFactoryClient() override {} 1748 ~ResourceTrackingSurfaceFactoryClient() override {}
1544 1749
1545 void ReturnResources(const ReturnedResourceArray& resources) override { 1750 void ReturnResources(const ReturnedResourceArray& resources) override {
1546 returned_resources_ = resources; 1751 returned_resources_ = resources;
1547 } 1752 }
1548 1753
1549 ReturnedResourceArray returned_resources() const { 1754 ReturnedResourceArray returned_resources() const {
1550 return returned_resources_; 1755 return returned_resources_;
1551 } 1756 }
1552 1757
1758 void SetBeginFrameSource(SurfaceId surface_id,
1759 BeginFrameSource* begin_frame_source) override {}
1760
1553 private: 1761 private:
1554 ReturnedResourceArray returned_resources_; 1762 ReturnedResourceArray returned_resources_;
1555 1763
1556 DISALLOW_COPY_AND_ASSIGN(ResourceTrackingSurfaceFactoryClient); 1764 DISALLOW_COPY_AND_ASSIGN(ResourceTrackingSurfaceFactoryClient);
1557 }; 1765 };
1558 1766
1559 void SubmitCompositorFrameWithResources(ResourceId* resource_ids, 1767 void SubmitCompositorFrameWithResources(ResourceId* resource_ids,
1560 size_t num_resource_ids, 1768 size_t num_resource_ids,
1561 bool valid, 1769 bool valid,
1562 SurfaceId child_id, 1770 SurfaceId child_id,
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1602 frame->delegated_frame_data = frame_data.Pass(); 1810 frame->delegated_frame_data = frame_data.Pass();
1603 factory->SubmitCompositorFrame(surface_id, frame.Pass(), 1811 factory->SubmitCompositorFrame(surface_id, frame.Pass(),
1604 SurfaceFactory::DrawCallback()); 1812 SurfaceFactory::DrawCallback());
1605 } 1813 }
1606 1814
1607 TEST_F(SurfaceAggregatorWithResourcesTest, TakeResourcesOneSurface) { 1815 TEST_F(SurfaceAggregatorWithResourcesTest, TakeResourcesOneSurface) {
1608 ResourceTrackingSurfaceFactoryClient client; 1816 ResourceTrackingSurfaceFactoryClient client;
1609 SurfaceFactory factory(&manager_, &client); 1817 SurfaceFactory factory(&manager_, &client);
1610 SurfaceId surface_id(7u); 1818 SurfaceId surface_id(7u);
1611 factory.Create(surface_id); 1819 factory.Create(surface_id);
1820 Surface* surface = manager_.GetSurfaceForId(surface_id);
1612 1821
1613 ResourceId ids[] = {11, 12, 13}; 1822 ResourceId ids[] = {11, 12, 13};
1614 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), 1823 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(),
1615 &factory, surface_id); 1824 &factory, surface_id);
1616 1825
1826 EXPECT_FALSE(surface_aggregator_client_.HasSurface(surface));
1827
1617 scoped_ptr<CompositorFrame> frame = aggregator_->Aggregate(surface_id); 1828 scoped_ptr<CompositorFrame> frame = aggregator_->Aggregate(surface_id);
1618 1829
1830 EXPECT_TRUE(surface_aggregator_client_.HasSurface(surface));
1831
1619 // Nothing should be available to be returned yet. 1832 // Nothing should be available to be returned yet.
1620 EXPECT_TRUE(client.returned_resources().empty()); 1833 EXPECT_TRUE(client.returned_resources().empty());
1621 1834
1622 SubmitCompositorFrameWithResources(NULL, 0u, true, SurfaceId(), &factory, 1835 SubmitCompositorFrameWithResources(NULL, 0u, true, SurfaceId(), &factory,
1623 surface_id); 1836 surface_id);
1624 1837
1838 EXPECT_TRUE(surface_aggregator_client_.HasSurface(surface));
1839
1625 frame = aggregator_->Aggregate(surface_id); 1840 frame = aggregator_->Aggregate(surface_id);
1626 1841
1842 EXPECT_TRUE(surface_aggregator_client_.HasSurface(surface));
1843
1627 ASSERT_EQ(3u, client.returned_resources().size()); 1844 ASSERT_EQ(3u, client.returned_resources().size());
1628 ResourceId returned_ids[3]; 1845 ResourceId returned_ids[3];
1629 for (size_t i = 0; i < 3; ++i) { 1846 for (size_t i = 0; i < 3; ++i) {
1630 returned_ids[i] = client.returned_resources()[i].id; 1847 returned_ids[i] = client.returned_resources()[i].id;
1631 } 1848 }
1632 EXPECT_THAT(returned_ids, 1849 EXPECT_THAT(returned_ids,
1633 testing::WhenSorted(testing::ElementsAreArray(ids))); 1850 testing::WhenSorted(testing::ElementsAreArray(ids)));
1634 factory.Destroy(surface_id); 1851 factory.Destroy(surface_id);
1635 } 1852 }
1636 1853
1637 TEST_F(SurfaceAggregatorWithResourcesTest, TakeInvalidResources) { 1854 TEST_F(SurfaceAggregatorWithResourcesTest, TakeInvalidResources) {
1638 ResourceTrackingSurfaceFactoryClient client; 1855 ResourceTrackingSurfaceFactoryClient client;
1639 SurfaceFactory factory(&manager_, &client); 1856 SurfaceFactory factory(&manager_, &client);
1640 SurfaceId surface_id(7u); 1857 SurfaceId surface_id(7u);
1641 factory.Create(surface_id); 1858 factory.Create(surface_id);
1859 Surface* surface = manager_.GetSurfaceForId(surface_id);
1642 1860
1643 scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); 1861 scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData);
1644 scoped_ptr<RenderPass> pass = RenderPass::Create(); 1862 scoped_ptr<RenderPass> pass = RenderPass::Create();
1645 pass->id = RenderPassId(1, 1); 1863 pass->id = RenderPassId(1, 1);
1646 TransferableResource resource; 1864 TransferableResource resource;
1647 resource.id = 11; 1865 resource.id = 11;
1648 // ResourceProvider is software but resource is not, so it should be 1866 // ResourceProvider is software but resource is not, so it should be
1649 // ignored. 1867 // ignored.
1650 resource.is_software = false; 1868 resource.is_software = false;
1651 frame_data->resource_list.push_back(resource); 1869 frame_data->resource_list.push_back(resource);
1652 frame_data->render_pass_list.push_back(pass.Pass()); 1870 frame_data->render_pass_list.push_back(pass.Pass());
1653 scoped_ptr<CompositorFrame> frame(new CompositorFrame); 1871 scoped_ptr<CompositorFrame> frame(new CompositorFrame);
1654 frame->delegated_frame_data = frame_data.Pass(); 1872 frame->delegated_frame_data = frame_data.Pass();
1655 factory.SubmitCompositorFrame(surface_id, frame.Pass(), 1873 factory.SubmitCompositorFrame(surface_id, frame.Pass(),
1656 SurfaceFactory::DrawCallback()); 1874 SurfaceFactory::DrawCallback());
1657 1875
1876 EXPECT_FALSE(surface_aggregator_client_.HasSurface(surface));
1877
1658 scoped_ptr<CompositorFrame> returned_frame = 1878 scoped_ptr<CompositorFrame> returned_frame =
1659 aggregator_->Aggregate(surface_id); 1879 aggregator_->Aggregate(surface_id);
1660 1880
1881 EXPECT_TRUE(surface_aggregator_client_.HasSurface(surface));
1882
1661 // Nothing should be available to be returned yet. 1883 // Nothing should be available to be returned yet.
1662 EXPECT_TRUE(client.returned_resources().empty()); 1884 EXPECT_TRUE(client.returned_resources().empty());
1663 1885
1664 SubmitCompositorFrameWithResources(NULL, 0, true, SurfaceId(), &factory, 1886 SubmitCompositorFrameWithResources(NULL, 0, true, SurfaceId(), &factory,
1665 surface_id); 1887 surface_id);
1666 ASSERT_EQ(1u, client.returned_resources().size()); 1888 ASSERT_EQ(1u, client.returned_resources().size());
1667 EXPECT_EQ(11u, client.returned_resources()[0].id); 1889 EXPECT_EQ(11u, client.returned_resources()[0].id);
1668 1890
1669 factory.Destroy(surface_id); 1891 factory.Destroy(surface_id);
1670 } 1892 }
1671 1893
1672 TEST_F(SurfaceAggregatorWithResourcesTest, TwoSurfaces) { 1894 TEST_F(SurfaceAggregatorWithResourcesTest, TwoSurfaces) {
1673 ResourceTrackingSurfaceFactoryClient client; 1895 ResourceTrackingSurfaceFactoryClient client;
1674 SurfaceFactory factory(&manager_, &client); 1896 SurfaceFactory factory(&manager_, &client);
1675 SurfaceId surface_id(7u); 1897 SurfaceId surface1_id(7u);
1676 factory.Create(surface_id); 1898 factory.Create(surface1_id);
1677 SurfaceId surface_id2(8u); 1899 Surface* surface1 = manager_.GetSurfaceForId(surface1_id);
1678 factory.Create(surface_id2); 1900
1901 SurfaceId surface2_id(8u);
1902 factory.Create(surface2_id);
1903 Surface* surface2 = manager_.GetSurfaceForId(surface2_id);
1679 1904
1680 ResourceId ids[] = {11, 12, 13}; 1905 ResourceId ids[] = {11, 12, 13};
1681 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), 1906 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(),
1682 &factory, surface_id); 1907 &factory, surface1_id);
1683 ResourceId ids2[] = {14, 15, 16}; 1908 ResourceId ids2[] = {14, 15, 16};
1684 SubmitCompositorFrameWithResources(ids2, arraysize(ids2), true, SurfaceId(), 1909 SubmitCompositorFrameWithResources(ids2, arraysize(ids2), true, SurfaceId(),
1685 &factory, surface_id2); 1910 &factory, surface2_id);
1686 1911
1687 scoped_ptr<CompositorFrame> frame = aggregator_->Aggregate(surface_id); 1912 EXPECT_FALSE(surface_aggregator_client_.HasSurface(surface1));
1913 EXPECT_FALSE(surface_aggregator_client_.HasSurface(surface2));
1914
1915 scoped_ptr<CompositorFrame> frame = aggregator_->Aggregate(surface1_id);
1916
1917 EXPECT_TRUE(surface_aggregator_client_.HasSurface(surface1));
1918 EXPECT_FALSE(surface_aggregator_client_.HasSurface(surface2));
1688 1919
1689 SubmitCompositorFrameWithResources(NULL, 0, true, SurfaceId(), &factory, 1920 SubmitCompositorFrameWithResources(NULL, 0, true, SurfaceId(), &factory,
1690 surface_id); 1921 surface1_id);
1691 1922
1692 // Nothing should be available to be returned yet. 1923 // Nothing should be available to be returned yet.
1693 EXPECT_TRUE(client.returned_resources().empty()); 1924 EXPECT_TRUE(client.returned_resources().empty());
1694 1925
1695 frame = aggregator_->Aggregate(surface_id2); 1926 EXPECT_TRUE(surface_aggregator_client_.HasSurface(surface1));
1927 EXPECT_FALSE(surface_aggregator_client_.HasSurface(surface2));
1696 1928
1697 // surface_id wasn't referenced, so its resources should be returned. 1929 frame = aggregator_->Aggregate(surface2_id);
1930
1931 EXPECT_FALSE(surface_aggregator_client_.HasSurface(surface1));
1932 EXPECT_TRUE(surface_aggregator_client_.HasSurface(surface2));
1933
1934 // surface1_id wasn't referenced, so its resources should be returned.
1698 ASSERT_EQ(3u, client.returned_resources().size()); 1935 ASSERT_EQ(3u, client.returned_resources().size());
1699 ResourceId returned_ids[3]; 1936 ResourceId returned_ids[3];
1700 for (size_t i = 0; i < 3; ++i) { 1937 for (size_t i = 0; i < 3; ++i) {
1701 returned_ids[i] = client.returned_resources()[i].id; 1938 returned_ids[i] = client.returned_resources()[i].id;
1702 } 1939 }
1703 EXPECT_THAT(returned_ids, 1940 EXPECT_THAT(returned_ids,
1704 testing::WhenSorted(testing::ElementsAreArray(ids))); 1941 testing::WhenSorted(testing::ElementsAreArray(ids)));
1705 EXPECT_EQ(3u, resource_provider_->num_resources()); 1942 EXPECT_EQ(3u, resource_provider_->num_resources());
1706 factory.Destroy(surface_id); 1943 factory.Destroy(surface1_id);
1707 factory.Destroy(surface_id2); 1944 factory.Destroy(surface2_id);
1708 } 1945 }
1709 1946
1710 // Ensure that aggregator completely ignores Surfaces that reference invalid 1947 // Ensure that aggregator completely ignores Surfaces that reference invalid
1711 // resources. 1948 // resources.
1712 TEST_F(SurfaceAggregatorWithResourcesTest, InvalidChildSurface) { 1949 TEST_F(SurfaceAggregatorWithResourcesTest, InvalidChildSurface) {
1713 ResourceTrackingSurfaceFactoryClient client; 1950 ResourceTrackingSurfaceFactoryClient client;
1714 SurfaceFactory factory(&manager_, &client); 1951 SurfaceFactory factory(&manager_, &client);
1715 SurfaceId root_surface_id(7u); 1952 SurfaceId root_surface_id(7u);
1716 factory.Create(root_surface_id); 1953 factory.Create(root_surface_id);
1954 Surface* root_surface = manager_.GetSurfaceForId(root_surface_id);
1717 SurfaceId middle_surface_id(8u); 1955 SurfaceId middle_surface_id(8u);
1718 factory.Create(middle_surface_id); 1956 factory.Create(middle_surface_id);
1957 Surface* middle_surface = manager_.GetSurfaceForId(middle_surface_id);
1719 SurfaceId child_surface_id(9u); 1958 SurfaceId child_surface_id(9u);
1720 factory.Create(child_surface_id); 1959 factory.Create(child_surface_id);
1960 Surface* child_surface = manager_.GetSurfaceForId(child_surface_id);
1721 1961
1722 ResourceId ids[] = {14, 15, 16}; 1962 ResourceId ids[] = {14, 15, 16};
1723 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), 1963 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(),
1724 &factory, child_surface_id); 1964 &factory, child_surface_id);
1725 1965
1726 ResourceId ids2[] = {17, 18, 19}; 1966 ResourceId ids2[] = {17, 18, 19};
1727 SubmitCompositorFrameWithResources(ids2, arraysize(ids2), false, 1967 SubmitCompositorFrameWithResources(ids2, arraysize(ids2), false,
1728 child_surface_id, &factory, 1968 child_surface_id, &factory,
1729 middle_surface_id); 1969 middle_surface_id);
1730 1970
1731 ResourceId ids3[] = {20, 21, 22}; 1971 ResourceId ids3[] = {20, 21, 22};
1732 SubmitCompositorFrameWithResources(ids3, arraysize(ids3), true, 1972 SubmitCompositorFrameWithResources(ids3, arraysize(ids3), true,
1733 middle_surface_id, &factory, 1973 middle_surface_id, &factory,
1734 root_surface_id); 1974 root_surface_id);
1735 1975
1976 EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface));
1977 EXPECT_FALSE(surface_aggregator_client_.HasSurface(middle_surface));
1978 EXPECT_FALSE(surface_aggregator_client_.HasSurface(child_surface));
1979
1736 scoped_ptr<CompositorFrame> frame; 1980 scoped_ptr<CompositorFrame> frame;
1737 frame = aggregator_->Aggregate(root_surface_id); 1981 frame = aggregator_->Aggregate(root_surface_id);
1738 1982
1983 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface));
1984 EXPECT_TRUE(surface_aggregator_client_.HasSurface(middle_surface));
1985 EXPECT_FALSE(surface_aggregator_client_.HasSurface(child_surface));
1986
1739 RenderPassList* pass_list = &frame->delegated_frame_data->render_pass_list; 1987 RenderPassList* pass_list = &frame->delegated_frame_data->render_pass_list;
1740 ASSERT_EQ(1u, pass_list->size()); 1988 ASSERT_EQ(1u, pass_list->size());
1741 EXPECT_EQ(1u, pass_list->back()->shared_quad_state_list.size()); 1989 EXPECT_EQ(1u, pass_list->back()->shared_quad_state_list.size());
1742 EXPECT_EQ(3u, pass_list->back()->quad_list.size()); 1990 EXPECT_EQ(3u, pass_list->back()->quad_list.size());
1743 1991
1744 SubmitCompositorFrameWithResources(ids2, arraysize(ids), true, 1992 SubmitCompositorFrameWithResources(ids2, arraysize(ids), true,
1745 child_surface_id, &factory, 1993 child_surface_id, &factory,
1746 middle_surface_id); 1994 middle_surface_id);
1747 1995
1996 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface));
1997 EXPECT_TRUE(surface_aggregator_client_.HasSurface(middle_surface));
1998 EXPECT_FALSE(surface_aggregator_client_.HasSurface(child_surface));
1999
1748 frame = aggregator_->Aggregate(root_surface_id); 2000 frame = aggregator_->Aggregate(root_surface_id);
1749 2001
2002 EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface));
2003 EXPECT_TRUE(surface_aggregator_client_.HasSurface(middle_surface));
2004 EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface));
2005
1750 pass_list = &frame->delegated_frame_data->render_pass_list; 2006 pass_list = &frame->delegated_frame_data->render_pass_list;
1751 ASSERT_EQ(1u, pass_list->size()); 2007 ASSERT_EQ(1u, pass_list->size());
1752 EXPECT_EQ(3u, pass_list->back()->shared_quad_state_list.size()); 2008 EXPECT_EQ(3u, pass_list->back()->shared_quad_state_list.size());
1753 EXPECT_EQ(9u, pass_list->back()->quad_list.size()); 2009 EXPECT_EQ(9u, pass_list->back()->quad_list.size());
1754 2010
1755 factory.Destroy(root_surface_id); 2011 factory.Destroy(root_surface_id);
1756 factory.Destroy(child_surface_id); 2012 factory.Destroy(child_surface_id);
1757 factory.Destroy(middle_surface_id); 2013 factory.Destroy(middle_surface_id);
1758 } 2014 }
1759 2015
1760 } // namespace 2016 } // namespace
1761 } // namespace cc 2017 } // namespace cc
1762 2018
OLDNEW
« no previous file with comments | « cc/surfaces/surface_aggregator_perftest.cc ('k') | cc/surfaces/surface_display_output_surface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698