OLD | NEW |
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" |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 resource.mailbox_holder.texture_target = GL_TEXTURE_2D; | 142 resource.mailbox_holder.texture_target = GL_TEXTURE_2D; |
143 GLbyte arbitrary_mailbox[GL_MAILBOX_SIZE_CHROMIUM] = { | 143 GLbyte arbitrary_mailbox[GL_MAILBOX_SIZE_CHROMIUM] = { |
144 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, | 144 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, |
145 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, | 145 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, |
146 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4}; | 146 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4}; |
147 resource.mailbox_holder.mailbox.SetName(arbitrary_mailbox); | 147 resource.mailbox_holder.mailbox.SetName(arbitrary_mailbox); |
148 frame->resource_list.push_back(resource); | 148 frame->resource_list.push_back(resource); |
149 } | 149 } |
150 | 150 |
151 void AddTextureQuad(DelegatedFrameData* frame, ResourceId resource_id) { | 151 void AddTextureQuad(DelegatedFrameData* frame, ResourceId resource_id) { |
152 RenderPass* render_pass = frame->render_pass_list[0]; | 152 RenderPass* render_pass = frame->render_pass_list[0].get(); |
153 SharedQuadState* sqs = render_pass->CreateAndAppendSharedQuadState(); | 153 SharedQuadState* sqs = render_pass->CreateAndAppendSharedQuadState(); |
154 TextureDrawQuad* quad = | 154 TextureDrawQuad* quad = |
155 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); | 155 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
156 float vertex_opacity[4] = { 1.f, 1.f, 1.f, 1.f }; | 156 float vertex_opacity[4] = { 1.f, 1.f, 1.f, 1.f }; |
157 quad->SetNew(sqs, | 157 quad->SetNew(sqs, |
158 gfx::Rect(0, 0, 10, 10), | 158 gfx::Rect(0, 0, 10, 10), |
159 gfx::Rect(0, 0, 10, 10), | 159 gfx::Rect(0, 0, 10, 10), |
160 gfx::Rect(0, 0, 10, 10), | 160 gfx::Rect(0, 0, 10, 10), |
161 resource_id, | 161 resource_id, |
162 false, | 162 false, |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
246 layer_tree_host()->SetRootLayer(root_); | 246 layer_tree_host()->SetRootLayer(root_); |
247 LayerTreeHostDelegatedTest::SetupTree(); | 247 LayerTreeHostDelegatedTest::SetupTree(); |
248 } | 248 } |
249 | 249 |
250 void BeginTest() override { | 250 void BeginTest() override { |
251 resource_collection_->SetClient(this); | 251 resource_collection_->SetClient(this); |
252 PostSetNeedsCommitToMainThread(); | 252 PostSetNeedsCommitToMainThread(); |
253 } | 253 } |
254 | 254 |
255 void SetFrameData(scoped_ptr<DelegatedFrameData> frame_data) { | 255 void SetFrameData(scoped_ptr<DelegatedFrameData> frame_data) { |
256 RenderPass* root_pass = frame_data->render_pass_list.back(); | 256 RenderPass* root_pass = frame_data->render_pass_list.back().get(); |
257 gfx::Size frame_size = root_pass->output_rect.size(); | 257 gfx::Size frame_size = root_pass->output_rect.size(); |
258 | 258 |
259 if (frame_provider_.get() && frame_size == frame_provider_->frame_size()) { | 259 if (frame_provider_.get() && frame_size == frame_provider_->frame_size()) { |
260 frame_provider_->SetFrameData(frame_data.Pass()); | 260 frame_provider_->SetFrameData(frame_data.Pass()); |
261 return; | 261 return; |
262 } | 262 } |
263 | 263 |
264 if (delegated_.get()) { | 264 if (delegated_.get()) { |
265 delegated_->RemoveFromParent(); | 265 delegated_->RemoveFromParent(); |
266 delegated_ = NULL; | 266 delegated_ = NULL; |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
316 return; | 316 return; |
317 SetFrameData(CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1))); | 317 SetFrameData(CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1))); |
318 } | 318 } |
319 | 319 |
320 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { | 320 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { |
321 if (host_impl->active_tree()->source_frame_number() < 1) | 321 if (host_impl->active_tree()->source_frame_number() < 1) |
322 return; | 322 return; |
323 | 323 |
324 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); | 324 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); |
325 FakeDelegatedRendererLayerImpl* delegated_impl = | 325 FakeDelegatedRendererLayerImpl* delegated_impl = |
326 static_cast<FakeDelegatedRendererLayerImpl*>(root_impl->children()[0]); | 326 static_cast<FakeDelegatedRendererLayerImpl*>( |
| 327 root_impl->children()[0].get()); |
327 | 328 |
328 TestContextProvider* context_provider = static_cast<TestContextProvider*>( | 329 TestContextProvider* context_provider = static_cast<TestContextProvider*>( |
329 host_impl->output_surface()->context_provider()); | 330 host_impl->output_surface()->context_provider()); |
330 | 331 |
331 ++num_activates_; | 332 ++num_activates_; |
332 switch (num_activates_) { | 333 switch (num_activates_) { |
333 case 2: | 334 case 2: |
334 EXPECT_TRUE(delegated_impl->ChildId()); | 335 EXPECT_TRUE(delegated_impl->ChildId()); |
335 EXPECT_FALSE(did_reset_child_id_); | 336 EXPECT_FALSE(did_reset_child_id_); |
336 | 337 |
(...skipping 12 matching lines...) Expand all Loading... |
349 | 350 |
350 void InitializedRendererOnThread(LayerTreeHostImpl* host_impl, | 351 void InitializedRendererOnThread(LayerTreeHostImpl* host_impl, |
351 bool success) override { | 352 bool success) override { |
352 EXPECT_TRUE(success); | 353 EXPECT_TRUE(success); |
353 | 354 |
354 if (num_activates_ < 2) | 355 if (num_activates_ < 2) |
355 return; | 356 return; |
356 | 357 |
357 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); | 358 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); |
358 FakeDelegatedRendererLayerImpl* delegated_impl = | 359 FakeDelegatedRendererLayerImpl* delegated_impl = |
359 static_cast<FakeDelegatedRendererLayerImpl*>(root_impl->children()[0]); | 360 static_cast<FakeDelegatedRendererLayerImpl*>( |
| 361 root_impl->children()[0].get()); |
360 | 362 |
361 EXPECT_EQ(2, num_activates_); | 363 EXPECT_EQ(2, num_activates_); |
362 EXPECT_FALSE(delegated_impl->ChildId()); | 364 EXPECT_FALSE(delegated_impl->ChildId()); |
363 did_reset_child_id_ = true; | 365 did_reset_child_id_ = true; |
364 } | 366 } |
365 | 367 |
366 protected: | 368 protected: |
367 int num_activates_; | 369 int num_activates_; |
368 bool did_reset_child_id_; | 370 bool did_reset_child_id_; |
369 }; | 371 }; |
370 | 372 |
371 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestCreateChildId); | 373 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestCreateChildId); |
372 | 374 |
373 class LayerTreeHostDelegatedTestDontUseLostChildIdAfterCommit | 375 class LayerTreeHostDelegatedTestDontUseLostChildIdAfterCommit |
374 : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { | 376 : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { |
375 protected: | 377 protected: |
376 void BeginTest() override { | 378 void BeginTest() override { |
377 SetFrameData(CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1))); | 379 SetFrameData(CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1))); |
378 LayerTreeHostDelegatedTestCaseSingleDelegatedLayer::BeginTest(); | 380 LayerTreeHostDelegatedTestCaseSingleDelegatedLayer::BeginTest(); |
379 } | 381 } |
380 | 382 |
381 void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { | 383 void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { |
382 // Act like the context was lost while the layer is in the pending tree. | 384 // Act like the context was lost while the layer is in the pending tree. |
383 LayerImpl* root_impl = host_impl->sync_tree()->root_layer(); | 385 LayerImpl* root_impl = host_impl->sync_tree()->root_layer(); |
384 FakeDelegatedRendererLayerImpl* delegated_impl = | 386 FakeDelegatedRendererLayerImpl* delegated_impl = |
385 static_cast<FakeDelegatedRendererLayerImpl*>(root_impl->children()[0]); | 387 static_cast<FakeDelegatedRendererLayerImpl*>( |
| 388 root_impl->children()[0].get()); |
386 delegated_impl->ReleaseResources(); | 389 delegated_impl->ReleaseResources(); |
387 } | 390 } |
388 | 391 |
389 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { | 392 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { |
390 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); | 393 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); |
391 FakeDelegatedRendererLayerImpl* delegated_impl = | 394 FakeDelegatedRendererLayerImpl* delegated_impl = |
392 static_cast<FakeDelegatedRendererLayerImpl*>(root_impl->children()[0]); | 395 static_cast<FakeDelegatedRendererLayerImpl*>( |
| 396 root_impl->children()[0].get()); |
393 | 397 |
394 // Should not try to activate a frame without a child id. If we did try to | 398 // Should not try to activate a frame without a child id. If we did try to |
395 // activate we would crash. | 399 // activate we would crash. |
396 EXPECT_FALSE(delegated_impl->ChildId()); | 400 EXPECT_FALSE(delegated_impl->ChildId()); |
397 EndTest(); | 401 EndTest(); |
398 } | 402 } |
399 }; | 403 }; |
400 | 404 |
401 SINGLE_AND_MULTI_THREAD_TEST_F( | 405 SINGLE_AND_MULTI_THREAD_TEST_F( |
402 LayerTreeHostDelegatedTestDontUseLostChildIdAfterCommit); | 406 LayerTreeHostDelegatedTestDontUseLostChildIdAfterCommit); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
455 | 459 |
456 void InitializedRendererOnThread(LayerTreeHostImpl* host_impl, | 460 void InitializedRendererOnThread(LayerTreeHostImpl* host_impl, |
457 bool success) override { | 461 bool success) override { |
458 EXPECT_TRUE(success); | 462 EXPECT_TRUE(success); |
459 | 463 |
460 if (num_activates_ < 2) | 464 if (num_activates_ < 2) |
461 return; | 465 return; |
462 | 466 |
463 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); | 467 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); |
464 FakeDelegatedRendererLayerImpl* delegated_impl = | 468 FakeDelegatedRendererLayerImpl* delegated_impl = |
465 static_cast<FakeDelegatedRendererLayerImpl*>(root_impl->children()[0]); | 469 static_cast<FakeDelegatedRendererLayerImpl*>( |
| 470 root_impl->children()[0].get()); |
466 | 471 |
467 EXPECT_EQ(2, num_activates_); | 472 EXPECT_EQ(2, num_activates_); |
468 // Resources should have gotten cleared after the context was lost. | 473 // Resources should have gotten cleared after the context was lost. |
469 EXPECT_EQ(0U, delegated_impl->Resources().size()); | 474 EXPECT_EQ(0U, delegated_impl->Resources().size()); |
470 } | 475 } |
471 | 476 |
472 void AfterTest() override { | 477 void AfterTest() override { |
473 LayerTreeHostDelegatedTestCaseSingleDelegatedLayer::AfterTest(); | 478 LayerTreeHostDelegatedTestCaseSingleDelegatedLayer::AfterTest(); |
474 EXPECT_EQ(2, num_output_surfaces_initialized_); | 479 EXPECT_EQ(2, num_output_surfaces_initialized_); |
475 } | 480 } |
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
712 EXPECT_RESOURCES(expected, returned_resources); | 717 EXPECT_RESOURCES(expected, returned_resources); |
713 EXPECT_TRUE(TestAndResetAvailable()); | 718 EXPECT_TRUE(TestAndResetAvailable()); |
714 } | 719 } |
715 | 720 |
716 PostSetNeedsCommitToMainThread(); | 721 PostSetNeedsCommitToMainThread(); |
717 } | 722 } |
718 | 723 |
719 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { | 724 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { |
720 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); | 725 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); |
721 FakeDelegatedRendererLayerImpl* delegated_impl = | 726 FakeDelegatedRendererLayerImpl* delegated_impl = |
722 static_cast<FakeDelegatedRendererLayerImpl*>(root_impl->children()[0]); | 727 static_cast<FakeDelegatedRendererLayerImpl*>( |
| 728 root_impl->children()[0].get()); |
723 | 729 |
724 const ResourceProvider::ResourceIdMap& map = | 730 const ResourceProvider::ResourceIdMap& map = |
725 host_impl->resource_provider()->GetChildToParentMap( | 731 host_impl->resource_provider()->GetChildToParentMap( |
726 delegated_impl->ChildId()); | 732 delegated_impl->ChildId()); |
727 | 733 |
728 // Both frames' resources should be in the parent's resource provider. | 734 // Both frames' resources should be in the parent's resource provider. |
729 EXPECT_EQ(2u, map.size()); | 735 EXPECT_EQ(2u, map.size()); |
730 EXPECT_EQ(1u, map.count(999)); | 736 EXPECT_EQ(1u, map.count(999)); |
731 EXPECT_EQ(1u, map.count(555)); | 737 EXPECT_EQ(1u, map.count(555)); |
732 | 738 |
(...skipping 19 matching lines...) Expand all Loading... |
752 AddTextureQuad(frame.get(), 555); | 758 AddTextureQuad(frame.get(), 555); |
753 AddTransferableResource(frame.get(), 555); | 759 AddTransferableResource(frame.get(), 555); |
754 SetFrameData(frame.Pass()); | 760 SetFrameData(frame.Pass()); |
755 | 761 |
756 PostSetNeedsCommitToMainThread(); | 762 PostSetNeedsCommitToMainThread(); |
757 } | 763 } |
758 | 764 |
759 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { | 765 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { |
760 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); | 766 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); |
761 FakeDelegatedRendererLayerImpl* delegated_impl = | 767 FakeDelegatedRendererLayerImpl* delegated_impl = |
762 static_cast<FakeDelegatedRendererLayerImpl*>(root_impl->children()[0]); | 768 static_cast<FakeDelegatedRendererLayerImpl*>( |
| 769 root_impl->children()[0].get()); |
763 | 770 |
764 const ResourceProvider::ResourceIdMap& map = | 771 const ResourceProvider::ResourceIdMap& map = |
765 host_impl->resource_provider()->GetChildToParentMap( | 772 host_impl->resource_provider()->GetChildToParentMap( |
766 delegated_impl->ChildId()); | 773 delegated_impl->ChildId()); |
767 | 774 |
768 // The frame's resource should be in the parent's resource provider. | 775 // The frame's resource should be in the parent's resource provider. |
769 EXPECT_EQ(2u, map.size()); | 776 EXPECT_EQ(2u, map.size()); |
770 EXPECT_EQ(1u, map.count(999)); | 777 EXPECT_EQ(1u, map.count(999)); |
771 EXPECT_EQ(1u, map.count(555)); | 778 EXPECT_EQ(1u, map.count(555)); |
772 | 779 |
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
997 break; | 1004 break; |
998 } | 1005 } |
999 } | 1006 } |
1000 | 1007 |
1001 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { | 1008 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { |
1002 if (host_impl->active_tree()->source_frame_number() != 3) | 1009 if (host_impl->active_tree()->source_frame_number() != 3) |
1003 return; | 1010 return; |
1004 | 1011 |
1005 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); | 1012 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); |
1006 FakeDelegatedRendererLayerImpl* delegated_impl = | 1013 FakeDelegatedRendererLayerImpl* delegated_impl = |
1007 static_cast<FakeDelegatedRendererLayerImpl*>(root_impl->children()[0]); | 1014 static_cast<FakeDelegatedRendererLayerImpl*>( |
| 1015 root_impl->children()[0].get()); |
1008 | 1016 |
1009 const ResourceProvider::ResourceIdMap& map = | 1017 const ResourceProvider::ResourceIdMap& map = |
1010 host_impl->resource_provider()->GetChildToParentMap( | 1018 host_impl->resource_provider()->GetChildToParentMap( |
1011 delegated_impl->ChildId()); | 1019 delegated_impl->ChildId()); |
1012 | 1020 |
1013 // The bad frame should be dropped. So we should only have one quad (the | 1021 // The bad frame should be dropped. So we should only have one quad (the |
1014 // one with resource 999) on the impl tree. And only 999 will be present | 1022 // one with resource 999) on the impl tree. And only 999 will be present |
1015 // in the parent's resource provider. | 1023 // in the parent's resource provider. |
1016 EXPECT_EQ(1u, map.size()); | 1024 EXPECT_EQ(1u, map.size()); |
1017 EXPECT_EQ(1u, map.count(999)); | 1025 EXPECT_EQ(1u, map.count(999)); |
1018 | 1026 |
1019 EXPECT_EQ(1u, delegated_impl->Resources().size()); | 1027 EXPECT_EQ(1u, delegated_impl->Resources().size()); |
1020 EXPECT_EQ(1u, delegated_impl->Resources().count(999)); | 1028 EXPECT_EQ(1u, delegated_impl->Resources().count(999)); |
1021 | 1029 |
1022 const RenderPass* pass = delegated_impl->RenderPassesInDrawOrder()[0]; | 1030 const RenderPass* pass = delegated_impl->RenderPassesInDrawOrder()[0].get(); |
1023 EXPECT_EQ(1u, pass->quad_list.size()); | 1031 EXPECT_EQ(1u, pass->quad_list.size()); |
1024 const TextureDrawQuad* quad = | 1032 const TextureDrawQuad* quad = |
1025 TextureDrawQuad::MaterialCast(pass->quad_list.front()); | 1033 TextureDrawQuad::MaterialCast(pass->quad_list.front()); |
1026 EXPECT_EQ(map.find(999)->second, quad->resource_id()); | 1034 EXPECT_EQ(map.find(999)->second, quad->resource_id()); |
1027 | 1035 |
1028 EndTest(); | 1036 EndTest(); |
1029 } | 1037 } |
1030 | 1038 |
1031 void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { | 1039 void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { |
1032 ReturnUnusedResourcesFromParent(host_impl); | 1040 ReturnUnusedResourcesFromParent(host_impl); |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1106 break; | 1114 break; |
1107 } | 1115 } |
1108 } | 1116 } |
1109 | 1117 |
1110 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { | 1118 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { |
1111 if (host_impl->active_tree()->source_frame_number() != 3) | 1119 if (host_impl->active_tree()->source_frame_number() != 3) |
1112 return; | 1120 return; |
1113 | 1121 |
1114 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); | 1122 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); |
1115 FakeDelegatedRendererLayerImpl* delegated_impl = | 1123 FakeDelegatedRendererLayerImpl* delegated_impl = |
1116 static_cast<FakeDelegatedRendererLayerImpl*>(root_impl->children()[0]); | 1124 static_cast<FakeDelegatedRendererLayerImpl*>( |
| 1125 root_impl->children()[0].get()); |
1117 | 1126 |
1118 const ResourceProvider::ResourceIdMap& map = | 1127 const ResourceProvider::ResourceIdMap& map = |
1119 host_impl->resource_provider()->GetChildToParentMap( | 1128 host_impl->resource_provider()->GetChildToParentMap( |
1120 delegated_impl->ChildId()); | 1129 delegated_impl->ChildId()); |
1121 | 1130 |
1122 // The third frame has all of the resources in it again, the delegated | 1131 // The third frame has all of the resources in it again, the delegated |
1123 // renderer layer should continue to own the resources for it. | 1132 // renderer layer should continue to own the resources for it. |
1124 EXPECT_EQ(3u, map.size()); | 1133 EXPECT_EQ(3u, map.size()); |
1125 EXPECT_EQ(1u, map.count(999)); | 1134 EXPECT_EQ(1u, map.count(999)); |
1126 EXPECT_EQ(1u, map.count(555)); | 1135 EXPECT_EQ(1u, map.count(555)); |
1127 EXPECT_EQ(1u, map.count(444)); | 1136 EXPECT_EQ(1u, map.count(444)); |
1128 | 1137 |
1129 EXPECT_EQ(3u, delegated_impl->Resources().size()); | 1138 EXPECT_EQ(3u, delegated_impl->Resources().size()); |
1130 EXPECT_EQ(1u, delegated_impl->Resources().count(999)); | 1139 EXPECT_EQ(1u, delegated_impl->Resources().count(999)); |
1131 EXPECT_EQ(1u, delegated_impl->Resources().count(555)); | 1140 EXPECT_EQ(1u, delegated_impl->Resources().count(555)); |
1132 EXPECT_EQ(1u, delegated_impl->Resources().count(444)); | 1141 EXPECT_EQ(1u, delegated_impl->Resources().count(444)); |
1133 | 1142 |
1134 const RenderPass* pass = delegated_impl->RenderPassesInDrawOrder()[0]; | 1143 const RenderPass* pass = delegated_impl->RenderPassesInDrawOrder()[0].get(); |
1135 EXPECT_EQ(3u, pass->quad_list.size()); | 1144 EXPECT_EQ(3u, pass->quad_list.size()); |
1136 const TextureDrawQuad* quad1 = | 1145 const TextureDrawQuad* quad1 = |
1137 TextureDrawQuad::MaterialCast(pass->quad_list.ElementAt(0)); | 1146 TextureDrawQuad::MaterialCast(pass->quad_list.ElementAt(0)); |
1138 EXPECT_EQ(map.find(999)->second, quad1->resource_id()); | 1147 EXPECT_EQ(map.find(999)->second, quad1->resource_id()); |
1139 const TextureDrawQuad* quad2 = | 1148 const TextureDrawQuad* quad2 = |
1140 TextureDrawQuad::MaterialCast(pass->quad_list.ElementAt(1)); | 1149 TextureDrawQuad::MaterialCast(pass->quad_list.ElementAt(1)); |
1141 EXPECT_EQ(map.find(555)->second, quad2->resource_id()); | 1150 EXPECT_EQ(map.find(555)->second, quad2->resource_id()); |
1142 const TextureDrawQuad* quad3 = | 1151 const TextureDrawQuad* quad3 = |
1143 TextureDrawQuad::MaterialCast(pass->quad_list.ElementAt(2)); | 1152 TextureDrawQuad::MaterialCast(pass->quad_list.ElementAt(2)); |
1144 EXPECT_EQ(map.find(444)->second, quad3->resource_id()); | 1153 EXPECT_EQ(map.find(444)->second, quad3->resource_id()); |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1225 } | 1234 } |
1226 | 1235 |
1227 void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { | 1236 void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, bool result) override { |
1228 if (host_impl->active_tree()->source_frame_number() < 1) | 1237 if (host_impl->active_tree()->source_frame_number() < 1) |
1229 return; | 1238 return; |
1230 | 1239 |
1231 ReturnUnusedResourcesFromParent(host_impl); | 1240 ReturnUnusedResourcesFromParent(host_impl); |
1232 | 1241 |
1233 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); | 1242 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); |
1234 FakeDelegatedRendererLayerImpl* delegated_impl = | 1243 FakeDelegatedRendererLayerImpl* delegated_impl = |
1235 static_cast<FakeDelegatedRendererLayerImpl*>(root_impl->children()[0]); | 1244 static_cast<FakeDelegatedRendererLayerImpl*>( |
| 1245 root_impl->children()[0].get()); |
1236 | 1246 |
1237 const ResourceProvider::ResourceIdMap& map = | 1247 const ResourceProvider::ResourceIdMap& map = |
1238 host_impl->resource_provider()->GetChildToParentMap( | 1248 host_impl->resource_provider()->GetChildToParentMap( |
1239 delegated_impl->ChildId()); | 1249 delegated_impl->ChildId()); |
1240 | 1250 |
1241 switch (host_impl->active_tree()->source_frame_number()) { | 1251 switch (host_impl->active_tree()->source_frame_number()) { |
1242 case 1: { | 1252 case 1: { |
1243 // We have the first good frame with just 999 and 555 in it. | 1253 // We have the first good frame with just 999 and 555 in it. |
1244 // layer. | 1254 // layer. |
1245 EXPECT_EQ(2u, map.size()); | 1255 EXPECT_EQ(2u, map.size()); |
1246 EXPECT_EQ(1u, map.count(999)); | 1256 EXPECT_EQ(1u, map.count(999)); |
1247 EXPECT_EQ(1u, map.count(555)); | 1257 EXPECT_EQ(1u, map.count(555)); |
1248 | 1258 |
1249 EXPECT_EQ(2u, delegated_impl->Resources().size()); | 1259 EXPECT_EQ(2u, delegated_impl->Resources().size()); |
1250 EXPECT_EQ(1u, delegated_impl->Resources().count(999)); | 1260 EXPECT_EQ(1u, delegated_impl->Resources().count(999)); |
1251 EXPECT_EQ(1u, delegated_impl->Resources().count(555)); | 1261 EXPECT_EQ(1u, delegated_impl->Resources().count(555)); |
1252 | 1262 |
1253 const RenderPass* pass = delegated_impl->RenderPassesInDrawOrder()[0]; | 1263 const RenderPass* pass = |
| 1264 delegated_impl->RenderPassesInDrawOrder()[0].get(); |
1254 EXPECT_EQ(2u, pass->quad_list.size()); | 1265 EXPECT_EQ(2u, pass->quad_list.size()); |
1255 const TextureDrawQuad* quad1 = | 1266 const TextureDrawQuad* quad1 = |
1256 TextureDrawQuad::MaterialCast(pass->quad_list.ElementAt(0)); | 1267 TextureDrawQuad::MaterialCast(pass->quad_list.ElementAt(0)); |
1257 EXPECT_EQ(map.find(999)->second, quad1->resource_id()); | 1268 EXPECT_EQ(map.find(999)->second, quad1->resource_id()); |
1258 const TextureDrawQuad* quad2 = | 1269 const TextureDrawQuad* quad2 = |
1259 TextureDrawQuad::MaterialCast(pass->quad_list.ElementAt(1)); | 1270 TextureDrawQuad::MaterialCast(pass->quad_list.ElementAt(1)); |
1260 EXPECT_EQ(map.find(555)->second, quad2->resource_id()); | 1271 EXPECT_EQ(map.find(555)->second, quad2->resource_id()); |
1261 break; | 1272 break; |
1262 } | 1273 } |
1263 case 2: { | 1274 case 2: { |
1264 // We only keep resources from the last valid frame. | 1275 // We only keep resources from the last valid frame. |
1265 EXPECT_EQ(2u, map.size()); | 1276 EXPECT_EQ(2u, map.size()); |
1266 EXPECT_EQ(1u, map.count(999)); | 1277 EXPECT_EQ(1u, map.count(999)); |
1267 EXPECT_EQ(1u, map.count(555)); | 1278 EXPECT_EQ(1u, map.count(555)); |
1268 | 1279 |
1269 EXPECT_EQ(2u, delegated_impl->Resources().size()); | 1280 EXPECT_EQ(2u, delegated_impl->Resources().size()); |
1270 EXPECT_EQ(1u, delegated_impl->Resources().count(999)); | 1281 EXPECT_EQ(1u, delegated_impl->Resources().count(999)); |
1271 EXPECT_EQ(1u, delegated_impl->Resources().count(555)); | 1282 EXPECT_EQ(1u, delegated_impl->Resources().count(555)); |
1272 | 1283 |
1273 // The bad frame is dropped though, we still have the frame with 999 and | 1284 // The bad frame is dropped though, we still have the frame with 999 and |
1274 // 555 in it. | 1285 // 555 in it. |
1275 const RenderPass* pass = delegated_impl->RenderPassesInDrawOrder()[0]; | 1286 const RenderPass* pass = |
| 1287 delegated_impl->RenderPassesInDrawOrder()[0].get(); |
1276 EXPECT_EQ(2u, pass->quad_list.size()); | 1288 EXPECT_EQ(2u, pass->quad_list.size()); |
1277 const TextureDrawQuad* quad1 = | 1289 const TextureDrawQuad* quad1 = |
1278 TextureDrawQuad::MaterialCast(pass->quad_list.ElementAt(0)); | 1290 TextureDrawQuad::MaterialCast(pass->quad_list.ElementAt(0)); |
1279 EXPECT_EQ(map.find(999)->second, quad1->resource_id()); | 1291 EXPECT_EQ(map.find(999)->second, quad1->resource_id()); |
1280 const TextureDrawQuad* quad2 = | 1292 const TextureDrawQuad* quad2 = |
1281 TextureDrawQuad::MaterialCast(pass->quad_list.ElementAt(1)); | 1293 TextureDrawQuad::MaterialCast(pass->quad_list.ElementAt(1)); |
1282 EXPECT_EQ(map.find(555)->second, quad2->resource_id()); | 1294 EXPECT_EQ(map.find(555)->second, quad2->resource_id()); |
1283 break; | 1295 break; |
1284 } | 1296 } |
1285 case 3: { | 1297 case 3: { |
1286 // We have the new good frame with just 999 in it. | 1298 // We have the new good frame with just 999 in it. |
1287 EXPECT_EQ(1u, map.size()); | 1299 EXPECT_EQ(1u, map.size()); |
1288 EXPECT_EQ(1u, map.count(999)); | 1300 EXPECT_EQ(1u, map.count(999)); |
1289 | 1301 |
1290 EXPECT_EQ(1u, delegated_impl->Resources().size()); | 1302 EXPECT_EQ(1u, delegated_impl->Resources().size()); |
1291 EXPECT_EQ(1u, delegated_impl->Resources().count(999)); | 1303 EXPECT_EQ(1u, delegated_impl->Resources().count(999)); |
1292 | 1304 |
1293 const RenderPass* pass = delegated_impl->RenderPassesInDrawOrder()[0]; | 1305 const RenderPass* pass = |
| 1306 delegated_impl->RenderPassesInDrawOrder()[0].get(); |
1294 EXPECT_EQ(1u, pass->quad_list.size()); | 1307 EXPECT_EQ(1u, pass->quad_list.size()); |
1295 const TextureDrawQuad* quad1 = | 1308 const TextureDrawQuad* quad1 = |
1296 TextureDrawQuad::MaterialCast(pass->quad_list.front()); | 1309 TextureDrawQuad::MaterialCast(pass->quad_list.front()); |
1297 EXPECT_EQ(map.find(999)->second, quad1->resource_id()); | 1310 EXPECT_EQ(map.find(999)->second, quad1->resource_id()); |
1298 break; | 1311 break; |
1299 } | 1312 } |
1300 } | 1313 } |
1301 } | 1314 } |
1302 }; | 1315 }; |
1303 | 1316 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1343 break; | 1356 break; |
1344 } | 1357 } |
1345 } | 1358 } |
1346 | 1359 |
1347 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { | 1360 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { |
1348 if (host_impl->active_tree()->source_frame_number() != 1) | 1361 if (host_impl->active_tree()->source_frame_number() != 1) |
1349 return; | 1362 return; |
1350 | 1363 |
1351 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); | 1364 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); |
1352 FakeDelegatedRendererLayerImpl* delegated_impl = | 1365 FakeDelegatedRendererLayerImpl* delegated_impl = |
1353 static_cast<FakeDelegatedRendererLayerImpl*>(root_impl->children()[0]); | 1366 static_cast<FakeDelegatedRendererLayerImpl*>( |
| 1367 root_impl->children()[0].get()); |
1354 | 1368 |
1355 const ResourceProvider::ResourceIdMap& map = | 1369 const ResourceProvider::ResourceIdMap& map = |
1356 host_impl->resource_provider()->GetChildToParentMap( | 1370 host_impl->resource_provider()->GetChildToParentMap( |
1357 delegated_impl->ChildId()); | 1371 delegated_impl->ChildId()); |
1358 | 1372 |
1359 // The layer only held on to the resource that was used. | 1373 // The layer only held on to the resource that was used. |
1360 EXPECT_EQ(1u, map.size()); | 1374 EXPECT_EQ(1u, map.size()); |
1361 EXPECT_EQ(1u, map.count(555)); | 1375 EXPECT_EQ(1u, map.count(555)); |
1362 | 1376 |
1363 EXPECT_EQ(1u, delegated_impl->Resources().size()); | 1377 EXPECT_EQ(1u, delegated_impl->Resources().size()); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1419 break; | 1433 break; |
1420 } | 1434 } |
1421 } | 1435 } |
1422 | 1436 |
1423 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { | 1437 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { |
1424 if (host_impl->active_tree()->source_frame_number() != 1) | 1438 if (host_impl->active_tree()->source_frame_number() != 1) |
1425 return; | 1439 return; |
1426 | 1440 |
1427 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); | 1441 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); |
1428 FakeDelegatedRendererLayerImpl* delegated_impl = | 1442 FakeDelegatedRendererLayerImpl* delegated_impl = |
1429 static_cast<FakeDelegatedRendererLayerImpl*>(root_impl->children()[0]); | 1443 static_cast<FakeDelegatedRendererLayerImpl*>( |
| 1444 root_impl->children()[0].get()); |
1430 | 1445 |
1431 const ResourceProvider::ResourceIdMap& map = | 1446 const ResourceProvider::ResourceIdMap& map = |
1432 host_impl->resource_provider()->GetChildToParentMap( | 1447 host_impl->resource_provider()->GetChildToParentMap( |
1433 delegated_impl->ChildId()); | 1448 delegated_impl->ChildId()); |
1434 | 1449 |
1435 // The layer only held on to the resource that was used. | 1450 // The layer only held on to the resource that was used. |
1436 EXPECT_EQ(1u, map.size()); | 1451 EXPECT_EQ(1u, map.size()); |
1437 EXPECT_EQ(1u, map.count(555)); | 1452 EXPECT_EQ(1u, map.count(555)); |
1438 | 1453 |
1439 EXPECT_EQ(1u, delegated_impl->Resources().size()); | 1454 EXPECT_EQ(1u, delegated_impl->Resources().size()); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1486 // The impl side will get back the resource at some point. | 1501 // The impl side will get back the resource at some point. |
1487 ImplThreadTaskRunner()->PostTask(FROM_HERE, | 1502 ImplThreadTaskRunner()->PostTask(FROM_HERE, |
1488 receive_resource_on_thread_); | 1503 receive_resource_on_thread_); |
1489 break; | 1504 break; |
1490 } | 1505 } |
1491 } | 1506 } |
1492 | 1507 |
1493 void ReceiveResourceOnThread(LayerTreeHostImpl* host_impl) { | 1508 void ReceiveResourceOnThread(LayerTreeHostImpl* host_impl) { |
1494 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); | 1509 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); |
1495 FakeDelegatedRendererLayerImpl* delegated_impl = | 1510 FakeDelegatedRendererLayerImpl* delegated_impl = |
1496 static_cast<FakeDelegatedRendererLayerImpl*>(root_impl->children()[0]); | 1511 static_cast<FakeDelegatedRendererLayerImpl*>( |
| 1512 root_impl->children()[0].get()); |
1497 | 1513 |
1498 const ResourceProvider::ResourceIdMap& map = | 1514 const ResourceProvider::ResourceIdMap& map = |
1499 host_impl->resource_provider()->GetChildToParentMap( | 1515 host_impl->resource_provider()->GetChildToParentMap( |
1500 delegated_impl->ChildId()); | 1516 delegated_impl->ChildId()); |
1501 | 1517 |
1502 // Receive 999 back from the grandparent. | 1518 // Receive 999 back from the grandparent. |
1503 CompositorFrameAck ack; | 1519 CompositorFrameAck ack; |
1504 output_surface()->ReturnResource(map.find(999)->second, &ack); | 1520 output_surface()->ReturnResource(map.find(999)->second, &ack); |
1505 host_impl->ReclaimResources(&ack); | 1521 host_impl->ReclaimResources(&ack); |
1506 } | 1522 } |
(...skipping 12 matching lines...) Expand all Loading... |
1519 | 1535 |
1520 EndTest(); | 1536 EndTest(); |
1521 } | 1537 } |
1522 | 1538 |
1523 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { | 1539 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { |
1524 if (host_impl->active_tree()->source_frame_number() < 1) | 1540 if (host_impl->active_tree()->source_frame_number() < 1) |
1525 return; | 1541 return; |
1526 | 1542 |
1527 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); | 1543 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); |
1528 FakeDelegatedRendererLayerImpl* delegated_impl = | 1544 FakeDelegatedRendererLayerImpl* delegated_impl = |
1529 static_cast<FakeDelegatedRendererLayerImpl*>(root_impl->children()[0]); | 1545 static_cast<FakeDelegatedRendererLayerImpl*>( |
| 1546 root_impl->children()[0].get()); |
1530 | 1547 |
1531 const ResourceProvider::ResourceIdMap& map = | 1548 const ResourceProvider::ResourceIdMap& map = |
1532 host_impl->resource_provider()->GetChildToParentMap( | 1549 host_impl->resource_provider()->GetChildToParentMap( |
1533 delegated_impl->ChildId()); | 1550 delegated_impl->ChildId()); |
1534 | 1551 |
1535 switch (host_impl->active_tree()->source_frame_number()) { | 1552 switch (host_impl->active_tree()->source_frame_number()) { |
1536 case 1: { | 1553 case 1: { |
1537 EXPECT_EQ(2u, map.size()); | 1554 EXPECT_EQ(2u, map.size()); |
1538 EXPECT_EQ(1u, map.count(999)); | 1555 EXPECT_EQ(1u, map.count(999)); |
1539 EXPECT_EQ(1u, map.count(555)); | 1556 EXPECT_EQ(1u, map.count(555)); |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1652 break; | 1669 break; |
1653 } | 1670 } |
1654 } | 1671 } |
1655 | 1672 |
1656 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { | 1673 void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { |
1657 if (host_impl->active_tree()->source_frame_number() < 1) | 1674 if (host_impl->active_tree()->source_frame_number() < 1) |
1658 return; | 1675 return; |
1659 | 1676 |
1660 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); | 1677 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); |
1661 FakeDelegatedRendererLayerImpl* delegated_impl = | 1678 FakeDelegatedRendererLayerImpl* delegated_impl = |
1662 static_cast<FakeDelegatedRendererLayerImpl*>(root_impl->children()[0]); | 1679 static_cast<FakeDelegatedRendererLayerImpl*>( |
| 1680 root_impl->children()[0].get()); |
1663 | 1681 |
1664 const ResourceProvider::ResourceIdMap& map = | 1682 const ResourceProvider::ResourceIdMap& map = |
1665 host_impl->resource_provider()->GetChildToParentMap( | 1683 host_impl->resource_provider()->GetChildToParentMap( |
1666 delegated_impl->ChildId()); | 1684 delegated_impl->ChildId()); |
1667 | 1685 |
1668 switch (host_impl->active_tree()->source_frame_number()) { | 1686 switch (host_impl->active_tree()->source_frame_number()) { |
1669 case 1: | 1687 case 1: |
1670 EXPECT_EQ(3u, map.size()); | 1688 EXPECT_EQ(3u, map.size()); |
1671 EXPECT_EQ(1u, map.count(999)); | 1689 EXPECT_EQ(1u, map.count(999)); |
1672 EXPECT_EQ(1u, map.count(555)); | 1690 EXPECT_EQ(1u, map.count(555)); |
(...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2197 break; | 2215 break; |
2198 } | 2216 } |
2199 } | 2217 } |
2200 | 2218 |
2201 void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override { | 2219 void DrawLayersOnThread(LayerTreeHostImpl* host_impl) override { |
2202 if (host_impl->active_tree()->source_frame_number() < 1) | 2220 if (host_impl->active_tree()->source_frame_number() < 1) |
2203 return; | 2221 return; |
2204 | 2222 |
2205 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); | 2223 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); |
2206 FakeDelegatedRendererLayerImpl* delegated_impl = | 2224 FakeDelegatedRendererLayerImpl* delegated_impl = |
2207 static_cast<FakeDelegatedRendererLayerImpl*>(root_impl->children()[0]); | 2225 static_cast<FakeDelegatedRendererLayerImpl*>( |
| 2226 root_impl->children()[0].get()); |
2208 const ResourceProvider::ResourceIdMap& map = | 2227 const ResourceProvider::ResourceIdMap& map = |
2209 host_impl->resource_provider()->GetChildToParentMap( | 2228 host_impl->resource_provider()->GetChildToParentMap( |
2210 delegated_impl->ChildId()); | 2229 delegated_impl->ChildId()); |
2211 | 2230 |
2212 switch (host_impl->active_tree()->source_frame_number()) { | 2231 switch (host_impl->active_tree()->source_frame_number()) { |
2213 case 1: | 2232 case 1: |
2214 if (!host_impl->pending_tree()) { | 2233 if (!host_impl->pending_tree()) { |
2215 // Frame 2 is blocked from activating until another draw happens with | 2234 // Frame 2 is blocked from activating until another draw happens with |
2216 // Frame 1. This ensures we draw a different active frame from | 2235 // Frame 1. This ensures we draw a different active frame from |
2217 // what's in the pending tree. | 2236 // what's in the pending tree. |
(...skipping 26 matching lines...) Expand all Loading... |
2244 } | 2263 } |
2245 | 2264 |
2246 bool drew_with_pending_tree_; | 2265 bool drew_with_pending_tree_; |
2247 }; | 2266 }; |
2248 | 2267 |
2249 // This test blocks activation which is not supported for single thread mode. | 2268 // This test blocks activation which is not supported for single thread mode. |
2250 MULTI_THREAD_BLOCKNOTIFY_TEST_F(LayerTreeHostDelegatedTestActiveFrameIsValid); | 2269 MULTI_THREAD_BLOCKNOTIFY_TEST_F(LayerTreeHostDelegatedTestActiveFrameIsValid); |
2251 | 2270 |
2252 } // namespace | 2271 } // namespace |
2253 } // namespace cc | 2272 } // namespace cc |
OLD | NEW |