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