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

Side by Side Diff: cc/trees/layer_tree_host_unittest_delegated.cc

Issue 26023004: aura: Allow delegated frames to be used by more than one impl layer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: frameprovider: more tests Created 7 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/trees/layer_tree_host.h" 5 #include "cc/trees/layer_tree_host.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/location.h" 10 #include "base/location.h"
11 #include "base/synchronization/waitable_event.h" 11 #include "base/synchronization/waitable_event.h"
12 #include "base/threading/thread.h" 12 #include "base/threading/thread.h"
13 #include "base/time/time.h" 13 #include "base/time/time.h"
14 #include "cc/layers/delegated_frame_provider.h"
15 #include "cc/layers/delegated_frame_resource_collection.h"
14 #include "cc/layers/delegated_renderer_layer.h" 16 #include "cc/layers/delegated_renderer_layer.h"
15 #include "cc/layers/delegated_renderer_layer_client.h" 17 #include "cc/layers/delegated_renderer_layer_client.h"
16 #include "cc/layers/delegated_renderer_layer_impl.h" 18 #include "cc/layers/delegated_renderer_layer_impl.h"
17 #include "cc/output/compositor_frame.h" 19 #include "cc/output/compositor_frame.h"
18 #include "cc/output/compositor_frame_ack.h" 20 #include "cc/output/compositor_frame_ack.h"
19 #include "cc/output/delegated_frame_data.h" 21 #include "cc/output/delegated_frame_data.h"
20 #include "cc/quads/render_pass_draw_quad.h" 22 #include "cc/quads/render_pass_draw_quad.h"
21 #include "cc/quads/shared_quad_state.h" 23 #include "cc/quads/shared_quad_state.h"
22 #include "cc/quads/texture_draw_quad.h" 24 #include "cc/quads/texture_draw_quad.h"
23 #include "cc/resources/returned_resource.h" 25 #include "cc/resources/returned_resource.h"
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 false, // is_replica 183 false, // is_replica
182 0, // mask_resource_id 184 0, // mask_resource_id
183 damage_rect, 185 damage_rect,
184 gfx::Rect(0, 0, 1, 1), // mask_uv_rect 186 gfx::Rect(0, 0, 1, 1), // mask_uv_rect
185 filters, 187 filters,
186 background_filters); 188 background_filters);
187 frame->render_pass_list[0]->shared_quad_state_list.push_back(sqs.Pass()); 189 frame->render_pass_list[0]->shared_quad_state_list.push_back(sqs.Pass());
188 frame->render_pass_list[0]->quad_list.push_back(quad.PassAs<DrawQuad>()); 190 frame->render_pass_list[0]->quad_list.push_back(quad.PassAs<DrawQuad>());
189 } 191 }
190 192
191 scoped_ptr<DelegatedFrameData> CreateEmptyFrameData() {
192 scoped_ptr<DelegatedFrameData> frame(new DelegatedFrameData);
193 return frame.Pass();
194 }
195
196
197 static ResourceProvider::ResourceId AppendResourceId( 193 static ResourceProvider::ResourceId AppendResourceId(
198 std::vector<ResourceProvider::ResourceId>* resources_in_last_sent_frame, 194 std::vector<ResourceProvider::ResourceId>* resources_in_last_sent_frame,
199 ResourceProvider::ResourceId resource_id) { 195 ResourceProvider::ResourceId resource_id) {
200 resources_in_last_sent_frame->push_back(resource_id); 196 resources_in_last_sent_frame->push_back(resource_id);
201 return resource_id; 197 return resource_id;
202 } 198 }
203 199
204 void ReturnUnusedResourcesFromParent(LayerTreeHostImpl* host_impl) { 200 void ReturnUnusedResourcesFromParent(LayerTreeHostImpl* host_impl) {
205 DelegatedFrameData* delegated_frame_data = 201 DelegatedFrameData* delegated_frame_data =
206 output_surface()->last_sent_frame().delegated_frame_data.get(); 202 output_surface()->last_sent_frame().delegated_frame_data.get();
207 if (!delegated_frame_data) 203 if (!delegated_frame_data)
208 return; 204 return;
209 205
210 std::vector<ResourceProvider::ResourceId> resources_in_last_sent_frame; 206 std::vector<ResourceProvider::ResourceId> resources_in_last_sent_frame;
211 for (size_t i = 0; i < delegated_frame_data->render_pass_list.size(); ++i) { 207 for (size_t i = 0; i < delegated_frame_data->resource_list.size(); ++i) {
212 RenderPass* pass = delegated_frame_data->render_pass_list.at(i); 208 resources_in_last_sent_frame.push_back(
213 for (size_t j = 0; j < pass->quad_list.size(); ++j) { 209 delegated_frame_data->resource_list[i].id);
214 DrawQuad* quad = pass->quad_list[j];
215 quad->IterateResources(base::Bind(&AppendResourceId,
216 &resources_in_last_sent_frame));
217 }
218 } 210 }
219 211
220 std::vector<ResourceProvider::ResourceId> resources_to_return; 212 std::vector<ResourceProvider::ResourceId> resources_to_return;
221 213
222 const TransferableResourceArray& resources_held_by_parent = 214 const TransferableResourceArray& resources_held_by_parent =
223 output_surface()->resources_held_by_parent(); 215 output_surface()->resources_held_by_parent();
224 for (size_t i = 0; i < resources_held_by_parent.size(); ++i) { 216 for (size_t i = 0; i < resources_held_by_parent.size(); ++i) {
225 ResourceProvider::ResourceId resource_in_parent = 217 ResourceProvider::ResourceId resource_in_parent =
226 resources_held_by_parent[i].id; 218 resources_held_by_parent[i].id;
227 bool resource_in_parent_is_not_part_of_frame = 219 bool resource_in_parent_is_not_part_of_frame =
(...skipping 10 matching lines...) Expand all
238 CompositorFrameAck ack; 230 CompositorFrameAck ack;
239 for (size_t i = 0; i < resources_to_return.size(); ++i) 231 for (size_t i = 0; i < resources_to_return.size(); ++i)
240 output_surface()->ReturnResource(resources_to_return[i], &ack); 232 output_surface()->ReturnResource(resources_to_return[i], &ack);
241 host_impl->ReclaimResources(&ack); 233 host_impl->ReclaimResources(&ack);
242 host_impl->OnSwapBuffersComplete(); 234 host_impl->OnSwapBuffersComplete();
243 } 235 }
244 }; 236 };
245 237
246 class LayerTreeHostDelegatedTestCaseSingleDelegatedLayer 238 class LayerTreeHostDelegatedTestCaseSingleDelegatedLayer
247 : public LayerTreeHostDelegatedTest, 239 : public LayerTreeHostDelegatedTest,
248 public DelegatedRendererLayerClient { 240 public DelegatedRendererLayerClient,
241 public DelegatedFrameResourceCollectionClient {
249 public: 242 public:
250 LayerTreeHostDelegatedTestCaseSingleDelegatedLayer() : available_(false) {} 243 LayerTreeHostDelegatedTestCaseSingleDelegatedLayer()
244 : resource_collection_(
245 make_scoped_ptr(new DelegatedFrameResourceCollection(this))),
246 available_(false) {}
251 247
252 virtual void SetupTree() OVERRIDE { 248 virtual void SetupTree() OVERRIDE {
253 root_ = Layer::Create(); 249 root_ = Layer::Create();
254 root_->SetAnchorPoint(gfx::PointF()); 250 root_->SetAnchorPoint(gfx::PointF());
255 root_->SetBounds(gfx::Size(10, 10)); 251 root_->SetBounds(gfx::Size(10, 10));
256 252
257 delegated_ = FakeDelegatedRendererLayer::Create(this);
258 delegated_->SetAnchorPoint(gfx::PointF());
259 delegated_->SetBounds(gfx::Size(10, 10));
260 delegated_->SetIsDrawable(true);
261
262 root_->AddChild(delegated_);
263 layer_tree_host()->SetRootLayer(root_); 253 layer_tree_host()->SetRootLayer(root_);
264 LayerTreeHostDelegatedTest::SetupTree(); 254 LayerTreeHostDelegatedTest::SetupTree();
265 } 255 }
266 256
267 virtual void BeginTest() OVERRIDE { 257 virtual void BeginTest() OVERRIDE {
268 PostSetNeedsCommitToMainThread(); 258 PostSetNeedsCommitToMainThread();
269 } 259 }
270 260
261 void SetFrameData(scoped_ptr<DelegatedFrameData> frame_data) {
262 RenderPass* root_pass = frame_data->render_pass_list.back();
263 gfx::Size frame_size = root_pass->output_rect.size();
264
265 if (frame_provider_ && frame_size == frame_provider_->frame_size()) {
266 frame_provider_->SetFrameData(frame_data.Pass());
267 return;
268 }
269
270 if (delegated_.get()) {
271 delegated_->RemoveFromParent();
272 delegated_ = NULL;
273 frame_provider_.reset();
274 }
275
276 frame_provider_ = make_scoped_ptr(new DelegatedFrameProvider(
277 resource_collection_.get(), frame_data.Pass()));
278
279 delegated_ = CreateDelegatedLayer(frame_provider_.get());
280 }
281
282 scoped_refptr<DelegatedRendererLayer> CreateDelegatedLayer(
283 DelegatedFrameProvider* frame_provider) {
284 scoped_refptr<DelegatedRendererLayer> delegated =
285 FakeDelegatedRendererLayer::Create(this, frame_provider);
286 delegated->SetAnchorPoint(gfx::PointF());
287 delegated->SetBounds(gfx::Size(10, 10));
288 delegated->SetIsDrawable(true);
289
290 root_->AddChild(delegated);
291 return delegated;
292 }
293
271 virtual void AfterTest() OVERRIDE {} 294 virtual void AfterTest() OVERRIDE {}
272 295
273 // DelegatedRendererLayerClient implementation. 296 // DelegatedRendererLayerClient implementation.
274 virtual void DidCommitFrameData() OVERRIDE {} 297 virtual void DidCommitFrameData() OVERRIDE {}
298
299 // DelegatedFrameProviderClient implementation.
275 virtual void UnusedResourcesAreAvailable() OVERRIDE { available_ = true; } 300 virtual void UnusedResourcesAreAvailable() OVERRIDE { available_ = true; }
276 301
277 bool TestAndResetAvailable() { 302 bool TestAndResetAvailable() {
278 bool available = available_; 303 bool available = available_;
279 available_ = false; 304 available_ = false;
280 return available; 305 return available;
281 } 306 }
282 307
283 protected: 308 protected:
309 scoped_ptr<DelegatedFrameResourceCollection> resource_collection_;
310 scoped_ptr<DelegatedFrameProvider> frame_provider_;
284 scoped_refptr<Layer> root_; 311 scoped_refptr<Layer> root_;
285 scoped_refptr<DelegatedRendererLayer> delegated_; 312 scoped_refptr<DelegatedRendererLayer> delegated_;
286 bool available_; 313 bool available_;
287 }; 314 };
288 315
289 class LayerTreeHostDelegatedTestClientDidCommitCallback 316 class LayerTreeHostDelegatedTestClientDidCommitCallback
290 : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { 317 : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
291 public: 318 public:
292 LayerTreeHostDelegatedTestClientDidCommitCallback() 319 LayerTreeHostDelegatedTestClientDidCommitCallback()
293 : LayerTreeHostDelegatedTestCaseSingleDelegatedLayer(), 320 : LayerTreeHostDelegatedTestCaseSingleDelegatedLayer(),
294 num_did_commit_frame_data_(0) {} 321 num_did_commit_frame_data_(0) {}
295 322
296 virtual void DidCommit() OVERRIDE { 323 virtual void DidCommit() OVERRIDE {
297 if (TestEnded()) 324 if (TestEnded())
298 return; 325 return;
299 326
300 EXPECT_EQ(1, num_did_commit_frame_data_); 327 EXPECT_EQ(1, num_did_commit_frame_data_);
301 EndTest(); 328 EndTest();
302 } 329 }
303 330
304 virtual void BeginTest() OVERRIDE { 331 virtual void BeginTest() OVERRIDE {
305 delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 1, 1), 332 SetFrameData(CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)));
306 gfx::Rect(0, 0, 1, 1)));
307 PostSetNeedsCommitToMainThread(); 333 PostSetNeedsCommitToMainThread();
308 } 334 }
309 335
310 virtual void DidCommitFrameData() OVERRIDE { 336 virtual void DidCommitFrameData() OVERRIDE {
311 num_did_commit_frame_data_++; 337 num_did_commit_frame_data_++;
312 } 338 }
313 339
314 protected: 340 protected:
315 int num_did_commit_frame_data_; 341 int num_did_commit_frame_data_;
316 }; 342 };
317 343
318 SINGLE_AND_MULTI_THREAD_TEST_F( 344 SINGLE_AND_MULTI_THREAD_TEST_F(
319 LayerTreeHostDelegatedTestClientDidCommitCallback); 345 LayerTreeHostDelegatedTestClientDidCommitCallback);
320 346
321 class LayerTreeHostDelegatedTestCreateChildId 347 class LayerTreeHostDelegatedTestCreateChildId
322 : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { 348 : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
323 public: 349 public:
324 LayerTreeHostDelegatedTestCreateChildId() 350 LayerTreeHostDelegatedTestCreateChildId()
325 : LayerTreeHostDelegatedTestCaseSingleDelegatedLayer(), 351 : LayerTreeHostDelegatedTestCaseSingleDelegatedLayer(),
326 num_activates_(0), 352 num_activates_(0),
327 did_reset_child_id_(false) {} 353 did_reset_child_id_(false) {}
328 354
329 virtual void DidCommit() OVERRIDE { 355 virtual void DidCommit() OVERRIDE {
330 if (TestEnded()) 356 if (TestEnded())
331 return; 357 return;
332 delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 1, 1), 358 SetFrameData(CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)));
333 gfx::Rect(0, 0, 1, 1)));
334 } 359 }
335 360
336 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { 361 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
362 if (host_impl->active_tree()->source_frame_number() < 1)
363 return;
364
337 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); 365 LayerImpl* root_impl = host_impl->active_tree()->root_layer();
338 FakeDelegatedRendererLayerImpl* delegated_impl = 366 FakeDelegatedRendererLayerImpl* delegated_impl =
339 static_cast<FakeDelegatedRendererLayerImpl*>(root_impl->children()[0]); 367 static_cast<FakeDelegatedRendererLayerImpl*>(root_impl->children()[0]);
340 368
341 ContextProvider* context_provider = 369 ContextProvider* context_provider =
342 host_impl->output_surface()->context_provider(); 370 host_impl->output_surface()->context_provider();
343 371
344 ++num_activates_; 372 ++num_activates_;
345 switch (num_activates_) { 373 switch (num_activates_) {
346 case 2: 374 case 2:
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 412
385 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestCreateChildId); 413 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestCreateChildId);
386 414
387 class LayerTreeHostDelegatedTestOffscreenContext_NoFilters 415 class LayerTreeHostDelegatedTestOffscreenContext_NoFilters
388 : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { 416 : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
389 protected: 417 protected:
390 virtual void BeginTest() OVERRIDE { 418 virtual void BeginTest() OVERRIDE {
391 scoped_ptr<DelegatedFrameData> frame = 419 scoped_ptr<DelegatedFrameData> frame =
392 CreateFrameData(gfx::Rect(0, 0, 1, 1), 420 CreateFrameData(gfx::Rect(0, 0, 1, 1),
393 gfx::Rect(0, 0, 1, 1)); 421 gfx::Rect(0, 0, 1, 1));
394 delegated_->SetFrameData(frame.Pass()); 422 SetFrameData(frame.Pass());
395 423
396 PostSetNeedsCommitToMainThread(); 424 PostSetNeedsCommitToMainThread();
397 } 425 }
398 426
399 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { 427 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
400 EXPECT_FALSE(host_impl->offscreen_context_provider()); 428 EXPECT_FALSE(host_impl->offscreen_context_provider());
401 EndTest(); 429 EndTest();
402 } 430 }
403 431
404 virtual void AfterTest() OVERRIDE {} 432 virtual void AfterTest() OVERRIDE {}
(...skipping 11 matching lines...) Expand all
416 gfx::Rect(0, 0, 1, 1)); 444 gfx::Rect(0, 0, 1, 1));
417 445
418 FilterOperations filters; 446 FilterOperations filters;
419 filters.Append(FilterOperation::CreateGrayscaleFilter(0.5f)); 447 filters.Append(FilterOperation::CreateGrayscaleFilter(0.5f));
420 AddRenderPass(frame.get(), 448 AddRenderPass(frame.get(),
421 RenderPass::Id(2, 1), 449 RenderPass::Id(2, 1),
422 gfx::Rect(0, 0, 1, 1), 450 gfx::Rect(0, 0, 1, 1),
423 gfx::Rect(0, 0, 1, 1), 451 gfx::Rect(0, 0, 1, 1),
424 filters, 452 filters,
425 FilterOperations()); 453 FilterOperations());
426 delegated_->SetFrameData(frame.Pass()); 454 SetFrameData(frame.Pass());
427 455
428 PostSetNeedsCommitToMainThread(); 456 PostSetNeedsCommitToMainThread();
429 } 457 }
430 458
431 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { 459 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
432 bool expect_context = !delegating_renderer(); 460 bool expect_context = !delegating_renderer();
433 EXPECT_EQ(expect_context, !!host_impl->offscreen_context_provider()); 461 EXPECT_EQ(expect_context, !!host_impl->offscreen_context_provider());
434 EndTest(); 462 EndTest();
435 } 463 }
436 464
(...skipping 12 matching lines...) Expand all
449 gfx::Rect(0, 0, 1, 1)); 477 gfx::Rect(0, 0, 1, 1));
450 478
451 FilterOperations filters; 479 FilterOperations filters;
452 filters.Append(FilterOperation::CreateGrayscaleFilter(0.5f)); 480 filters.Append(FilterOperation::CreateGrayscaleFilter(0.5f));
453 AddRenderPass(frame.get(), 481 AddRenderPass(frame.get(),
454 RenderPass::Id(2, 1), 482 RenderPass::Id(2, 1),
455 gfx::Rect(0, 0, 1, 1), 483 gfx::Rect(0, 0, 1, 1),
456 gfx::Rect(0, 0, 1, 1), 484 gfx::Rect(0, 0, 1, 1),
457 FilterOperations(), 485 FilterOperations(),
458 filters); 486 filters);
459 delegated_->SetFrameData(frame.Pass()); 487 SetFrameData(frame.Pass());
460 488
461 PostSetNeedsCommitToMainThread(); 489 PostSetNeedsCommitToMainThread();
462 } 490 }
463 491
464 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { 492 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
465 bool expect_context = !delegating_renderer(); 493 bool expect_context = !delegating_renderer();
466 EXPECT_EQ(expect_context, !!host_impl->offscreen_context_provider()); 494 EXPECT_EQ(expect_context, !!host_impl->offscreen_context_provider());
467 EndTest(); 495 EndTest();
468 } 496 }
469 497
470 virtual void AfterTest() OVERRIDE {} 498 virtual void AfterTest() OVERRIDE {}
471 }; 499 };
472 500
473 SINGLE_AND_MULTI_THREAD_TEST_F( 501 SINGLE_AND_MULTI_THREAD_TEST_F(
474 LayerTreeHostDelegatedTestOffscreenContext_BackgroundFilters); 502 LayerTreeHostDelegatedTestOffscreenContext_BackgroundFilters);
475 503
476 class LayerTreeHostDelegatedTestOffscreenContext_Filters_AddedToTree 504 class LayerTreeHostDelegatedTestOffscreenContext_Filters_AddedToTree
477 : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { 505 : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
478 protected: 506 protected:
479 virtual void BeginTest() OVERRIDE { 507 virtual void BeginTest() OVERRIDE {
480 scoped_ptr<DelegatedFrameData> frame = 508 scoped_ptr<DelegatedFrameData> frame_no_filters =
481 CreateFrameData(gfx::Rect(0, 0, 1, 1), 509 CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
482 gfx::Rect(0, 0, 1, 1)); 510
511 scoped_ptr<DelegatedFrameData> frame_with_filters =
512 CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
483 513
484 FilterOperations filters; 514 FilterOperations filters;
485 filters.Append(FilterOperation::CreateGrayscaleFilter(0.5f)); 515 filters.Append(FilterOperation::CreateGrayscaleFilter(0.5f));
486 AddRenderPass(frame.get(), 516 AddRenderPass(frame_with_filters.get(),
487 RenderPass::Id(2, 1), 517 RenderPass::Id(2, 1),
488 gfx::Rect(0, 0, 1, 1), 518 gfx::Rect(0, 0, 1, 1),
489 gfx::Rect(0, 0, 1, 1), 519 gfx::Rect(0, 0, 1, 1),
490 filters, 520 filters,
491 FilterOperations()); 521 FilterOperations());
492 522
523 SetFrameData(frame_no_filters.Pass());
493 delegated_->RemoveFromParent(); 524 delegated_->RemoveFromParent();
494 delegated_->SetFrameData(frame.Pass()); 525 SetFrameData(frame_with_filters.Pass());
495 layer_tree_host()->root_layer()->AddChild(delegated_); 526 layer_tree_host()->root_layer()->AddChild(delegated_);
496 527
497 PostSetNeedsCommitToMainThread(); 528 PostSetNeedsCommitToMainThread();
498 } 529 }
499 530
500 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { 531 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
501 bool expect_context = !delegating_renderer(); 532 bool expect_context = !delegating_renderer();
502 EXPECT_EQ(expect_context, !!host_impl->offscreen_context_provider()); 533 EXPECT_EQ(expect_context, !!host_impl->offscreen_context_provider());
503 EndTest(); 534 EndTest();
504 } 535 }
(...skipping 10 matching lines...) Expand all
515 LayerTreeHostDelegatedTestLayerUsesFrameDamage() 546 LayerTreeHostDelegatedTestLayerUsesFrameDamage()
516 : LayerTreeHostDelegatedTestCaseSingleDelegatedLayer(), 547 : LayerTreeHostDelegatedTestCaseSingleDelegatedLayer(),
517 first_draw_for_source_frame_(true) {} 548 first_draw_for_source_frame_(true) {}
518 549
519 virtual void DidCommit() OVERRIDE { 550 virtual void DidCommit() OVERRIDE {
520 int next_source_frame_number = layer_tree_host()->source_frame_number(); 551 int next_source_frame_number = layer_tree_host()->source_frame_number();
521 switch (next_source_frame_number) { 552 switch (next_source_frame_number) {
522 case 1: 553 case 1:
523 // The first time the layer gets a frame the whole layer should be 554 // The first time the layer gets a frame the whole layer should be
524 // damaged. 555 // damaged.
525 delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 1, 1), 556 SetFrameData(
526 gfx::Rect(0, 0, 1, 1))); 557 CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)));
527 break; 558 break;
528 case 2: 559 case 2:
560 // A different frame size will damage the whole layer.
561 SetFrameData(
562 CreateFrameData(gfx::Rect(0, 0, 20, 20), gfx::Rect(0, 0, 0, 0)));
563 break;
564 case 3:
529 // Should create a total amount of gfx::Rect(2, 2, 10, 6) damage. 565 // Should create a total amount of gfx::Rect(2, 2, 10, 6) damage.
530 // The frame size is 20x20 while the layer is 10x10, so this should 566 // The frame size is 20x20 while the layer is 10x10, so this should
531 // produce a gfx::Rect(1, 1, 5, 3) damage rect. 567 // produce a gfx::Rect(1, 1, 5, 3) damage rect.
532 delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 20, 20), 568 SetFrameData(
533 gfx::Rect(2, 2, 5, 5))); 569 CreateFrameData(gfx::Rect(0, 0, 20, 20), gfx::Rect(2, 2, 5, 5)));
534 delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 20, 20), 570 SetFrameData(
535 gfx::Rect(7, 2, 5, 6))); 571 CreateFrameData(gfx::Rect(0, 0, 20, 20), gfx::Rect(7, 2, 5, 6)));
536 break; 572 break;
537 case 3: 573 case 4:
538 // Should create zero damage. 574 // Should create zero damage.
539 layer_tree_host()->SetNeedsCommit(); 575 layer_tree_host()->SetNeedsCommit();
540 break; 576 break;
541 case 4: 577 case 5:
542 // Should damage the full viewport. 578 // Should damage the full viewport.
543 delegated_->SetBounds(gfx::Size(2, 2)); 579 delegated_->SetBounds(gfx::Size(2, 2));
544 break; 580 break;
545 case 5: 581 case 6:
546 // Should create zero damage. 582 // Should create zero damage.
547 layer_tree_host()->SetNeedsCommit(); 583 layer_tree_host()->SetNeedsCommit();
548 break; 584 break;
549 case 6: 585 case 7:
550 // Should damage the full layer. 586 // Should damage the full layer, tho the frame size is not changing.
551 delegated_->SetBounds(gfx::Size(6, 6)); 587 delegated_->SetBounds(gfx::Size(6, 6));
552 delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 5, 5), 588 SetFrameData(
553 gfx::Rect(1, 1, 2, 2))); 589 CreateFrameData(gfx::Rect(0, 0, 20, 20), gfx::Rect(1, 1, 2, 2)));
554 break; 590 break;
555 case 7: 591 case 8:
556 // Should create zero damage. 592 // Should create zero damage.
557 layer_tree_host()->SetNeedsCommit(); 593 layer_tree_host()->SetNeedsCommit();
558 break; 594 break;
559 case 8: 595 case 9:
560 // Should damage the full layer. 596 // Should damage the full layer.
561 delegated_->SetDisplaySize(gfx::Size(10, 10)); 597 delegated_->SetDisplaySize(gfx::Size(10, 10));
562 break; 598 break;
563 case 9: 599 case 10:
564 // Should create zero damage. 600 // Should create zero damage.
565 layer_tree_host()->SetNeedsCommit(); 601 layer_tree_host()->SetNeedsCommit();
566 break; 602 break;
567 case 10:
568 // Setting an empty frame should damage the whole layer the
569 // first time.
570 delegated_->SetFrameData(CreateEmptyFrameData());
571 break;
572 case 11: 603 case 11:
573 // Setting an empty frame shouldn't damage anything after the 604 // Changing the frame size damages the full layer.
574 // first time. 605 SetFrameData(
575 delegated_->SetFrameData(CreateEmptyFrameData()); 606 CreateFrameData(gfx::Rect(0, 0, 5, 5), gfx::Rect(4, 4, 1, 1)));
576 break; 607 break;
577 case 12: 608 case 12:
578 // Having valid content to display agains should damage the whole layer. 609 // An invalid frame isn't used, so it should not cause damage.
579 delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 10, 10), 610 SetFrameData(CreateInvalidFrameData(gfx::Rect(0, 0, 5, 5),
580 gfx::Rect(5, 5, 1, 1))); 611 gfx::Rect(4, 4, 1, 1)));
581 break; 612 break;
582 case 13: 613 case 13:
583 // An invalid frame isn't used, so it should not cause damage.
584 delegated_->SetFrameData(CreateInvalidFrameData(gfx::Rect(0, 0, 10, 10),
585 gfx::Rect(5, 5, 1, 1)));
586 break;
587 case 14:
588 // Should create gfx::Rect(1, 1, 2, 2) of damage. The frame size is 614 // Should create gfx::Rect(1, 1, 2, 2) of damage. The frame size is
589 // 5x5 and the display size is now set to 10x10, so this should result 615 // 5x5 and the display size is now set to 10x10, so this should result
590 // in a gfx::Rect(2, 2, 4, 4) damage rect. 616 // in a gfx::Rect(2, 2, 4, 4) damage rect.
591 delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 5, 5), 617 SetFrameData(
592 gfx::Rect(1, 1, 2, 2))); 618 CreateFrameData(gfx::Rect(0, 0, 5, 5), gfx::Rect(1, 1, 2, 2)));
593 break; 619 break;
594 case 15: 620 case 14:
595 // Should create zero damage. 621 // Should create zero damage.
596 layer_tree_host()->SetNeedsCommit(); 622 layer_tree_host()->SetNeedsCommit();
597 break; 623 break;
598 case 16: 624 case 15:
599 // Moving the layer out of the tree and back in will damage the whole 625 // Moving the layer out of the tree and back in will damage the whole
600 // impl layer. 626 // impl layer.
601 delegated_->RemoveFromParent(); 627 delegated_->RemoveFromParent();
602 layer_tree_host()->root_layer()->AddChild(delegated_); 628 layer_tree_host()->root_layer()->AddChild(delegated_);
603 break; 629 break;
604 case 17: 630 case 16:
605 // Make a larger frame with lots of damage. Then a frame smaller than 631 // Make a larger frame with lots of damage. Then a frame smaller than
606 // the first frame's damage. The entire layer should be damaged, but 632 // the first frame's damage. The entire layer should be damaged, but
607 // nothing more. 633 // nothing more.
608 delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 10, 10), 634 SetFrameData(
609 gfx::Rect(0, 0, 10, 10))); 635 CreateFrameData(gfx::Rect(0, 0, 10, 10), gfx::Rect(0, 0, 10, 10)));
610 delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 5, 5), 636 SetFrameData(
611 gfx::Rect(1, 1, 2, 2))); 637 CreateFrameData(gfx::Rect(0, 0, 5, 5), gfx::Rect(1, 1, 2, 2)));
612 break; 638 break;
613 case 18: 639 case 17:
614 // Make a frame with lots of damage. Then replace it with an empty 640 // Make a frame with lots of damage. Then replace it with a frame with
615 // frame. The entire layer should be damaged, but nothing more. 641 // no damage. The entire layer should be damaged, but nothing more.
616 delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 10, 10), 642 SetFrameData(
617 gfx::Rect(0, 0, 10, 10))); 643 CreateFrameData(gfx::Rect(0, 0, 10, 10), gfx::Rect(0, 0, 10, 10)));
618 delegated_->SetFrameData(CreateEmptyFrameData()); 644 SetFrameData(
645 CreateFrameData(gfx::Rect(0, 0, 10, 10), gfx::Rect(0, 0, 0, 0)));
619 break; 646 break;
620 } 647 }
621 first_draw_for_source_frame_ = true; 648 first_draw_for_source_frame_ = true;
622 } 649 }
623 650
624 virtual bool PrepareToDrawOnThread(LayerTreeHostImpl* host_impl, 651 virtual bool PrepareToDrawOnThread(LayerTreeHostImpl* host_impl,
625 LayerTreeHostImpl::FrameData* frame, 652 LayerTreeHostImpl::FrameData* frame,
626 bool result) OVERRIDE { 653 bool result) OVERRIDE {
627 EXPECT_TRUE(result); 654 EXPECT_TRUE(result);
628 655
(...skipping 12 matching lines...) Expand all
641 case 0: 668 case 0:
642 // First frame is damaged because of viewport resize. 669 // First frame is damaged because of viewport resize.
643 EXPECT_EQ(gfx::RectF(0.f, 0.f, 10.f, 10.f).ToString(), 670 EXPECT_EQ(gfx::RectF(0.f, 0.f, 10.f, 10.f).ToString(),
644 damage_rect.ToString()); 671 damage_rect.ToString());
645 break; 672 break;
646 case 1: 673 case 1:
647 EXPECT_EQ(gfx::RectF(0.f, 0.f, 10.f, 10.f).ToString(), 674 EXPECT_EQ(gfx::RectF(0.f, 0.f, 10.f, 10.f).ToString(),
648 damage_rect.ToString()); 675 damage_rect.ToString());
649 break; 676 break;
650 case 2: 677 case 2:
678 EXPECT_EQ(gfx::RectF(0.f, 0.f, 10.f, 10.f).ToString(),
679 damage_rect.ToString());
680 break;
681 case 3:
651 EXPECT_EQ(gfx::RectF(1.f, 1.f, 5.f, 3.f).ToString(), 682 EXPECT_EQ(gfx::RectF(1.f, 1.f, 5.f, 3.f).ToString(),
652 damage_rect.ToString()); 683 damage_rect.ToString());
653 break; 684 break;
654 case 3: 685 case 4:
655 EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), 686 EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(),
656 damage_rect.ToString()); 687 damage_rect.ToString());
657 break; 688 break;
658 case 4: 689 case 5:
659 EXPECT_EQ(gfx::RectF(0.f, 0.f, 10.f, 10.f).ToString(), 690 EXPECT_EQ(gfx::RectF(0.f, 0.f, 10.f, 10.f).ToString(),
660 damage_rect.ToString()); 691 damage_rect.ToString());
661 break; 692 break;
662 case 5: 693 case 6:
663 EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), 694 EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(),
664 damage_rect.ToString()); 695 damage_rect.ToString());
665 break; 696 break;
666 case 6: 697 case 7:
667 EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(), 698 EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(),
668 damage_rect.ToString()); 699 damage_rect.ToString());
669 break; 700 break;
670 case 7: 701 case 8:
671 EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), 702 EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(),
672 damage_rect.ToString()); 703 damage_rect.ToString());
673 break; 704 break;
674 case 8: 705 case 9:
675 EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(), 706 EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(),
676 damage_rect.ToString()); 707 damage_rect.ToString());
677 break; 708 break;
678 case 9: 709 case 10:
679 EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), 710 EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(),
680 damage_rect.ToString()); 711 damage_rect.ToString());
681 break; 712 break;
682 case 10: 713 case 11:
683 EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(), 714 EXPECT_EQ(gfx::RectF(0.f, 0.f, 10.f, 10.f).ToString(),
684 damage_rect.ToString()); 715 damage_rect.ToString());
685 break; 716 break;
686 case 11: 717 case 12:
687 EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), 718 EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(),
688 damage_rect.ToString()); 719 damage_rect.ToString());
689 break; 720 break;
690 case 12: 721 case 13:
691 EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(), 722 EXPECT_EQ(gfx::RectF(2.f, 2.f, 4.f, 4.f).ToString(),
692 damage_rect.ToString()); 723 damage_rect.ToString());
693 break; 724 break;
694 case 13: 725 case 14:
695 EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), 726 EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(),
696 damage_rect.ToString()); 727 damage_rect.ToString());
697 break; 728 break;
698 case 14:
699 EXPECT_EQ(gfx::RectF(2.f, 2.f, 4.f, 4.f).ToString(),
700 damage_rect.ToString());
701 break;
702 case 15: 729 case 15:
703 EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), 730 EXPECT_EQ(gfx::RectF(0.f, 0.f, 10.f, 10.f).ToString(),
704 damage_rect.ToString()); 731 damage_rect.ToString());
705 break; 732 break;
706 case 16: 733 case 16:
707 EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(), 734 EXPECT_EQ(gfx::RectF(0.f, 0.f, 10.f, 10.f).ToString(),
708 damage_rect.ToString()); 735 damage_rect.ToString());
709 break; 736 break;
710 case 17: 737 case 17:
711 EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(), 738 EXPECT_EQ(gfx::RectF(0.f, 0.f, 10.f, 10.f).ToString(),
712 damage_rect.ToString());
713 break;
714 case 18:
715 EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(),
716 damage_rect.ToString()); 739 damage_rect.ToString());
717 EndTest(); 740 EndTest();
718 break; 741 break;
719 } 742 }
720 743
721 return result; 744 return result;
722 } 745 }
723 746
724 protected: 747 protected:
725 bool first_draw_for_source_frame_; 748 bool first_draw_for_source_frame_;
726 }; 749 };
727 750
728 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestLayerUsesFrameDamage); 751 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestLayerUsesFrameDamage);
729 752
730 class LayerTreeHostDelegatedTestMergeResources 753 class LayerTreeHostDelegatedTestMergeResources
731 : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { 754 : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
732 public: 755 public:
733 virtual void BeginTest() OVERRIDE { 756 virtual void BeginTest() OVERRIDE {
734 // Push two frames to the delegated renderer layer with no commit between. 757 // Push two frames to the delegated renderer layer with no commit between.
735 758
736 // The first frame has resource 999. 759 // The first frame has resource 999.
737 scoped_ptr<DelegatedFrameData> frame1 = 760 scoped_ptr<DelegatedFrameData> frame1 =
738 CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 761 CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
739 AddTextureQuad(frame1.get(), 999); 762 AddTextureQuad(frame1.get(), 999);
740 AddTransferableResource(frame1.get(), 999); 763 AddTransferableResource(frame1.get(), 999);
741 delegated_->SetFrameData(frame1.Pass()); 764 SetFrameData(frame1.Pass());
742 765
743 // The second frame uses resource 999 still, but also adds 555. 766 // The second frame uses resource 999 still, but also adds 555.
744 scoped_ptr<DelegatedFrameData> frame2 = 767 scoped_ptr<DelegatedFrameData> frame2 =
745 CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 768 CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
746 AddTextureQuad(frame2.get(), 999); 769 AddTextureQuad(frame2.get(), 999);
747 AddTransferableResource(frame2.get(), 999); 770 AddTransferableResource(frame2.get(), 999);
748 AddTextureQuad(frame2.get(), 555); 771 AddTextureQuad(frame2.get(), 555);
749 AddTransferableResource(frame2.get(), 555); 772 AddTransferableResource(frame2.get(), 555);
750 delegated_->SetFrameData(frame2.Pass()); 773 SetFrameData(frame2.Pass());
751 774
752 // The resource 999 from frame1 is returned since it is still on the main 775 // The resource 999 from frame1 is returned since it is still on the main
753 // thread. 776 // thread.
754 ReturnedResourceArray returned_resources; 777 ReturnedResourceArray returned_resources;
755 delegated_->TakeUnusedResourcesForChildCompositor(&returned_resources); 778 resource_collection_->TakeUnusedResourcesForChildCompositor(
779 &returned_resources);
756 { 780 {
757 unsigned expected[] = {999}; 781 unsigned expected[] = {999};
758 EXPECT_RESOURCES(expected, returned_resources); 782 EXPECT_RESOURCES(expected, returned_resources);
759 EXPECT_TRUE(TestAndResetAvailable()); 783 EXPECT_TRUE(TestAndResetAvailable());
760 } 784 }
761 785
762 PostSetNeedsCommitToMainThread(); 786 PostSetNeedsCommitToMainThread();
763 } 787 }
764 788
765 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { 789 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
(...skipping 26 matching lines...) Expand all
792 : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { 816 : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
793 public: 817 public:
794 virtual void BeginTest() OVERRIDE { 818 virtual void BeginTest() OVERRIDE {
795 // Generate a frame with two resources in it. 819 // Generate a frame with two resources in it.
796 scoped_ptr<DelegatedFrameData> frame = 820 scoped_ptr<DelegatedFrameData> frame =
797 CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 821 CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
798 AddTextureQuad(frame.get(), 999); 822 AddTextureQuad(frame.get(), 999);
799 AddTransferableResource(frame.get(), 999); 823 AddTransferableResource(frame.get(), 999);
800 AddTextureQuad(frame.get(), 555); 824 AddTextureQuad(frame.get(), 555);
801 AddTransferableResource(frame.get(), 555); 825 AddTransferableResource(frame.get(), 555);
802 delegated_->SetFrameData(frame.Pass()); 826 SetFrameData(frame.Pass());
803 827
804 PostSetNeedsCommitToMainThread(); 828 PostSetNeedsCommitToMainThread();
805 } 829 }
806 830
807 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { 831 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
808 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); 832 LayerImpl* root_impl = host_impl->active_tree()->root_layer();
809 FakeDelegatedRendererLayerImpl* delegated_impl = 833 FakeDelegatedRendererLayerImpl* delegated_impl =
810 static_cast<FakeDelegatedRendererLayerImpl*>(root_impl->children()[0]); 834 static_cast<FakeDelegatedRendererLayerImpl*>(root_impl->children()[0]);
811 835
812 const ResourceProvider::ResourceIdMap& map = 836 const ResourceProvider::ResourceIdMap& map =
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
852 876
853 int next_source_frame_number = layer_tree_host()->source_frame_number(); 877 int next_source_frame_number = layer_tree_host()->source_frame_number();
854 switch (next_source_frame_number) { 878 switch (next_source_frame_number) {
855 case 1: 879 case 1:
856 // Generate a frame with two resources in it. 880 // Generate a frame with two resources in it.
857 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 881 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
858 AddTextureQuad(frame.get(), 999); 882 AddTextureQuad(frame.get(), 999);
859 AddTransferableResource(frame.get(), 999); 883 AddTransferableResource(frame.get(), 999);
860 AddTextureQuad(frame.get(), 555); 884 AddTextureQuad(frame.get(), 555);
861 AddTransferableResource(frame.get(), 555); 885 AddTransferableResource(frame.get(), 555);
862 delegated_->SetFrameData(frame.Pass()); 886 SetFrameData(frame.Pass());
863 break; 887 break;
864 case 2: 888 case 2:
865 // All of the resources are in use. 889 // All of the resources are in use.
866 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 890 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
867 EXPECT_EQ(0u, resources.size()); 891 EXPECT_EQ(0u, resources.size());
868 EXPECT_FALSE(TestAndResetAvailable()); 892 EXPECT_FALSE(TestAndResetAvailable());
869 893
870 // Keep using 999 but stop using 555. 894 // Keep using 999 but stop using 555.
871 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 895 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
872 AddTextureQuad(frame.get(), 999); 896 AddTextureQuad(frame.get(), 999);
873 AddTransferableResource(frame.get(), 999); 897 AddTransferableResource(frame.get(), 999);
874 AddTextureQuad(frame.get(), 444); 898 AddTextureQuad(frame.get(), 444);
875 AddTransferableResource(frame.get(), 444); 899 AddTransferableResource(frame.get(), 444);
876 delegated_->SetFrameData(frame.Pass()); 900 SetFrameData(frame.Pass());
877 break; 901 break;
878 case 3: 902 case 3:
879 // 555 is no longer in use. 903 // 555 is no longer in use.
880 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 904 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
881 { 905 {
882 unsigned expected[] = {555}; 906 unsigned expected[] = {555};
883 EXPECT_RESOURCES(expected, resources); 907 EXPECT_RESOURCES(expected, resources);
884 EXPECT_TRUE(TestAndResetAvailable()); 908 EXPECT_TRUE(TestAndResetAvailable());
885 } 909 }
886 910
887 // Stop using any resources. 911 // Stop using any resources.
888 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 912 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
889 delegated_->SetFrameData(frame.Pass()); 913 SetFrameData(frame.Pass());
890 break; 914 break;
891 case 4: 915 case 4:
892 // Postpone collecting resources for a frame. They should still be there 916 // Postpone collecting resources for a frame. They should still be there
893 // the next frame. 917 // the next frame.
894 layer_tree_host()->SetNeedsCommit(); 918 layer_tree_host()->SetNeedsCommit();
895 return; 919 return;
896 case 5: 920 case 5:
897 // 444 and 999 are no longer in use. We sent two refs to 999, so we 921 // 444 and 999 are no longer in use. We sent two refs to 999, so we
898 // should get two back. 922 // should get two back.
899 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 923 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
900 { 924 {
901 unsigned expected[] = {444, 999, 999}; 925 unsigned expected[] = {444, 999, 999};
902 EXPECT_RESOURCES(expected, resources); 926 EXPECT_RESOURCES(expected, resources);
903 EXPECT_TRUE(TestAndResetAvailable()); 927 EXPECT_TRUE(TestAndResetAvailable());
904 } 928 }
905 EndTest(); 929 EndTest();
906 break; 930 break;
907 } 931 }
908 932
909 // Resources are never immediately released. 933 // Resources are never immediately released.
910 ReturnedResourceArray empty_resources; 934 ReturnedResourceArray empty_resources;
911 delegated_->TakeUnusedResourcesForChildCompositor(&empty_resources); 935 resource_collection_->TakeUnusedResourcesForChildCompositor(
936 &empty_resources);
912 EXPECT_EQ(0u, empty_resources.size()); 937 EXPECT_EQ(0u, empty_resources.size());
913 EXPECT_FALSE(TestAndResetAvailable()); 938 EXPECT_FALSE(TestAndResetAvailable());
914 } 939 }
915 940
916 virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, 941 virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
917 bool result) OVERRIDE { 942 bool result) OVERRIDE {
918 ReturnUnusedResourcesFromParent(host_impl); 943 ReturnUnusedResourcesFromParent(host_impl);
919 } 944 }
920 945
921 virtual void AfterTest() OVERRIDE {} 946 virtual void AfterTest() OVERRIDE {}
(...skipping 17 matching lines...) Expand all
939 switch (next_source_frame_number) { 964 switch (next_source_frame_number) {
940 case 1: 965 case 1:
941 // Generate a frame with some resources in it. 966 // Generate a frame with some resources in it.
942 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 967 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
943 AddTextureQuad(frame.get(), 999); 968 AddTextureQuad(frame.get(), 999);
944 AddTransferableResource(frame.get(), 999); 969 AddTransferableResource(frame.get(), 999);
945 AddTextureQuad(frame.get(), 555); 970 AddTextureQuad(frame.get(), 555);
946 AddTransferableResource(frame.get(), 555); 971 AddTransferableResource(frame.get(), 555);
947 AddTextureQuad(frame.get(), 444); 972 AddTextureQuad(frame.get(), 444);
948 AddTransferableResource(frame.get(), 444); 973 AddTransferableResource(frame.get(), 444);
949 delegated_->SetFrameData(frame.Pass()); 974 SetFrameData(frame.Pass());
950 break; 975 break;
951 case 2: 976 case 2:
952 // All of the resources are in use. 977 // All of the resources are in use.
953 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 978 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
954 EXPECT_EQ(0u, resources.size()); 979 EXPECT_EQ(0u, resources.size());
955 EXPECT_FALSE(TestAndResetAvailable()); 980 EXPECT_FALSE(TestAndResetAvailable());
956 981
957 // Keep using 999 but stop using 555 and 444. 982 // Keep using 999 but stop using 555 and 444.
958 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 983 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
959 AddTextureQuad(frame.get(), 999); 984 AddTextureQuad(frame.get(), 999);
960 AddTransferableResource(frame.get(), 999); 985 AddTransferableResource(frame.get(), 999);
961 delegated_->SetFrameData(frame.Pass()); 986 SetFrameData(frame.Pass());
962 987
963 // Resource are not immediately released. 988 // Resource are not immediately released.
964 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 989 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
965 EXPECT_EQ(0u, resources.size()); 990 EXPECT_EQ(0u, resources.size());
966 EXPECT_FALSE(TestAndResetAvailable()); 991 EXPECT_FALSE(TestAndResetAvailable());
967 992
968 // Now using 555 and 444 again, but not 999. 993 // Now using 555 and 444 again, but not 999.
969 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 994 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
970 AddTextureQuad(frame.get(), 555); 995 AddTextureQuad(frame.get(), 555);
971 AddTransferableResource(frame.get(), 555); 996 AddTransferableResource(frame.get(), 555);
972 AddTextureQuad(frame.get(), 444); 997 AddTextureQuad(frame.get(), 444);
973 AddTransferableResource(frame.get(), 444); 998 AddTransferableResource(frame.get(), 444);
974 delegated_->SetFrameData(frame.Pass()); 999 SetFrameData(frame.Pass());
975 break; 1000 break;
976 case 3: 1001 case 3:
977 // The 999 resource is the only unused one. Two references were sent, so 1002 // The 999 resource is the only unused one. Two references were sent, so
978 // two should be returned. 1003 // two should be returned.
979 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1004 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
980 { 1005 {
981 unsigned expected[] = {999, 999}; 1006 unsigned expected[] = {999, 999};
982 EXPECT_RESOURCES(expected, resources); 1007 EXPECT_RESOURCES(expected, resources);
983 EXPECT_TRUE(TestAndResetAvailable()); 1008 EXPECT_TRUE(TestAndResetAvailable());
984 } 1009 }
985 EndTest(); 1010 EndTest();
986 break; 1011 break;
987 } 1012 }
988 } 1013 }
989 1014
(...skipping 22 matching lines...) Expand all
1012 switch (next_source_frame_number) { 1037 switch (next_source_frame_number) {
1013 case 1: 1038 case 1:
1014 // Generate a frame with some resources in it. 1039 // Generate a frame with some resources in it.
1015 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1040 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1016 AddTextureQuad(frame.get(), 999); 1041 AddTextureQuad(frame.get(), 999);
1017 AddTransferableResource(frame.get(), 999); 1042 AddTransferableResource(frame.get(), 999);
1018 AddTextureQuad(frame.get(), 555); 1043 AddTextureQuad(frame.get(), 555);
1019 AddTransferableResource(frame.get(), 555); 1044 AddTransferableResource(frame.get(), 555);
1020 AddTextureQuad(frame.get(), 444); 1045 AddTextureQuad(frame.get(), 444);
1021 AddTransferableResource(frame.get(), 444); 1046 AddTransferableResource(frame.get(), 444);
1022 delegated_->SetFrameData(frame.Pass()); 1047 SetFrameData(frame.Pass());
1023 break; 1048 break;
1024 case 2: 1049 case 2:
1025 // All of the resources are in use. 1050 // All of the resources are in use.
1026 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1051 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
1027 EXPECT_EQ(0u, resources.size()); 1052 EXPECT_EQ(0u, resources.size());
1028 EXPECT_FALSE(TestAndResetAvailable()); 1053 EXPECT_FALSE(TestAndResetAvailable());
1029 1054
1030 // Keep using 999 but stop using 555 and 444. 1055 // Keep using 999 but stop using 555 and 444.
1031 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1056 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1032 AddTextureQuad(frame.get(), 999); 1057 AddTextureQuad(frame.get(), 999);
1033 AddTransferableResource(frame.get(), 999); 1058 AddTransferableResource(frame.get(), 999);
1034 delegated_->SetFrameData(frame.Pass()); 1059 SetFrameData(frame.Pass());
1035 1060
1036 // Resource are not immediately released. 1061 // Resource are not immediately released.
1037 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1062 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
1038 EXPECT_EQ(0u, resources.size()); 1063 EXPECT_EQ(0u, resources.size());
1039 EXPECT_FALSE(TestAndResetAvailable()); 1064 EXPECT_FALSE(TestAndResetAvailable());
1040 1065
1041 // The parent compositor (this one) does a commit. 1066 // The parent compositor (this one) does a commit.
1042 break; 1067 break;
1043 case 3: 1068 case 3:
1044 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1069 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
1045 { 1070 {
1046 unsigned expected[] = {444, 555}; 1071 unsigned expected[] = {444, 555};
1047 EXPECT_RESOURCES(expected, resources); 1072 EXPECT_RESOURCES(expected, resources);
1048 EXPECT_TRUE(TestAndResetAvailable()); 1073 EXPECT_TRUE(TestAndResetAvailable());
1049 } 1074 }
1050 1075
1051 // The child compositor sends a frame referring to resources not in the 1076 // The child compositor sends a frame referring to resources not in the
1052 // frame. 1077 // frame.
1053 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1078 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1054 AddTextureQuad(frame.get(), 999); 1079 AddTextureQuad(frame.get(), 999);
1055 AddTextureQuad(frame.get(), 555); 1080 AddTextureQuad(frame.get(), 555);
1056 AddTextureQuad(frame.get(), 444); 1081 AddTextureQuad(frame.get(), 444);
1057 delegated_->SetFrameData(frame.Pass()); 1082 SetFrameData(frame.Pass());
1058 break; 1083 break;
1059 } 1084 }
1060 } 1085 }
1061 1086
1062 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { 1087 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
1063 if (host_impl->active_tree()->source_frame_number() != 3) 1088 if (host_impl->active_tree()->source_frame_number() != 3)
1064 return; 1089 return;
1065 1090
1066 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); 1091 LayerImpl* root_impl = host_impl->active_tree()->root_layer();
1067 FakeDelegatedRendererLayerImpl* delegated_impl = 1092 FakeDelegatedRendererLayerImpl* delegated_impl =
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1114 switch (next_source_frame_number) { 1139 switch (next_source_frame_number) {
1115 case 1: 1140 case 1:
1116 // Generate a frame with some resources in it. 1141 // Generate a frame with some resources in it.
1117 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1142 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1118 AddTextureQuad(frame.get(), 999); 1143 AddTextureQuad(frame.get(), 999);
1119 AddTransferableResource(frame.get(), 999); 1144 AddTransferableResource(frame.get(), 999);
1120 AddTextureQuad(frame.get(), 555); 1145 AddTextureQuad(frame.get(), 555);
1121 AddTransferableResource(frame.get(), 555); 1146 AddTransferableResource(frame.get(), 555);
1122 AddTextureQuad(frame.get(), 444); 1147 AddTextureQuad(frame.get(), 444);
1123 AddTransferableResource(frame.get(), 444); 1148 AddTransferableResource(frame.get(), 444);
1124 delegated_->SetFrameData(frame.Pass()); 1149 SetFrameData(frame.Pass());
1125 break; 1150 break;
1126 case 2: 1151 case 2:
1127 // All of the resources are in use. 1152 // All of the resources are in use.
1128 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1153 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
1129 EXPECT_EQ(0u, resources.size()); 1154 EXPECT_EQ(0u, resources.size());
1130 EXPECT_FALSE(TestAndResetAvailable()); 1155 EXPECT_FALSE(TestAndResetAvailable());
1131 1156
1132 // Keep using 999 but stop using 555 and 444. 1157 // Keep using 999 but stop using 555 and 444.
1133 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1158 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1134 AddTextureQuad(frame.get(), 999); 1159 AddTextureQuad(frame.get(), 999);
1135 AddTransferableResource(frame.get(), 999); 1160 AddTransferableResource(frame.get(), 999);
1136 delegated_->SetFrameData(frame.Pass()); 1161 SetFrameData(frame.Pass());
1137 1162
1138 // Resource are not immediately released. 1163 // Resource are not immediately released.
1139 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1164 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
1140 EXPECT_EQ(0u, resources.size()); 1165 EXPECT_EQ(0u, resources.size());
1141 EXPECT_FALSE(TestAndResetAvailable()); 1166 EXPECT_FALSE(TestAndResetAvailable());
1142 1167
1143 // The parent compositor (this one) does a commit. 1168 // The parent compositor (this one) does a commit.
1144 break; 1169 break;
1145 case 3: 1170 case 3:
1146 // The child compositor sends a frame before taking resources back 1171 // The child compositor sends a frame before taking resources back
1147 // from the previous commit. This frame makes use of the resources 555 1172 // from the previous commit. This frame makes use of the resources 555
1148 // and 444, which were just released during commit. 1173 // and 444, which were just released during commit.
1149 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1174 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1150 AddTextureQuad(frame.get(), 999); 1175 AddTextureQuad(frame.get(), 999);
1151 AddTransferableResource(frame.get(), 999); 1176 AddTransferableResource(frame.get(), 999);
1152 AddTextureQuad(frame.get(), 555); 1177 AddTextureQuad(frame.get(), 555);
1153 AddTransferableResource(frame.get(), 555); 1178 AddTransferableResource(frame.get(), 555);
1154 AddTextureQuad(frame.get(), 444); 1179 AddTextureQuad(frame.get(), 444);
1155 AddTransferableResource(frame.get(), 444); 1180 AddTransferableResource(frame.get(), 444);
1156 delegated_->SetFrameData(frame.Pass()); 1181 SetFrameData(frame.Pass());
1157 1182
1158 // The resources are used by the new frame but are returned anyway since 1183 // The resources are used by the new frame but are returned anyway since
1159 // we passed them again. 1184 // we passed them again.
1160 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1185 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
1161 { 1186 {
1162 unsigned expected[] = {444, 555}; 1187 unsigned expected[] = {444, 555};
1163 EXPECT_RESOURCES(expected, resources); 1188 EXPECT_RESOURCES(expected, resources);
1164 EXPECT_TRUE(TestAndResetAvailable()); 1189 EXPECT_TRUE(TestAndResetAvailable());
1165 } 1190 }
1166 break; 1191 break;
1167 case 4: 1192 case 4:
1168 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1193 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
1169 EXPECT_EQ(0u, resources.size()); 1194 EXPECT_EQ(0u, resources.size());
1170 EXPECT_FALSE(TestAndResetAvailable()); 1195 EXPECT_FALSE(TestAndResetAvailable());
1171 EndTest(); 1196 EndTest();
1172 break; 1197 break;
1173 } 1198 }
1174 } 1199 }
1175 1200
1176 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { 1201 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
1177 if (host_impl->active_tree()->source_frame_number() != 3) 1202 if (host_impl->active_tree()->source_frame_number() != 3)
1178 return; 1203 return;
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1234 1259
1235 int next_source_frame_number = layer_tree_host()->source_frame_number(); 1260 int next_source_frame_number = layer_tree_host()->source_frame_number();
1236 switch (next_source_frame_number) { 1261 switch (next_source_frame_number) {
1237 case 1: 1262 case 1:
1238 // Generate a frame with some resources in it. 1263 // Generate a frame with some resources in it.
1239 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1264 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1240 AddTextureQuad(frame.get(), 999); 1265 AddTextureQuad(frame.get(), 999);
1241 AddTransferableResource(frame.get(), 999); 1266 AddTransferableResource(frame.get(), 999);
1242 AddTextureQuad(frame.get(), 555); 1267 AddTextureQuad(frame.get(), 555);
1243 AddTransferableResource(frame.get(), 555); 1268 AddTransferableResource(frame.get(), 555);
1244 delegated_->SetFrameData(frame.Pass()); 1269 SetFrameData(frame.Pass());
1245 break; 1270 break;
1246 case 2: 1271 case 2:
1247 // All of the resources are in use. 1272 // All of the resources are in use.
1248 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1273 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
1249 EXPECT_EQ(0u, resources.size()); 1274 EXPECT_EQ(0u, resources.size());
1250 EXPECT_FALSE(TestAndResetAvailable()); 1275 EXPECT_FALSE(TestAndResetAvailable());
1251 1276
1252 // Generate a bad frame with a resource the layer doesn't have. The 1277 // Generate a bad frame with a resource the layer doesn't have. The
1253 // 885 and 775 resources are unknown, while ownership of the legit 444 1278 // 885 and 775 resources are unknown, while ownership of the legit 444
1254 // resource is passed in here. The bad frame does not use any of the 1279 // resource is passed in here. The bad frame does not use any of the
1255 // previous resources, 999 or 555. 1280 // previous resources, 999 or 555.
1256 // A bad quad is present both before and after the good quad. 1281 // A bad quad is present both before and after the good quad.
1257 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1282 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1258 AddTextureQuad(frame.get(), 885); 1283 AddTextureQuad(frame.get(), 885);
1259 AddTextureQuad(frame.get(), 444); 1284 AddTextureQuad(frame.get(), 444);
1260 AddTransferableResource(frame.get(), 444); 1285 AddTransferableResource(frame.get(), 444);
1261 AddTextureQuad(frame.get(), 775); 1286 AddTextureQuad(frame.get(), 775);
1262 delegated_->SetFrameData(frame.Pass()); 1287 SetFrameData(frame.Pass());
1263 1288
1264 // The parent compositor (this one) does a commit. 1289 // The parent compositor (this one) does a commit.
1265 break; 1290 break;
1266 case 3: 1291 case 3:
1267 // The bad frame's resource is given back to the child compositor. 1292 // The bad frame's resource is given back to the child compositor.
1268 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1293 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
1269 { 1294 {
1270 unsigned expected[] = {444}; 1295 unsigned expected[] = {444};
1271 EXPECT_RESOURCES(expected, resources); 1296 EXPECT_RESOURCES(expected, resources);
1272 EXPECT_TRUE(TestAndResetAvailable()); 1297 EXPECT_TRUE(TestAndResetAvailable());
1273 } 1298 }
1274 1299
1275 // Now send a good frame with 999 again. 1300 // Now send a good frame with 999 again.
1276 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1301 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1277 AddTextureQuad(frame.get(), 999); 1302 AddTextureQuad(frame.get(), 999);
1278 delegated_->SetFrameData(frame.Pass()); 1303 SetFrameData(frame.Pass());
1279 break; 1304 break;
1280 case 4: 1305 case 4:
1281 // The unused 555 from the last good frame is now released. 1306 // The unused 555 from the last good frame is now released.
1282 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1307 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
1283 { 1308 {
1284 unsigned expected[] = {555}; 1309 unsigned expected[] = {555};
1285 EXPECT_RESOURCES(expected, resources); 1310 EXPECT_RESOURCES(expected, resources);
1286 EXPECT_TRUE(TestAndResetAvailable()); 1311 EXPECT_TRUE(TestAndResetAvailable());
1287 } 1312 }
1288 1313
1289 EndTest(); 1314 EndTest();
1290 break; 1315 break;
1291 } 1316 }
1292 } 1317 }
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
1385 ReturnedResourceArray resources; 1410 ReturnedResourceArray resources;
1386 1411
1387 int next_source_frame_number = layer_tree_host()->source_frame_number(); 1412 int next_source_frame_number = layer_tree_host()->source_frame_number();
1388 switch (next_source_frame_number) { 1413 switch (next_source_frame_number) {
1389 case 1: 1414 case 1:
1390 // This frame includes two resources in it, but only uses one. 1415 // This frame includes two resources in it, but only uses one.
1391 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1416 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1392 AddTransferableResource(frame.get(), 999); 1417 AddTransferableResource(frame.get(), 999);
1393 AddTextureQuad(frame.get(), 555); 1418 AddTextureQuad(frame.get(), 555);
1394 AddTransferableResource(frame.get(), 555); 1419 AddTransferableResource(frame.get(), 555);
1395 delegated_->SetFrameData(frame.Pass()); 1420 SetFrameData(frame.Pass());
1396 break; 1421 break;
1397 case 2: 1422 case 2:
1398 // The unused resource should be returned. 1423 // The unused resource should be returned.
1399 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1424 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
1400 { 1425 {
1401 unsigned expected[] = {999}; 1426 unsigned expected[] = {999};
1402 EXPECT_RESOURCES(expected, resources); 1427 EXPECT_RESOURCES(expected, resources);
1403 EXPECT_TRUE(TestAndResetAvailable()); 1428 EXPECT_TRUE(TestAndResetAvailable());
1404 } 1429 }
1405 1430
1406 EndTest(); 1431 EndTest();
1407 break; 1432 break;
1408 } 1433 }
1409 } 1434 }
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1446 1471
1447 int next_source_frame_number = layer_tree_host()->source_frame_number(); 1472 int next_source_frame_number = layer_tree_host()->source_frame_number();
1448 switch (next_source_frame_number) { 1473 switch (next_source_frame_number) {
1449 case 1: 1474 case 1:
1450 // This frame includes two resources in it. 1475 // This frame includes two resources in it.
1451 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1476 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1452 AddTextureQuad(frame.get(), 999); 1477 AddTextureQuad(frame.get(), 999);
1453 AddTransferableResource(frame.get(), 999); 1478 AddTransferableResource(frame.get(), 999);
1454 AddTextureQuad(frame.get(), 555); 1479 AddTextureQuad(frame.get(), 555);
1455 AddTransferableResource(frame.get(), 555); 1480 AddTransferableResource(frame.get(), 555);
1456 delegated_->SetFrameData(frame.Pass()); 1481 SetFrameData(frame.Pass());
1457 1482
1458 // But then we immediately stop using 999. 1483 // But then we immediately stop using 999.
1459 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1484 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1460 AddTextureQuad(frame.get(), 555); 1485 AddTextureQuad(frame.get(), 555);
1461 AddTransferableResource(frame.get(), 555); 1486 AddTransferableResource(frame.get(), 555);
1462 delegated_->SetFrameData(frame.Pass()); 1487 SetFrameData(frame.Pass());
1463 break; 1488 break;
1464 case 2: 1489 case 2:
1465 // The unused resources should be returned. 555 is still used, but it's 1490 // The unused resources should be returned. 555 is still used, but it's
1466 // returned once to account for the first frame. 1491 // returned once to account for the first frame.
1467 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1492 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
1468 { 1493 {
1469 unsigned expected[] = {555, 999}; 1494 unsigned expected[] = {555, 999};
1470 EXPECT_RESOURCES(expected, resources); 1495 EXPECT_RESOURCES(expected, resources);
1471 EXPECT_TRUE(TestAndResetAvailable()); 1496 EXPECT_TRUE(TestAndResetAvailable());
1472 } 1497 }
1473 // Send a frame with no resources in it. 1498 // Send a frame with no resources in it.
1474 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1499 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1475 delegated_->SetFrameData(frame.Pass()); 1500 SetFrameData(frame.Pass());
1476 break; 1501 break;
1477 case 3: 1502 case 3:
1478 // The now unused resource 555 should be returned. 1503 // The now unused resource 555 should be returned.
1479 resources.clear(); 1504 resources.clear();
1480 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1505 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
1481 { 1506 {
1482 unsigned expected[] = {555}; 1507 unsigned expected[] = {555};
1483 EXPECT_RESOURCES(expected, resources); 1508 EXPECT_RESOURCES(expected, resources);
1484 EXPECT_TRUE(TestAndResetAvailable()); 1509 EXPECT_TRUE(TestAndResetAvailable());
1485 } 1510 }
1486 EndTest(); 1511 EndTest();
1487 break; 1512 break;
1488 } 1513 }
1489 } 1514 }
1490 1515
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1527 1552
1528 int next_source_frame_number = layer_tree_host()->source_frame_number(); 1553 int next_source_frame_number = layer_tree_host()->source_frame_number();
1529 switch (next_source_frame_number) { 1554 switch (next_source_frame_number) {
1530 case 1: 1555 case 1:
1531 // This frame includes two resources in it. 1556 // This frame includes two resources in it.
1532 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1557 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1533 AddTextureQuad(frame.get(), 999); 1558 AddTextureQuad(frame.get(), 999);
1534 AddTransferableResource(frame.get(), 999); 1559 AddTransferableResource(frame.get(), 999);
1535 AddTextureQuad(frame.get(), 555); 1560 AddTextureQuad(frame.get(), 555);
1536 AddTransferableResource(frame.get(), 555); 1561 AddTransferableResource(frame.get(), 555);
1537 delegated_->SetFrameData(frame.Pass()); 1562 SetFrameData(frame.Pass());
1538 break; 1563 break;
1539 case 2: 1564 case 2:
1540 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1565 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
1541 EXPECT_EQ(0u, resources.size()); 1566 EXPECT_EQ(0u, resources.size());
1542 EXPECT_FALSE(TestAndResetAvailable()); 1567 EXPECT_FALSE(TestAndResetAvailable());
1543 1568
1544 // 999 is in use in the grandparent compositor, generate a frame without 1569 // 999 is in use in the grandparent compositor, generate a frame without
1545 // it present. 1570 // it present.
1546 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1571 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1547 AddTextureQuad(frame.get(), 555); 1572 AddTextureQuad(frame.get(), 555);
1548 AddTransferableResource(frame.get(), 555); 1573 AddTransferableResource(frame.get(), 555);
1549 delegated_->SetFrameData(frame.Pass()); 1574 SetFrameData(frame.Pass());
1550 break; 1575 break;
1551 case 3: 1576 case 3:
1552 // Since 999 is in the grandparent it is not returned. 1577 // Since 999 is in the grandparent it is not returned.
1553 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1578 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
1554 EXPECT_EQ(0u, resources.size()); 1579 EXPECT_EQ(0u, resources.size());
1555 EXPECT_FALSE(TestAndResetAvailable()); 1580 EXPECT_FALSE(TestAndResetAvailable());
1556 1581
1557 // The impl side will get back the resource at some point. 1582 // The impl side will get back the resource at some point.
1558 ImplThreadTaskRunner()->PostTask(FROM_HERE, 1583 ImplThreadTaskRunner()->PostTask(FROM_HERE,
1559 receive_resource_on_thread_); 1584 receive_resource_on_thread_);
1560 break; 1585 break;
1561 } 1586 }
1562 } 1587 }
1563 1588
(...skipping 12 matching lines...) Expand all
1576 host_impl->ReclaimResources(&ack); 1601 host_impl->ReclaimResources(&ack);
1577 host_impl->OnSwapBuffersComplete(); 1602 host_impl->OnSwapBuffersComplete();
1578 } 1603 }
1579 1604
1580 virtual void UnusedResourcesAreAvailable() OVERRIDE { 1605 virtual void UnusedResourcesAreAvailable() OVERRIDE {
1581 EXPECT_EQ(3, layer_tree_host()->source_frame_number()); 1606 EXPECT_EQ(3, layer_tree_host()->source_frame_number());
1582 1607
1583 ReturnedResourceArray resources; 1608 ReturnedResourceArray resources;
1584 1609
1585 // 999 was returned from the grandparent and could be released. 1610 // 999 was returned from the grandparent and could be released.
1586 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1611 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
1587 { 1612 {
1588 unsigned expected[] = {999}; 1613 unsigned expected[] = {999};
1589 EXPECT_RESOURCES(expected, resources); 1614 EXPECT_RESOURCES(expected, resources);
1590 } 1615 }
1591 1616
1592 EndTest(); 1617 EndTest();
1593 } 1618 }
1594 1619
1595 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { 1620 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
1596 if (host_impl->active_tree()->source_frame_number() < 1) 1621 if (host_impl->active_tree()->source_frame_number() < 1)
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1668 int next_source_frame_number = layer_tree_host()->source_frame_number(); 1693 int next_source_frame_number = layer_tree_host()->source_frame_number();
1669 switch (next_source_frame_number) { 1694 switch (next_source_frame_number) {
1670 case 1: 1695 case 1:
1671 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1696 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1672 AddTextureQuad(frame.get(), 999); 1697 AddTextureQuad(frame.get(), 999);
1673 AddTransferableResource(frame.get(), 999); 1698 AddTransferableResource(frame.get(), 999);
1674 AddTextureQuad(frame.get(), 555); 1699 AddTextureQuad(frame.get(), 555);
1675 AddTransferableResource(frame.get(), 555); 1700 AddTransferableResource(frame.get(), 555);
1676 AddTextureQuad(frame.get(), 444); 1701 AddTextureQuad(frame.get(), 444);
1677 AddTransferableResource(frame.get(), 444); 1702 AddTransferableResource(frame.get(), 444);
1678 delegated_->SetFrameData(frame.Pass()); 1703 SetFrameData(frame.Pass());
1679 break; 1704 break;
1680 case 2: 1705 case 2:
1681 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1706 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
1682 EXPECT_EQ(0u, resources.size()); 1707 EXPECT_EQ(0u, resources.size());
1683 EXPECT_FALSE(TestAndResetAvailable()); 1708 EXPECT_FALSE(TestAndResetAvailable());
1684 1709
1685 // Stop using 999 and 444 in this frame and commit. 1710 // Stop using 999 and 444 in this frame and commit.
1686 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1711 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1687 AddTextureQuad(frame.get(), 555); 1712 AddTextureQuad(frame.get(), 555);
1688 AddTransferableResource(frame.get(), 555); 1713 AddTransferableResource(frame.get(), 555);
1689 delegated_->SetFrameData(frame.Pass()); 1714 SetFrameData(frame.Pass());
1690 // 999 and 444 will be returned for frame 1, but not 555 since it's in 1715 // 999 and 444 will be returned for frame 1, but not 555 since it's in
1691 // the current frame. 1716 // the current frame.
1692 break; 1717 break;
1693 case 3: 1718 case 3:
1694 // Don't take resources here, but set a new frame that uses 999 again. 1719 // Don't take resources here, but set a new frame that uses 999 again.
1695 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1720 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1696 AddTextureQuad(frame.get(), 999); 1721 AddTextureQuad(frame.get(), 999);
1697 AddTransferableResource(frame.get(), 999); 1722 AddTransferableResource(frame.get(), 999);
1698 AddTextureQuad(frame.get(), 555); 1723 AddTextureQuad(frame.get(), 555);
1699 AddTransferableResource(frame.get(), 555); 1724 AddTransferableResource(frame.get(), 555);
1700 delegated_->SetFrameData(frame.Pass()); 1725 SetFrameData(frame.Pass());
1701 break; 1726 break;
1702 case 4: 1727 case 4:
1703 // 555 from frame 1 and 2 isn't returned since it's still in use. 999 1728 // 555 from frame 1 and 2 isn't returned since it's still in use. 999
1704 // from frame 1 is returned though. 1729 // from frame 1 is returned though.
1705 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1730 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
1706 { 1731 {
1707 unsigned expected[] = {444, 999}; 1732 unsigned expected[] = {444, 999};
1708 EXPECT_RESOURCES(expected, resources); 1733 EXPECT_RESOURCES(expected, resources);
1709 EXPECT_TRUE(TestAndResetAvailable()); 1734 EXPECT_TRUE(TestAndResetAvailable());
1710 } 1735 }
1711 1736
1712 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1737 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1713 delegated_->SetFrameData(frame.Pass()); 1738 SetFrameData(frame.Pass());
1714 // 555 will be returned 3 times for frames 1 2 and 3, and 999 will be 1739 // 555 will be returned 3 times for frames 1 2 and 3, and 999 will be
1715 // returned once for frame 3. 1740 // returned once for frame 3.
1716 break; 1741 break;
1717 case 5: 1742 case 5:
1718 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1743 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
1719 { 1744 {
1720 unsigned expected[] = {555, 555, 555, 999}; 1745 unsigned expected[] = {555, 555, 555, 999};
1721 EXPECT_RESOURCES(expected, resources); 1746 EXPECT_RESOURCES(expected, resources);
1722 EXPECT_TRUE(TestAndResetAvailable()); 1747 EXPECT_TRUE(TestAndResetAvailable());
1723 } 1748 }
1724 1749
1725 EndTest(); 1750 EndTest();
1726 break; 1751 break;
1727 } 1752 }
1728 } 1753 }
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1783 wait_thread_.Start(); 1808 wait_thread_.Start();
1784 } 1809 }
1785 1810
1786 virtual void BeginTest() OVERRIDE { 1811 virtual void BeginTest() OVERRIDE {
1787 activate_count_ = 0; 1812 activate_count_ = 0;
1788 1813
1789 scoped_ptr<DelegatedFrameData> frame = 1814 scoped_ptr<DelegatedFrameData> frame =
1790 CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1815 CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1791 AddTextureQuad(frame.get(), 999); 1816 AddTextureQuad(frame.get(), 999);
1792 AddTransferableResource(frame.get(), 999); 1817 AddTransferableResource(frame.get(), 999);
1793 delegated_->SetFrameData(frame.Pass()); 1818 SetFrameData(frame.Pass());
1794 1819
1795 PostSetNeedsCommitToMainThread(); 1820 PostSetNeedsCommitToMainThread();
1796 } 1821 }
1797 1822
1798 virtual void WillActivateTreeOnThread(LayerTreeHostImpl* impl) OVERRIDE { 1823 virtual void WillActivateTreeOnThread(LayerTreeHostImpl* impl) OVERRIDE {
1799 // Slow down activation so the main thread DidCommit() will run if 1824 // Slow down activation so the main thread DidCommit() will run if
1800 // not blocked. 1825 // not blocked.
1801 wait_thread_.message_loop()->PostDelayedTask( 1826 wait_thread_.message_loop()->PostDelayedTask(
1802 FROM_HERE, 1827 FROM_HERE,
1803 base::Bind(&base::WaitableEvent::Signal, 1828 base::Bind(&base::WaitableEvent::Signal,
(...skipping 17 matching lines...) Expand all
1821 void DidActivate() { 1846 void DidActivate() {
1822 base::AutoLock lock(activate_lock_); 1847 base::AutoLock lock(activate_lock_);
1823 switch (activate_count_) { 1848 switch (activate_count_) {
1824 case 1: { 1849 case 1: {
1825 // The first frame has been activated. Set a new frame, and 1850 // The first frame has been activated. Set a new frame, and
1826 // expect the next commit to finish *after* it is activated. 1851 // expect the next commit to finish *after* it is activated.
1827 scoped_ptr<DelegatedFrameData> frame = 1852 scoped_ptr<DelegatedFrameData> frame =
1828 CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1853 CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1829 AddTextureQuad(frame.get(), 555); 1854 AddTextureQuad(frame.get(), 555);
1830 AddTransferableResource(frame.get(), 555); 1855 AddTransferableResource(frame.get(), 555);
1831 delegated_->SetFrameData(frame.Pass()); 1856 SetFrameData(frame.Pass());
1832 // So this commit number should complete after the second activate. 1857 // So this commit number should complete after the second activate.
1833 EXPECT_EQ(1, layer_tree_host()->source_frame_number()); 1858 EXPECT_EQ(1, layer_tree_host()->source_frame_number());
1834 break; 1859 break;
1835 } 1860 }
1836 case 2: 1861 case 2:
1837 // The second frame has been activated. Remove the layer from 1862 // The second frame has been activated. Remove the layer from
1838 // the tree to cause another commit/activation. The commit should 1863 // the tree to cause another commit/activation. The commit should
1839 // finish *after* the layer is removed from the active tree. 1864 // finish *after* the layer is removed from the active tree.
1840 delegated_->RemoveFromParent(); 1865 delegated_->RemoveFromParent();
1841 // So this commit number should complete after the third activate. 1866 // So this commit number should complete after the third activate.
(...skipping 10 matching lines...) Expand all
1852 case 2: { 1877 case 2: {
1853 // The activate for the 2nd frame should have happened before now. 1878 // The activate for the 2nd frame should have happened before now.
1854 base::AutoLock lock(activate_lock_); 1879 base::AutoLock lock(activate_lock_);
1855 EXPECT_EQ(2, activate_count_); 1880 EXPECT_EQ(2, activate_count_);
1856 break; 1881 break;
1857 } 1882 }
1858 case 3: { 1883 case 3: {
1859 // The activate to remove the layer should have happened before now. 1884 // The activate to remove the layer should have happened before now.
1860 base::AutoLock lock(activate_lock_); 1885 base::AutoLock lock(activate_lock_);
1861 EXPECT_EQ(3, activate_count_); 1886 EXPECT_EQ(3, activate_count_);
1887
1888 ReturnedResourceArray resources;
1889 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
1890 {
1891 unsigned expected[] = {999, 555};
1892 EXPECT_RESOURCES(expected, resources);
1893 EXPECT_TRUE(TestAndResetAvailable());
1894 }
1862 break; 1895 break;
1863 } 1896 }
1864 } 1897 }
1865 } 1898 }
1866 1899
1867 1900
1868 virtual void AfterTest() OVERRIDE {} 1901 virtual void AfterTest() OVERRIDE {}
1869 1902
1870 base::Thread wait_thread_; 1903 base::Thread wait_thread_;
1871 base::WaitableEvent wait_event_; 1904 base::WaitableEvent wait_event_;
1872 base::Lock activate_lock_; 1905 base::Lock activate_lock_;
1873 int activate_count_; 1906 int activate_count_;
1874 }; 1907 };
1875 1908
1876 SINGLE_AND_MULTI_THREAD_TEST_F( 1909 SINGLE_AND_MULTI_THREAD_TEST_F(
1877 DelegatedFrameIsActivatedDuringCommit); 1910 DelegatedFrameIsActivatedDuringCommit);
1878 1911
1912 class LayerTreeHostDelegatedTestTwoImplLayers
1913 : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
1914 public:
1915 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
1916
1917 virtual void DidCommitAndDrawFrame() OVERRIDE {
1918 scoped_ptr<DelegatedFrameData> frame;
1919 ReturnedResourceArray resources;
1920
1921 int next_source_frame_number = layer_tree_host()->source_frame_number();
1922 switch (next_source_frame_number) {
1923 case 1:
1924 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1925 AddTextureQuad(frame.get(), 999);
1926 AddTransferableResource(frame.get(), 999);
1927 AddTextureQuad(frame.get(), 555);
1928 AddTransferableResource(frame.get(), 555);
1929 SetFrameData(frame.Pass());
1930 break;
1931 case 2:
1932 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
1933 EXPECT_EQ(0u, resources.size());
1934 EXPECT_FALSE(TestAndResetAvailable());
1935
1936 // Remove the delegated layer and replace it with a new one. Use the
1937 // same frame and resources for it.
1938 delegated_->RemoveFromParent();
1939 delegated_ = CreateDelegatedLayer(frame_provider_.get());
1940 break;
1941 case 3:
1942 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
1943 EXPECT_EQ(0u, resources.size());
1944 EXPECT_FALSE(TestAndResetAvailable());
1945
1946 // Use a frame with no resources in it.
1947 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1948 SetFrameData(frame.Pass());
1949 break;
1950 case 4:
1951 // We gave one frame to the frame provider, so we should get one
1952 // ref back for each resource.
1953 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
1954 {
1955 unsigned expected[] = {555, 999};
1956 EXPECT_RESOURCES(expected, resources);
1957 EXPECT_TRUE(TestAndResetAvailable());
1958 }
1959 EndTest();
1960 break;
1961 }
1962 }
1963
1964 virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
1965 bool result) OVERRIDE {
1966 ReturnUnusedResourcesFromParent(host_impl);
1967 }
1968
1969 virtual void AfterTest() OVERRIDE {}
1970 };
1971
1972 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestTwoImplLayers);
1973
1974 class LayerTreeHostDelegatedTestTwoImplLayersTwoFrames
1975 : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
1976 public:
1977 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
1978
1979 virtual void DidCommitAndDrawFrame() OVERRIDE {
1980 scoped_ptr<DelegatedFrameData> frame;
1981 ReturnedResourceArray resources;
1982
1983 int next_source_frame_number = layer_tree_host()->source_frame_number();
1984 switch (next_source_frame_number) {
1985 case 1:
1986 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1987 AddTextureQuad(frame.get(), 999);
1988 AddTransferableResource(frame.get(), 999);
1989 AddTextureQuad(frame.get(), 555);
1990 AddTransferableResource(frame.get(), 555);
1991 SetFrameData(frame.Pass());
1992 break;
1993 case 2:
1994 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
1995 EXPECT_EQ(0u, resources.size());
1996 EXPECT_FALSE(TestAndResetAvailable());
1997
1998 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1999 AddTextureQuad(frame.get(), 999);
2000 AddTransferableResource(frame.get(), 999);
2001 AddTextureQuad(frame.get(), 555);
2002 AddTransferableResource(frame.get(), 555);
2003
2004 // Remove the delegated layer and replace it with a new one. Make a new
2005 // frame but with the same resources for it.
2006 delegated_->RemoveFromParent();
2007 delegated_ = NULL;
2008
2009 frame_provider_->SetFrameData(frame.Pass());
2010 delegated_ = CreateDelegatedLayer(frame_provider_.get());
2011 break;
2012 case 3:
2013 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
2014 EXPECT_EQ(0u, resources.size());
2015 EXPECT_FALSE(TestAndResetAvailable());
2016
2017 // Use a frame with no resources in it.
2018 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
2019 SetFrameData(frame.Pass());
2020 break;
2021 case 4:
2022 // We gave two frames to the frame provider, so we should get two
2023 // refs back for each resource.
2024 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
2025 {
2026 unsigned expected[] = {555, 555, 999, 999};
2027 EXPECT_RESOURCES(expected, resources);
2028 EXPECT_TRUE(TestAndResetAvailable());
2029 }
2030 EndTest();
2031 break;
2032 }
2033 }
2034
2035 virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
2036 bool result) OVERRIDE {
2037 ReturnUnusedResourcesFromParent(host_impl);
2038 }
2039
2040 virtual void AfterTest() OVERRIDE {}
2041 };
2042
2043 SINGLE_AND_MULTI_THREAD_TEST_F(
2044 LayerTreeHostDelegatedTestTwoImplLayersTwoFrames);
2045
2046 class LayerTreeHostDelegatedTestTwoLayers
2047 : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
2048 public:
2049 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
2050
2051 virtual void DidCommitAndDrawFrame() OVERRIDE {
2052 scoped_ptr<DelegatedFrameData> frame;
2053 ReturnedResourceArray resources;
2054
2055 int next_source_frame_number = layer_tree_host()->source_frame_number();
2056 switch (next_source_frame_number) {
2057 case 1:
2058 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
2059 AddTextureQuad(frame.get(), 999);
2060 AddTransferableResource(frame.get(), 999);
2061 AddTextureQuad(frame.get(), 555);
2062 AddTransferableResource(frame.get(), 555);
2063
2064 // Create a DelegatedRendererLayer using the frame.
2065 SetFrameData(frame.Pass());
2066
2067 // Create a second DelegatedRendererLayer using the same frame provider.
2068 delegated_thief_ = CreateDelegatedLayer(frame_provider_.get());
2069 break;
2070 case 2:
2071 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
2072 EXPECT_EQ(0u, resources.size());
2073 EXPECT_FALSE(TestAndResetAvailable());
2074
2075 // Remove one delegated layer from the tree. No resources should be
2076 // returned yet.
2077 delegated_->RemoveFromParent();
2078 break;
2079 case 3:
2080 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
2081 EXPECT_EQ(0u, resources.size());
2082 EXPECT_FALSE(TestAndResetAvailable());
2083
2084 // Put the first layer back, and remove the other layer. No resources
2085 // should be returned yet.
2086 root_->AddChild(delegated_);
2087 delegated_thief_->RemoveFromParent();
2088 break;
2089 case 4:
2090 // Removing both layers from the tree should cause resources to be
2091 // returned.
2092 delegated_->RemoveFromParent();
2093 break;
2094 case 5:
2095 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
2096 {
2097 unsigned expected[] = {555, 999};
2098 EXPECT_RESOURCES(expected, resources);
2099 EXPECT_TRUE(TestAndResetAvailable());
2100 }
2101 EndTest();
2102 break;
2103 }
2104 }
2105
2106 virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
2107 bool result) OVERRIDE {
2108 ReturnUnusedResourcesFromParent(host_impl);
2109 }
2110
2111 virtual void AfterTest() OVERRIDE {}
2112
2113 scoped_refptr<DelegatedRendererLayer> delegated_thief_;
2114 };
2115
2116 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestTwoLayers);
2117
2118 class LayerTreeHostDelegatedTestTwoLayersAfterCommit
2119 : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
2120 public:
2121 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
2122
2123 virtual void DidCommitAndDrawFrame() OVERRIDE {
2124 scoped_ptr<DelegatedFrameData> frame;
2125 ReturnedResourceArray resources;
2126
2127 int next_source_frame_number = layer_tree_host()->source_frame_number();
2128 switch (next_source_frame_number) {
2129 case 1:
2130 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
2131 AddTextureQuad(frame.get(), 999);
2132 AddTransferableResource(frame.get(), 999);
2133 AddTextureQuad(frame.get(), 555);
2134 AddTransferableResource(frame.get(), 555);
2135
2136 // Create a DelegatedRendererLayer using the frame.
2137 SetFrameData(frame.Pass());
2138 break;
2139 case 2:
2140 // Once the first layer is happily using the frame provider, make
2141 // another layer steal it.
2142 delegated_thief_ = CreateDelegatedLayer(frame_provider_.get());
2143 break;
2144 case 3:
2145 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
2146 EXPECT_EQ(0u, resources.size());
2147 EXPECT_FALSE(TestAndResetAvailable());
2148
2149 // Remove one delegated layer from the tree. No resources should be
2150 // returned yet.
2151 delegated_->RemoveFromParent();
2152 break;
2153 case 4:
2154 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
2155 EXPECT_EQ(0u, resources.size());
2156 EXPECT_FALSE(TestAndResetAvailable());
2157
2158 // Put the first layer back, and remove the other layer. No resources
2159 // should be returned yet.
2160 root_->AddChild(delegated_);
2161 delegated_thief_->RemoveFromParent();
2162 break;
2163 case 5:
2164 // Removing both layers from the tree should cause resources to be
2165 // returned.
2166 delegated_->RemoveFromParent();
2167 break;
2168 case 6:
2169 resource_collection_->TakeUnusedResourcesForChildCompositor(&resources);
2170 {
2171 unsigned expected[] = {555, 999};
2172 EXPECT_RESOURCES(expected, resources);
2173 EXPECT_TRUE(TestAndResetAvailable());
2174 }
2175 EndTest();
2176 break;
2177 }
2178 }
2179
2180 virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
2181 bool result) OVERRIDE {
2182 ReturnUnusedResourcesFromParent(host_impl);
2183 }
2184
2185 virtual void AfterTest() OVERRIDE {}
2186
2187 scoped_refptr<DelegatedRendererLayer> delegated_thief_;
2188 };
2189
2190 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestTwoLayersAfterCommit);
2191
1879 } // namespace 2192 } // namespace
1880 } // namespace cc 2193 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698