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

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

Powered by Google App Engine
This is Rietveld 408576698