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