| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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 "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 8 #include "cc/layers/content_layer.h" | 8 #include "cc/layers/content_layer.h" |
| 9 #include "cc/layers/delegated_frame_provider.h" | 9 #include "cc/layers/delegated_frame_provider.h" |
| 10 #include "cc/layers/delegated_frame_resource_collection.h" | 10 #include "cc/layers/delegated_frame_resource_collection.h" |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 70 void LoseContext() { | 70 void LoseContext() { |
| 71 context3d_->loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB, | 71 context3d_->loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB, |
| 72 GL_INNOCENT_CONTEXT_RESET_ARB); | 72 GL_INNOCENT_CONTEXT_RESET_ARB); |
| 73 context3d_ = NULL; | 73 context3d_ = NULL; |
| 74 } | 74 } |
| 75 | 75 |
| 76 virtual scoped_ptr<TestWebGraphicsContext3D> CreateContext3d() { | 76 virtual scoped_ptr<TestWebGraphicsContext3D> CreateContext3d() { |
| 77 return TestWebGraphicsContext3D::Create(); | 77 return TestWebGraphicsContext3D::Create(); |
| 78 } | 78 } |
| 79 | 79 |
| 80 virtual scoped_ptr<OutputSurface> CreateOutputSurface(bool fallback) | 80 virtual scoped_ptr<FakeOutputSurface> CreateFakeOutputSurfaceForTest( |
| 81 OVERRIDE { | 81 bool fallback) OVERRIDE { |
| 82 if (times_to_fail_create_) { | 82 if (times_to_fail_create_) { |
| 83 --times_to_fail_create_; | 83 --times_to_fail_create_; |
| 84 ExpectCreateToFail(); | 84 ExpectCreateToFail(); |
| 85 return scoped_ptr<OutputSurface>(); | 85 return scoped_ptr<FakeOutputSurface>(); |
| 86 } | 86 } |
| 87 | 87 |
| 88 scoped_ptr<TestWebGraphicsContext3D> context3d = CreateContext3d(); | 88 scoped_ptr<TestWebGraphicsContext3D> context3d = CreateContext3d(); |
| 89 context3d_ = context3d.get(); | 89 context3d_ = context3d.get(); |
| 90 | 90 |
| 91 if (context_should_support_io_surface_) { | 91 if (context_should_support_io_surface_) { |
| 92 context3d_->set_have_extension_io_surface(true); | 92 context3d_->set_have_extension_io_surface(true); |
| 93 context3d_->set_have_extension_egl_image(true); | 93 context3d_->set_have_extension_egl_image(true); |
| 94 } | 94 } |
| 95 | 95 |
| 96 if (delegating_renderer()) { | 96 if (delegating_renderer()) |
| 97 return FakeOutputSurface::CreateDelegating3d(context3d.Pass()) | 97 return FakeOutputSurface::CreateDelegating3d(context3d.Pass()); |
| 98 .PassAs<OutputSurface>(); | 98 else |
| 99 } | 99 return FakeOutputSurface::Create3d(context3d.Pass()); |
| 100 return FakeOutputSurface::Create3d(context3d.Pass()) | |
| 101 .PassAs<OutputSurface>(); | |
| 102 } | 100 } |
| 103 | 101 |
| 104 scoped_ptr<TestWebGraphicsContext3D> CreateOffscreenContext3d() { | 102 scoped_ptr<TestWebGraphicsContext3D> CreateOffscreenContext3d() { |
| 105 if (!context3d_) | 103 if (!context3d_) |
| 106 return scoped_ptr<TestWebGraphicsContext3D>(); | 104 return scoped_ptr<TestWebGraphicsContext3D>(); |
| 107 | 105 |
| 108 ++times_offscreen_created_; | 106 ++times_offscreen_created_; |
| 109 | 107 |
| 110 if (times_to_fail_create_offscreen_) { | 108 if (times_to_fail_create_offscreen_) { |
| 111 --times_to_fail_create_offscreen_; | 109 --times_to_fail_create_offscreen_; |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 164 | 162 |
| 165 virtual void DidFailToInitializeOutputSurface() OVERRIDE { | 163 virtual void DidFailToInitializeOutputSurface() OVERRIDE { |
| 166 ++times_create_failed_; | 164 ++times_create_failed_; |
| 167 } | 165 } |
| 168 | 166 |
| 169 virtual void TearDown() OVERRIDE { | 167 virtual void TearDown() OVERRIDE { |
| 170 LayerTreeTest::TearDown(); | 168 LayerTreeTest::TearDown(); |
| 171 EXPECT_EQ(times_to_expect_create_failed_, times_create_failed_); | 169 EXPECT_EQ(times_to_expect_create_failed_, times_create_failed_); |
| 172 } | 170 } |
| 173 | 171 |
| 174 void ExpectCreateToFail() { | 172 void ExpectCreateToFail() { ++times_to_expect_create_failed_; } |
| 175 ++times_to_expect_create_failed_; | |
| 176 } | |
| 177 | 173 |
| 178 protected: | 174 protected: |
| 179 TestWebGraphicsContext3D* context3d_; | 175 TestWebGraphicsContext3D* context3d_; |
| 180 int times_to_fail_create_; | 176 int times_to_fail_create_; |
| 181 int times_to_lose_during_commit_; | 177 int times_to_lose_during_commit_; |
| 182 int times_to_lose_during_draw_; | 178 int times_to_lose_during_draw_; |
| 183 int times_to_fail_recreate_; | 179 int times_to_fail_recreate_; |
| 184 int times_to_fail_create_offscreen_; | 180 int times_to_fail_create_offscreen_; |
| 185 int times_to_fail_recreate_offscreen_; | 181 int times_to_fail_recreate_offscreen_; |
| 186 int times_to_expect_create_failed_; | 182 int times_to_expect_create_failed_; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 197 : public LayerTreeHostContextTest { | 193 : public LayerTreeHostContextTest { |
| 198 public: | 194 public: |
| 199 LayerTreeHostContextTestLostContextSucceeds() | 195 LayerTreeHostContextTestLostContextSucceeds() |
| 200 : LayerTreeHostContextTest(), | 196 : LayerTreeHostContextTest(), |
| 201 test_case_(0), | 197 test_case_(0), |
| 202 num_losses_(0), | 198 num_losses_(0), |
| 203 num_losses_last_test_case_(-1), | 199 num_losses_last_test_case_(-1), |
| 204 recovered_context_(true), | 200 recovered_context_(true), |
| 205 first_initialized_(false) {} | 201 first_initialized_(false) {} |
| 206 | 202 |
| 207 virtual void BeginTest() OVERRIDE { | 203 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); } |
| 208 PostSetNeedsCommitToMainThread(); | |
| 209 } | |
| 210 | 204 |
| 211 virtual void DidInitializeOutputSurface(bool succeeded) OVERRIDE { | 205 virtual void DidInitializeOutputSurface(bool succeeded) OVERRIDE { |
| 212 EXPECT_TRUE(succeeded); | 206 EXPECT_TRUE(succeeded); |
| 213 | 207 |
| 214 if (first_initialized_) | 208 if (first_initialized_) |
| 215 ++num_losses_; | 209 ++num_losses_; |
| 216 else | 210 else |
| 217 first_initialized_ = true; | 211 first_initialized_ = true; |
| 218 | 212 |
| 219 recovered_context_ = true; | 213 recovered_context_ = true; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 239 } | 233 } |
| 240 | 234 |
| 241 virtual void InvalidateAndSetNeedsCommit() { | 235 virtual void InvalidateAndSetNeedsCommit() { |
| 242 // Cause damage so we try to draw. | 236 // Cause damage so we try to draw. |
| 243 layer_tree_host()->root_layer()->SetNeedsDisplay(); | 237 layer_tree_host()->root_layer()->SetNeedsDisplay(); |
| 244 layer_tree_host()->SetNeedsCommit(); | 238 layer_tree_host()->SetNeedsCommit(); |
| 245 } | 239 } |
| 246 | 240 |
| 247 bool NextTestCase() { | 241 bool NextTestCase() { |
| 248 static const TestCase kTests[] = { | 242 static const TestCase kTests[] = { |
| 249 // Losing the context and failing to recreate it (or losing it again | 243 // Losing the context and failing to recreate it (or losing it again |
| 250 // immediately) a small number of times should succeed. | 244 // immediately) a small number of times should succeed. |
| 251 { 1, // times_to_lose_during_commit | 245 {1, // times_to_lose_during_commit |
| 252 0, // times_to_lose_during_draw | 246 0, // times_to_lose_during_draw |
| 253 0, // times_to_fail_recreate | 247 0, // times_to_fail_recreate |
| 254 0, // times_to_fail_recreate_offscreen | 248 0, // times_to_fail_recreate_offscreen |
| 255 false, // fallback_context_works | 249 false, // fallback_context_works |
| 256 }, | 250 }, |
| 257 { 0, // times_to_lose_during_commit | 251 {0, // times_to_lose_during_commit |
| 258 1, // times_to_lose_during_draw | 252 1, // times_to_lose_during_draw |
| 259 0, // times_to_fail_recreate | 253 0, // times_to_fail_recreate |
| 260 0, // times_to_fail_recreate_offscreen | 254 0, // times_to_fail_recreate_offscreen |
| 261 false, // fallback_context_works | 255 false, // fallback_context_works |
| 262 }, | 256 }, |
| 263 { 1, // times_to_lose_during_commit | 257 {1, // times_to_lose_during_commit |
| 264 0, // times_to_lose_during_draw | 258 0, // times_to_lose_during_draw |
| 265 3, // times_to_fail_recreate | 259 3, // times_to_fail_recreate |
| 266 0, // times_to_fail_recreate_offscreen | 260 0, // times_to_fail_recreate_offscreen |
| 267 false, // fallback_context_works | 261 false, // fallback_context_works |
| 268 }, | 262 }, |
| 269 { 0, // times_to_lose_during_commit | 263 {0, // times_to_lose_during_commit |
| 270 1, // times_to_lose_during_draw | 264 1, // times_to_lose_during_draw |
| 271 3, // times_to_fail_recreate | 265 3, // times_to_fail_recreate |
| 272 0, // times_to_fail_recreate_offscreen | 266 0, // times_to_fail_recreate_offscreen |
| 273 false, // fallback_context_works | 267 false, // fallback_context_works |
| 274 }, | 268 }, |
| 275 { 1, // times_to_lose_during_commit | 269 {1, // times_to_lose_during_commit |
| 276 0, // times_to_lose_during_draw | 270 0, // times_to_lose_during_draw |
| 277 0, // times_to_fail_recreate | 271 0, // times_to_fail_recreate |
| 278 3, // times_to_fail_recreate_offscreen | 272 3, // times_to_fail_recreate_offscreen |
| 279 false, // fallback_context_works | 273 false, // fallback_context_works |
| 280 }, | 274 }, |
| 281 { 0, // times_to_lose_during_commit | 275 {0, // times_to_lose_during_commit |
| 282 1, // times_to_lose_during_draw | 276 1, // times_to_lose_during_draw |
| 283 0, // times_to_fail_recreate | 277 0, // times_to_fail_recreate |
| 284 3, // times_to_fail_recreate_offscreen | 278 3, // times_to_fail_recreate_offscreen |
| 285 false, // fallback_context_works | 279 false, // fallback_context_works |
| 286 }, | 280 }, |
| 287 // Losing the context and recreating it any number of times should | 281 // Losing the context and recreating it any number of times should |
| 288 // succeed. | 282 // succeed. |
| 289 { 10, // times_to_lose_during_commit | 283 {10, // times_to_lose_during_commit |
| 290 0, // times_to_lose_during_draw | 284 0, // times_to_lose_during_draw |
| 291 0, // times_to_fail_recreate | 285 0, // times_to_fail_recreate |
| 292 0, // times_to_fail_recreate_offscreen | 286 0, // times_to_fail_recreate_offscreen |
| 293 false, // fallback_context_works | 287 false, // fallback_context_works |
| 294 }, | 288 }, |
| 295 { 0, // times_to_lose_during_commit | 289 {0, // times_to_lose_during_commit |
| 296 10, // times_to_lose_during_draw | 290 10, // times_to_lose_during_draw |
| 297 0, // times_to_fail_recreate | 291 0, // times_to_fail_recreate |
| 298 0, // times_to_fail_recreate_offscreen | 292 0, // times_to_fail_recreate_offscreen |
| 299 false, // fallback_context_works | 293 false, // fallback_context_works |
| 300 }, | 294 }, |
| 301 // Losing the context, failing to reinitialize it, and making a fallback | 295 // Losing the context, failing to reinitialize it, and making a fallback |
| 302 // context should work. | 296 // context should work. |
| 303 { 0, // times_to_lose_during_commit | 297 {0, // times_to_lose_during_commit |
| 304 1, // times_to_lose_during_draw | 298 1, // times_to_lose_during_draw |
| 305 0, // times_to_fail_recreate | 299 0, // times_to_fail_recreate |
| 306 0, // times_to_fail_recreate_offscreen | 300 0, // times_to_fail_recreate_offscreen |
| 307 true, // fallback_context_works | 301 true, // fallback_context_works |
| 308 }, | 302 }, }; |
| 309 }; | |
| 310 | 303 |
| 311 if (test_case_ >= arraysize(kTests)) | 304 if (test_case_ >= arraysize(kTests)) |
| 312 return false; | 305 return false; |
| 313 // Make sure that we lost our context at least once in the last test run so | 306 // Make sure that we lost our context at least once in the last test run so |
| 314 // the test did something. | 307 // the test did something. |
| 315 EXPECT_GT(num_losses_, num_losses_last_test_case_); | 308 EXPECT_GT(num_losses_, num_losses_last_test_case_); |
| 316 num_losses_last_test_case_ = num_losses_; | 309 num_losses_last_test_case_ = num_losses_; |
| 317 | 310 |
| 318 times_to_lose_during_commit_ = | 311 times_to_lose_during_commit_ = |
| 319 kTests[test_case_].times_to_lose_during_commit; | 312 kTests[test_case_].times_to_lose_during_commit; |
| 320 times_to_lose_during_draw_ = | 313 times_to_lose_during_draw_ = kTests[test_case_].times_to_lose_during_draw; |
| 321 kTests[test_case_].times_to_lose_during_draw; | |
| 322 times_to_fail_recreate_ = kTests[test_case_].times_to_fail_recreate; | 314 times_to_fail_recreate_ = kTests[test_case_].times_to_fail_recreate; |
| 323 times_to_fail_recreate_offscreen_ = | 315 times_to_fail_recreate_offscreen_ = |
| 324 kTests[test_case_].times_to_fail_recreate_offscreen; | 316 kTests[test_case_].times_to_fail_recreate_offscreen; |
| 325 fallback_context_works_ = kTests[test_case_].fallback_context_works; | 317 fallback_context_works_ = kTests[test_case_].fallback_context_works; |
| 326 ++test_case_; | 318 ++test_case_; |
| 327 return true; | 319 return true; |
| 328 } | 320 } |
| 329 | 321 |
| 330 struct TestCase { | 322 struct TestCase { |
| 331 int times_to_lose_during_commit; | 323 int times_to_lose_during_commit; |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 419 FakeContentLayerImpl* content_impl = static_cast<FakeContentLayerImpl*>( | 411 FakeContentLayerImpl* content_impl = static_cast<FakeContentLayerImpl*>( |
| 420 host_impl->active_tree()->root_layer()->children()[0]); | 412 host_impl->active_tree()->root_layer()->children()[0]); |
| 421 // Even though the context was lost, we should have a resource. The | 413 // Even though the context was lost, we should have a resource. The |
| 422 // TestWebGraphicsContext3D ensures that this resource is created with | 414 // TestWebGraphicsContext3D ensures that this resource is created with |
| 423 // the active context. | 415 // the active context. |
| 424 EXPECT_TRUE(content_impl->HaveResourceForTileAt(0, 0)); | 416 EXPECT_TRUE(content_impl->HaveResourceForTileAt(0, 0)); |
| 425 | 417 |
| 426 ContextProvider* contexts = host_impl->offscreen_context_provider(); | 418 ContextProvider* contexts = host_impl->offscreen_context_provider(); |
| 427 if (use_surface_) { | 419 if (use_surface_) { |
| 428 ASSERT_TRUE(contexts); | 420 ASSERT_TRUE(contexts); |
| 429 EXPECT_TRUE(contexts->Context3d()); | 421 EXPECT_TRUE(contexts->ContextGL()); |
| 430 // TODO(danakj): Make a fake GrContext. | 422 // TODO(danakj): Make a fake GrContext. |
| 431 // EXPECT_TRUE(contexts->GrContext()); | 423 // EXPECT_TRUE(contexts->GrContext()); |
| 432 } else { | 424 } else { |
| 433 EXPECT_FALSE(contexts); | 425 EXPECT_FALSE(contexts); |
| 434 } | 426 } |
| 435 } | 427 } |
| 436 | 428 |
| 437 virtual void AfterTest() OVERRIDE { | 429 virtual void AfterTest() OVERRIDE { |
| 438 LayerTreeHostContextTestLostContextSucceeds::AfterTest(); | 430 LayerTreeHostContextTestLostContextSucceeds::AfterTest(); |
| 439 if (use_surface_) { | 431 if (use_surface_) { |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 630 scoped_refptr<Layer> root_; | 622 scoped_refptr<Layer> root_; |
| 631 scoped_refptr<ContentLayer> content_; | 623 scoped_refptr<ContentLayer> content_; |
| 632 }; | 624 }; |
| 633 | 625 |
| 634 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostContextTestOffscreenContextFails); | 626 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostContextTestOffscreenContextFails); |
| 635 | 627 |
| 636 class LayerTreeHostContextTestLostContextFails | 628 class LayerTreeHostContextTestLostContextFails |
| 637 : public LayerTreeHostContextTest { | 629 : public LayerTreeHostContextTest { |
| 638 public: | 630 public: |
| 639 LayerTreeHostContextTestLostContextFails() | 631 LayerTreeHostContextTestLostContextFails() |
| 640 : LayerTreeHostContextTest(), | 632 : LayerTreeHostContextTest(), num_commits_(0), first_initialized_(false) { |
| 641 num_commits_(0), | |
| 642 first_initialized_(false) { | |
| 643 times_to_lose_during_commit_ = 1; | 633 times_to_lose_during_commit_ = 1; |
| 644 } | 634 } |
| 645 | 635 |
| 646 virtual void BeginTest() OVERRIDE { | 636 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); } |
| 647 PostSetNeedsCommitToMainThread(); | |
| 648 } | |
| 649 | 637 |
| 650 virtual void DidInitializeOutputSurface(bool succeeded) OVERRIDE { | 638 virtual void DidInitializeOutputSurface(bool succeeded) OVERRIDE { |
| 651 if (first_initialized_) { | 639 if (first_initialized_) { |
| 652 EXPECT_FALSE(succeeded); | 640 EXPECT_FALSE(succeeded); |
| 653 EndTest(); | 641 EndTest(); |
| 654 } else { | 642 } else { |
| 655 first_initialized_ = true; | 643 first_initialized_ = true; |
| 656 } | 644 } |
| 657 } | 645 } |
| 658 | 646 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 689 layer_(FakeContentLayer::Create(&client_)), | 677 layer_(FakeContentLayer::Create(&client_)), |
| 690 impl_host_(0), | 678 impl_host_(0), |
| 691 num_commits_(0) {} | 679 num_commits_(0) {} |
| 692 | 680 |
| 693 virtual void SetupTree() OVERRIDE { | 681 virtual void SetupTree() OVERRIDE { |
| 694 layer_->SetBounds(gfx::Size(10, 20)); | 682 layer_->SetBounds(gfx::Size(10, 20)); |
| 695 layer_tree_host()->SetRootLayer(layer_); | 683 layer_tree_host()->SetRootLayer(layer_); |
| 696 LayerTreeHostContextTest::SetupTree(); | 684 LayerTreeHostContextTest::SetupTree(); |
| 697 } | 685 } |
| 698 | 686 |
| 699 virtual void BeginTest() OVERRIDE { | 687 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); } |
| 700 PostSetNeedsCommitToMainThread(); | |
| 701 } | |
| 702 | 688 |
| 703 void PostEvictTextures() { | 689 void PostEvictTextures() { |
| 704 if (HasImplThread()) { | 690 if (HasImplThread()) { |
| 705 ImplThreadTaskRunner()->PostTask( | 691 ImplThreadTaskRunner()->PostTask( |
| 706 FROM_HERE, | 692 FROM_HERE, |
| 707 base::Bind( | 693 base::Bind(&LayerTreeHostContextTestLostContextAndEvictTextures:: |
| 708 &LayerTreeHostContextTestLostContextAndEvictTextures:: | 694 EvictTexturesOnImplThread, |
| 709 EvictTexturesOnImplThread, | 695 base::Unretained(this))); |
| 710 base::Unretained(this))); | |
| 711 } else { | 696 } else { |
| 712 DebugScopedSetImplThread impl(proxy()); | 697 DebugScopedSetImplThread impl(proxy()); |
| 713 EvictTexturesOnImplThread(); | 698 EvictTexturesOnImplThread(); |
| 714 } | 699 } |
| 715 } | 700 } |
| 716 | 701 |
| 717 void EvictTexturesOnImplThread() { | 702 void EvictTexturesOnImplThread() { |
| 718 impl_host_->EvictTexturesForTesting(); | 703 impl_host_->EvictTexturesForTesting(); |
| 719 if (lose_after_evict_) | 704 if (lose_after_evict_) |
| 720 LoseContext(); | 705 LoseContext(); |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 845 FakeContentLayer::Create(&client_); | 830 FakeContentLayer::Create(&client_); |
| 846 child->SetPosition(gfx::PointF(i, 0.f)); | 831 child->SetPosition(gfx::PointF(i, 0.f)); |
| 847 child->SetBounds(gfx::Size(1, 1)); | 832 child->SetBounds(gfx::Size(1, 1)); |
| 848 parent_->AddChild(child); | 833 parent_->AddChild(child); |
| 849 } | 834 } |
| 850 | 835 |
| 851 layer_tree_host()->SetRootLayer(parent_); | 836 layer_tree_host()->SetRootLayer(parent_); |
| 852 LayerTreeHostContextTest::SetupTree(); | 837 LayerTreeHostContextTest::SetupTree(); |
| 853 } | 838 } |
| 854 | 839 |
| 855 virtual void BeginTest() OVERRIDE { | 840 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); } |
| 856 PostSetNeedsCommitToMainThread(); | |
| 857 } | |
| 858 | 841 |
| 859 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { | 842 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { |
| 860 EXPECT_EQ(0, times_to_lose_on_end_query_); | 843 EXPECT_EQ(0, times_to_lose_on_end_query_); |
| 861 EndTest(); | 844 EndTest(); |
| 862 } | 845 } |
| 863 | 846 |
| 864 virtual void DidInitializeOutputSurface(bool succeeded) OVERRIDE { | 847 virtual void DidInitializeOutputSurface(bool succeeded) OVERRIDE { |
| 865 EXPECT_TRUE(succeeded); | 848 EXPECT_TRUE(succeeded); |
| 866 } | 849 } |
| 867 | 850 |
| 868 virtual void AfterTest() OVERRIDE { | 851 virtual void AfterTest() OVERRIDE { |
| 869 EXPECT_EQ(0, times_to_lose_on_end_query_); | 852 EXPECT_EQ(0, times_to_lose_on_end_query_); |
| 870 } | 853 } |
| 871 | 854 |
| 872 private: | 855 private: |
| 873 FakeContentLayerClient client_; | 856 FakeContentLayerClient client_; |
| 874 scoped_refptr<FakeContentLayer> parent_; | 857 scoped_refptr<FakeContentLayer> parent_; |
| 875 int num_children_; | 858 int num_children_; |
| 876 int times_to_lose_on_end_query_; | 859 int times_to_lose_on_end_query_; |
| 877 }; | 860 }; |
| 878 | 861 |
| 879 SINGLE_AND_MULTI_THREAD_NOIMPL_TEST_F( | 862 SINGLE_AND_MULTI_THREAD_NOIMPL_TEST_F( |
| 880 LayerTreeHostContextTestLostContextWhileUpdatingResources); | 863 LayerTreeHostContextTestLostContextWhileUpdatingResources); |
| 881 | 864 |
| 882 class LayerTreeHostContextTestLayersNotified | 865 class LayerTreeHostContextTestLayersNotified : public LayerTreeHostContextTest { |
| 883 : public LayerTreeHostContextTest { | |
| 884 public: | 866 public: |
| 885 LayerTreeHostContextTestLayersNotified() | 867 LayerTreeHostContextTestLayersNotified() |
| 886 : LayerTreeHostContextTest(), | 868 : LayerTreeHostContextTest(), num_commits_(0) {} |
| 887 num_commits_(0) {} | |
| 888 | 869 |
| 889 virtual void SetupTree() OVERRIDE { | 870 virtual void SetupTree() OVERRIDE { |
| 890 root_ = FakeContentLayer::Create(&client_); | 871 root_ = FakeContentLayer::Create(&client_); |
| 891 child_ = FakeContentLayer::Create(&client_); | 872 child_ = FakeContentLayer::Create(&client_); |
| 892 grandchild_ = FakeContentLayer::Create(&client_); | 873 grandchild_ = FakeContentLayer::Create(&client_); |
| 893 | 874 |
| 894 root_->AddChild(child_); | 875 root_->AddChild(child_); |
| 895 child_->AddChild(grandchild_); | 876 child_->AddChild(grandchild_); |
| 896 | 877 |
| 897 layer_tree_host()->SetRootLayer(root_); | 878 layer_tree_host()->SetRootLayer(root_); |
| 898 LayerTreeHostContextTest::SetupTree(); | 879 LayerTreeHostContextTest::SetupTree(); |
| 899 } | 880 } |
| 900 | 881 |
| 901 virtual void BeginTest() OVERRIDE { | 882 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); } |
| 902 PostSetNeedsCommitToMainThread(); | |
| 903 } | |
| 904 | 883 |
| 905 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { | 884 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { |
| 906 LayerTreeHostContextTest::DidActivateTreeOnThread(host_impl); | 885 LayerTreeHostContextTest::DidActivateTreeOnThread(host_impl); |
| 907 | 886 |
| 908 FakeContentLayerImpl* root = static_cast<FakeContentLayerImpl*>( | 887 FakeContentLayerImpl* root = static_cast<FakeContentLayerImpl*>( |
| 909 host_impl->active_tree()->root_layer()); | 888 host_impl->active_tree()->root_layer()); |
| 910 FakeContentLayerImpl* child = static_cast<FakeContentLayerImpl*>( | 889 FakeContentLayerImpl* child = |
| 911 root->children()[0]); | 890 static_cast<FakeContentLayerImpl*>(root->children()[0]); |
| 912 FakeContentLayerImpl* grandchild = static_cast<FakeContentLayerImpl*>( | 891 FakeContentLayerImpl* grandchild = |
| 913 child->children()[0]); | 892 static_cast<FakeContentLayerImpl*>(child->children()[0]); |
| 914 | 893 |
| 915 ++num_commits_; | 894 ++num_commits_; |
| 916 switch (num_commits_) { | 895 switch (num_commits_) { |
| 917 case 1: | 896 case 1: |
| 918 EXPECT_EQ(0u, root->lost_output_surface_count()); | 897 EXPECT_EQ(0u, root->lost_output_surface_count()); |
| 919 EXPECT_EQ(0u, child->lost_output_surface_count()); | 898 EXPECT_EQ(0u, child->lost_output_surface_count()); |
| 920 EXPECT_EQ(0u, grandchild->lost_output_surface_count()); | 899 EXPECT_EQ(0u, grandchild->lost_output_surface_count()); |
| 921 // Lose the context and struggle to recreate it. | 900 // Lose the context and struggle to recreate it. |
| 922 LoseContext(); | 901 LoseContext(); |
| 923 times_to_fail_create_ = 1; | 902 times_to_fail_create_ = 1; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 942 scoped_refptr<FakeContentLayer> root_; | 921 scoped_refptr<FakeContentLayer> root_; |
| 943 scoped_refptr<FakeContentLayer> child_; | 922 scoped_refptr<FakeContentLayer> child_; |
| 944 scoped_refptr<FakeContentLayer> grandchild_; | 923 scoped_refptr<FakeContentLayer> grandchild_; |
| 945 }; | 924 }; |
| 946 | 925 |
| 947 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostContextTestLayersNotified); | 926 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostContextTestLayersNotified); |
| 948 | 927 |
| 949 class LayerTreeHostContextTestDontUseLostResources | 928 class LayerTreeHostContextTestDontUseLostResources |
| 950 : public LayerTreeHostContextTest { | 929 : public LayerTreeHostContextTest { |
| 951 public: | 930 public: |
| 952 LayerTreeHostContextTestDontUseLostResources() | 931 LayerTreeHostContextTestDontUseLostResources() : lost_context_(false) { |
| 953 : lost_context_(false) { | |
| 954 context_should_support_io_surface_ = true; | 932 context_should_support_io_surface_ = true; |
| 955 | 933 |
| 956 child_output_surface_ = FakeOutputSurface::Create3d(); | 934 child_output_surface_ = FakeOutputSurface::Create3d(); |
| 957 child_output_surface_->BindToClient(&output_surface_client_); | 935 child_output_surface_->BindToClient(&output_surface_client_); |
| 958 child_resource_provider_ = | 936 child_resource_provider_ = ResourceProvider::Create( |
| 959 ResourceProvider::Create(child_output_surface_.get(), | 937 child_output_surface_.get(), NULL, 0, false, 1); |
| 960 NULL, | |
| 961 0, | |
| 962 false, | |
| 963 1); | |
| 964 } | 938 } |
| 965 | 939 |
| 966 static void EmptyReleaseCallback(unsigned sync_point, bool lost) {} | 940 static void EmptyReleaseCallback(unsigned sync_point, bool lost) {} |
| 967 | 941 |
| 968 virtual void SetupTree() OVERRIDE { | 942 virtual void SetupTree() OVERRIDE { |
| 969 blink::WebGraphicsContext3D* context3d = | 943 gpu::gles2::GLES2Interface* gl = |
| 970 child_output_surface_->context_provider()->Context3d(); | 944 child_output_surface_->context_provider()->ContextGL(); |
| 971 | 945 |
| 972 scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); | 946 scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); |
| 973 | 947 |
| 974 scoped_ptr<TestRenderPass> pass_for_quad = TestRenderPass::Create(); | 948 scoped_ptr<TestRenderPass> pass_for_quad = TestRenderPass::Create(); |
| 975 pass_for_quad->SetNew( | 949 pass_for_quad->SetNew( |
| 976 // AppendOneOfEveryQuadType() makes a RenderPass quad with this id. | 950 // AppendOneOfEveryQuadType() makes a RenderPass quad with this id. |
| 977 RenderPass::Id(2, 1), | 951 RenderPass::Id(2, 1), |
| 978 gfx::Rect(0, 0, 10, 10), | 952 gfx::Rect(0, 0, 10, 10), |
| 979 gfx::Rect(0, 0, 10, 10), | 953 gfx::Rect(0, 0, 10, 10), |
| 980 gfx::Transform()); | 954 gfx::Transform()); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 997 ResourceProvider::ResourceId resource = | 971 ResourceProvider::ResourceId resource = |
| 998 child_resource_provider_->CreateResource( | 972 child_resource_provider_->CreateResource( |
| 999 gfx::Size(4, 4), | 973 gfx::Size(4, 4), |
| 1000 GL_CLAMP_TO_EDGE, | 974 GL_CLAMP_TO_EDGE, |
| 1001 ResourceProvider::TextureUsageAny, | 975 ResourceProvider::TextureUsageAny, |
| 1002 RGBA_8888); | 976 RGBA_8888); |
| 1003 ResourceProvider::ScopedWriteLockGL lock(child_resource_provider_.get(), | 977 ResourceProvider::ScopedWriteLockGL lock(child_resource_provider_.get(), |
| 1004 resource); | 978 resource); |
| 1005 | 979 |
| 1006 gpu::Mailbox mailbox; | 980 gpu::Mailbox mailbox; |
| 1007 context3d->genMailboxCHROMIUM(mailbox.name); | 981 gl->GenMailboxCHROMIUM(mailbox.name); |
| 1008 unsigned sync_point = context3d->insertSyncPoint(); | 982 GLuint sync_point = gl->InsertSyncPointCHROMIUM(); |
| 1009 | 983 |
| 1010 scoped_refptr<Layer> root = Layer::Create(); | 984 scoped_refptr<Layer> root = Layer::Create(); |
| 1011 root->SetBounds(gfx::Size(10, 10)); | 985 root->SetBounds(gfx::Size(10, 10)); |
| 1012 root->SetAnchorPoint(gfx::PointF()); | 986 root->SetAnchorPoint(gfx::PointF()); |
| 1013 root->SetIsDrawable(true); | 987 root->SetIsDrawable(true); |
| 1014 | 988 |
| 1015 scoped_refptr<FakeDelegatedRendererLayer> delegated = | 989 scoped_refptr<FakeDelegatedRendererLayer> delegated = |
| 1016 FakeDelegatedRendererLayer::Create(delegated_frame_provider_.get()); | 990 FakeDelegatedRendererLayer::Create(delegated_frame_provider_.get()); |
| 1017 delegated->SetBounds(gfx::Size(10, 10)); | 991 delegated->SetBounds(gfx::Size(10, 10)); |
| 1018 delegated->SetAnchorPoint(gfx::PointF()); | 992 delegated->SetAnchorPoint(gfx::PointF()); |
| 1019 delegated->SetIsDrawable(true); | 993 delegated->SetIsDrawable(true); |
| 1020 root->AddChild(delegated); | 994 root->AddChild(delegated); |
| 1021 | 995 |
| 1022 scoped_refptr<ContentLayer> content = ContentLayer::Create(&client_); | 996 scoped_refptr<ContentLayer> content = ContentLayer::Create(&client_); |
| 1023 content->SetBounds(gfx::Size(10, 10)); | 997 content->SetBounds(gfx::Size(10, 10)); |
| 1024 content->SetAnchorPoint(gfx::PointF()); | 998 content->SetAnchorPoint(gfx::PointF()); |
| 1025 content->SetIsDrawable(true); | 999 content->SetIsDrawable(true); |
| 1026 root->AddChild(content); | 1000 root->AddChild(content); |
| 1027 | 1001 |
| 1028 scoped_refptr<TextureLayer> texture = TextureLayer::CreateForMailbox(NULL); | 1002 scoped_refptr<TextureLayer> texture = TextureLayer::CreateForMailbox(NULL); |
| 1029 texture->SetBounds(gfx::Size(10, 10)); | 1003 texture->SetBounds(gfx::Size(10, 10)); |
| 1030 texture->SetAnchorPoint(gfx::PointF()); | 1004 texture->SetAnchorPoint(gfx::PointF()); |
| 1031 texture->SetIsDrawable(true); | 1005 texture->SetIsDrawable(true); |
| 1032 texture->SetTextureMailbox( | 1006 texture->SetTextureMailbox( |
| 1033 TextureMailbox(mailbox, sync_point), | 1007 TextureMailbox(mailbox, sync_point), |
| 1034 SingleReleaseCallback::Create(base::Bind( | 1008 SingleReleaseCallback::Create( |
| 1035 &LayerTreeHostContextTestDontUseLostResources:: | 1009 base::Bind(&LayerTreeHostContextTestDontUseLostResources:: |
| 1036 EmptyReleaseCallback))); | 1010 EmptyReleaseCallback))); |
| 1037 root->AddChild(texture); | 1011 root->AddChild(texture); |
| 1038 | 1012 |
| 1039 scoped_refptr<ContentLayer> mask = ContentLayer::Create(&client_); | 1013 scoped_refptr<ContentLayer> mask = ContentLayer::Create(&client_); |
| 1040 mask->SetBounds(gfx::Size(10, 10)); | 1014 mask->SetBounds(gfx::Size(10, 10)); |
| 1041 mask->SetAnchorPoint(gfx::PointF()); | 1015 mask->SetAnchorPoint(gfx::PointF()); |
| 1042 | 1016 |
| 1043 scoped_refptr<ContentLayer> content_with_mask = | 1017 scoped_refptr<ContentLayer> content_with_mask = |
| 1044 ContentLayer::Create(&client_); | 1018 ContentLayer::Create(&client_); |
| 1045 content_with_mask->SetBounds(gfx::Size(10, 10)); | 1019 content_with_mask->SetBounds(gfx::Size(10, 10)); |
| 1046 content_with_mask->SetAnchorPoint(gfx::PointF()); | 1020 content_with_mask->SetAnchorPoint(gfx::PointF()); |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1145 LayerTreeHostImpl::FrameData* frame, | 1119 LayerTreeHostImpl::FrameData* frame, |
| 1146 bool result) OVERRIDE { | 1120 bool result) OVERRIDE { |
| 1147 if (host_impl->active_tree()->source_frame_number() == 2) { | 1121 if (host_impl->active_tree()->source_frame_number() == 2) { |
| 1148 // Lose the context during draw on the second commit. This will cause | 1122 // Lose the context during draw on the second commit. This will cause |
| 1149 // a third commit to recover. | 1123 // a third commit to recover. |
| 1150 context3d_->set_times_bind_texture_succeeds(0); | 1124 context3d_->set_times_bind_texture_succeeds(0); |
| 1151 } | 1125 } |
| 1152 return true; | 1126 return true; |
| 1153 } | 1127 } |
| 1154 | 1128 |
| 1155 virtual scoped_ptr<OutputSurface> CreateOutputSurface( | 1129 virtual scoped_ptr<OutputSurface> CreateOutputSurface(bool fallback) |
| 1156 bool fallback) OVERRIDE { | 1130 OVERRIDE { |
| 1157 // This will get called twice: | 1131 // This will get called twice: |
| 1158 // First when we create the initial output surface... | 1132 // First when we create the initial output surface... |
| 1159 if (layer_tree_host()->source_frame_number() > 0) { | 1133 if (layer_tree_host()->source_frame_number() > 0) { |
| 1160 // ... and then again after we forced the context to be lost on the third | 1134 // ... and then again after we forced the context to be lost on the third |
| 1161 // frame. Verify this assumption here. | 1135 // frame. Verify this assumption here. |
| 1162 lost_context_ = true; | 1136 lost_context_ = true; |
| 1163 EXPECT_EQ(layer_tree_host()->source_frame_number(), 3); | 1137 EXPECT_EQ(layer_tree_host()->source_frame_number(), 3); |
| 1164 } | 1138 } |
| 1165 return LayerTreeHostContextTest::CreateOutputSurface(fallback); | 1139 return LayerTreeHostContextTest::CreateOutputSurface(fallback); |
| 1166 } | 1140 } |
| 1167 | 1141 |
| 1168 virtual void DidCommitAndDrawFrame() OVERRIDE { | 1142 virtual void DidCommitAndDrawFrame() OVERRIDE { |
| 1169 ASSERT_TRUE(layer_tree_host()->hud_layer()); | 1143 ASSERT_TRUE(layer_tree_host()->hud_layer()); |
| 1170 // End the test once we know the 3nd frame drew. | 1144 // End the test once we know the 3nd frame drew. |
| 1171 if (layer_tree_host()->source_frame_number() < 4) { | 1145 if (layer_tree_host()->source_frame_number() < 4) { |
| 1172 layer_tree_host()->root_layer()->SetNeedsDisplay(); | 1146 layer_tree_host()->root_layer()->SetNeedsDisplay(); |
| 1173 layer_tree_host()->SetNeedsCommit(); | 1147 layer_tree_host()->SetNeedsCommit(); |
| 1174 } else { | 1148 } else { |
| 1175 EndTest(); | 1149 EndTest(); |
| 1176 } | 1150 } |
| 1177 } | 1151 } |
| 1178 | 1152 |
| 1179 virtual void AfterTest() OVERRIDE { | 1153 virtual void AfterTest() OVERRIDE { EXPECT_TRUE(lost_context_); } |
| 1180 EXPECT_TRUE(lost_context_); | |
| 1181 } | |
| 1182 | 1154 |
| 1183 private: | 1155 private: |
| 1184 FakeContentLayerClient client_; | 1156 FakeContentLayerClient client_; |
| 1185 bool lost_context_; | 1157 bool lost_context_; |
| 1186 | 1158 |
| 1187 FakeOutputSurfaceClient output_surface_client_; | 1159 FakeOutputSurfaceClient output_surface_client_; |
| 1188 scoped_ptr<FakeOutputSurface> child_output_surface_; | 1160 scoped_ptr<FakeOutputSurface> child_output_surface_; |
| 1189 scoped_ptr<ResourceProvider> child_resource_provider_; | 1161 scoped_ptr<ResourceProvider> child_resource_provider_; |
| 1190 | 1162 |
| 1191 scoped_refptr<DelegatedFrameResourceCollection> | 1163 scoped_refptr<DelegatedFrameResourceCollection> |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1212 ASSERT_TRUE(layer_tree_host()->output_surface_lost()); | 1184 ASSERT_TRUE(layer_tree_host()->output_surface_lost()); |
| 1213 | 1185 |
| 1214 times_output_surface_created_ = 0; | 1186 times_output_surface_created_ = 0; |
| 1215 | 1187 |
| 1216 // Post the SetNeedsCommit before the readback to make sure it is run | 1188 // Post the SetNeedsCommit before the readback to make sure it is run |
| 1217 // on the main thread before the readback's replacement commit when | 1189 // on the main thread before the readback's replacement commit when |
| 1218 // we have a threaded compositor. | 1190 // we have a threaded compositor. |
| 1219 PostSetNeedsCommitToMainThread(); | 1191 PostSetNeedsCommitToMainThread(); |
| 1220 | 1192 |
| 1221 char pixels[4]; | 1193 char pixels[4]; |
| 1222 bool result = layer_tree_host()->CompositeAndReadback( | 1194 bool result = |
| 1223 &pixels, gfx::Rect(1, 1)); | 1195 layer_tree_host()->CompositeAndReadback(&pixels, gfx::Rect(1, 1)); |
| 1224 EXPECT_EQ(!delegating_renderer(), result); | 1196 EXPECT_EQ(!delegating_renderer(), result); |
| 1225 EXPECT_EQ(1, times_output_surface_created_); | 1197 EXPECT_EQ(1, times_output_surface_created_); |
| 1226 } | 1198 } |
| 1227 | 1199 |
| 1228 virtual void DidInitializeOutputSurface(bool succeeded) OVERRIDE { | 1200 virtual void DidInitializeOutputSurface(bool succeeded) OVERRIDE { |
| 1229 EXPECT_TRUE(succeeded); | 1201 EXPECT_TRUE(succeeded); |
| 1230 ++times_output_surface_created_; | 1202 ++times_output_surface_created_; |
| 1231 } | 1203 } |
| 1232 | 1204 |
| 1233 virtual void DidCommitAndDrawFrame() OVERRIDE { | 1205 virtual void DidCommitAndDrawFrame() OVERRIDE { EndTest(); } |
| 1234 EndTest(); | |
| 1235 } | |
| 1236 | 1206 |
| 1237 virtual void AfterTest() OVERRIDE { | 1207 virtual void AfterTest() OVERRIDE { |
| 1238 // Should not try to create output surface again after successfully | 1208 // Should not try to create output surface again after successfully |
| 1239 // created by CompositeAndReadback. | 1209 // created by CompositeAndReadback. |
| 1240 EXPECT_EQ(1, times_output_surface_created_); | 1210 EXPECT_EQ(1, times_output_surface_created_); |
| 1241 } | 1211 } |
| 1242 | 1212 |
| 1243 virtual bool PrepareToDrawOnThread(LayerTreeHostImpl* host_impl, | 1213 virtual bool PrepareToDrawOnThread(LayerTreeHostImpl* host_impl, |
| 1244 LayerTreeHostImpl::FrameData* frame_data, | 1214 LayerTreeHostImpl::FrameData* frame_data, |
| 1245 bool result) OVERRIDE { | 1215 bool result) OVERRIDE { |
| (...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1479 }; | 1449 }; |
| 1480 | 1450 |
| 1481 MULTI_THREAD_TEST_F(LayerTreeHostContextTestImplSidePainting); | 1451 MULTI_THREAD_TEST_F(LayerTreeHostContextTestImplSidePainting); |
| 1482 | 1452 |
| 1483 class ScrollbarLayerLostContext : public LayerTreeHostContextTest { | 1453 class ScrollbarLayerLostContext : public LayerTreeHostContextTest { |
| 1484 public: | 1454 public: |
| 1485 ScrollbarLayerLostContext() : commits_(0) {} | 1455 ScrollbarLayerLostContext() : commits_(0) {} |
| 1486 | 1456 |
| 1487 virtual void BeginTest() OVERRIDE { | 1457 virtual void BeginTest() OVERRIDE { |
| 1488 scoped_refptr<Layer> scroll_layer = Layer::Create(); | 1458 scoped_refptr<Layer> scroll_layer = Layer::Create(); |
| 1489 scrollbar_layer_ = FakePaintedScrollbarLayer::Create( | 1459 scrollbar_layer_ = |
| 1490 false, true, scroll_layer->id()); | 1460 FakePaintedScrollbarLayer::Create(false, true, scroll_layer->id()); |
| 1491 scrollbar_layer_->SetBounds(gfx::Size(10, 100)); | 1461 scrollbar_layer_->SetBounds(gfx::Size(10, 100)); |
| 1492 layer_tree_host()->root_layer()->AddChild(scrollbar_layer_); | 1462 layer_tree_host()->root_layer()->AddChild(scrollbar_layer_); |
| 1493 layer_tree_host()->root_layer()->AddChild(scroll_layer); | 1463 layer_tree_host()->root_layer()->AddChild(scroll_layer); |
| 1494 PostSetNeedsCommitToMainThread(); | 1464 PostSetNeedsCommitToMainThread(); |
| 1495 } | 1465 } |
| 1496 | 1466 |
| 1497 virtual void AfterTest() OVERRIDE {} | 1467 virtual void AfterTest() OVERRIDE {} |
| 1498 | 1468 |
| 1499 virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE { | 1469 virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE { |
| 1500 LayerTreeHostContextTest::CommitCompleteOnThread(impl); | 1470 LayerTreeHostContextTest::CommitCompleteOnThread(impl); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1548 // DidActivateTreeOnThread, which happens after DidCommit with impl-side | 1518 // DidActivateTreeOnThread, which happens after DidCommit with impl-side |
| 1549 // painting. | 1519 // painting. |
| 1550 virtual void StepCompleteOnMainThread(int time_step) = 0; | 1520 virtual void StepCompleteOnMainThread(int time_step) = 0; |
| 1551 | 1521 |
| 1552 // Called after DidActivateTreeOnThread. If this is done during the commit, | 1522 // Called after DidActivateTreeOnThread. If this is done during the commit, |
| 1553 // the call to StepCompleteOnMainThread will not occur until after | 1523 // the call to StepCompleteOnMainThread will not occur until after |
| 1554 // the commit completes, because the main thread is blocked. | 1524 // the commit completes, because the main thread is blocked. |
| 1555 void PostStepCompleteToMainThread() { | 1525 void PostStepCompleteToMainThread() { |
| 1556 proxy()->MainThreadTaskRunner()->PostTask( | 1526 proxy()->MainThreadTaskRunner()->PostTask( |
| 1557 FROM_HERE, | 1527 FROM_HERE, |
| 1558 base::Bind( | 1528 base::Bind(&UIResourceLostTest::StepCompleteOnMainThreadInternal, |
| 1559 &UIResourceLostTest::StepCompleteOnMainThreadInternal, | 1529 base::Unretained(this), |
| 1560 base::Unretained(this), | 1530 time_step_)); |
| 1561 time_step_)); | |
| 1562 } | 1531 } |
| 1563 | 1532 |
| 1564 void PostLoseContextToImplThread() { | 1533 void PostLoseContextToImplThread() { |
| 1565 EXPECT_TRUE(layer_tree_host()->proxy()->IsMainThread()); | 1534 EXPECT_TRUE(layer_tree_host()->proxy()->IsMainThread()); |
| 1566 base::SingleThreadTaskRunner* task_runner = | 1535 base::SingleThreadTaskRunner* task_runner = |
| 1567 HasImplThread() ? ImplThreadTaskRunner() | 1536 HasImplThread() ? ImplThreadTaskRunner() |
| 1568 : base::MessageLoopProxy::current(); | 1537 : base::MessageLoopProxy::current(); |
| 1569 task_runner->PostTask( | 1538 task_runner->PostTask(FROM_HERE, |
| 1570 FROM_HERE, | 1539 base::Bind(&LayerTreeHostContextTest::LoseContext, |
| 1571 base::Bind( | 1540 base::Unretained(this))); |
| 1572 &LayerTreeHostContextTest::LoseContext, | |
| 1573 base::Unretained(this))); | |
| 1574 } | 1541 } |
| 1575 | 1542 |
| 1576 protected: | 1543 protected: |
| 1577 int time_step_; | 1544 int time_step_; |
| 1578 scoped_ptr<FakeScopedUIResource> ui_resource_; | 1545 scoped_ptr<FakeScopedUIResource> ui_resource_; |
| 1579 | 1546 |
| 1580 private: | 1547 private: |
| 1581 void StepCompleteOnMainThreadInternal(int step) { | 1548 void StepCompleteOnMainThreadInternal(int step) { |
| 1582 EXPECT_TRUE(layer_tree_host()->proxy()->IsMainThread()); | 1549 EXPECT_TRUE(layer_tree_host()->proxy()->IsMainThread()); |
| 1583 StepCompleteOnMainThread(step); | 1550 StepCompleteOnMainThread(step); |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1665 // of creation/deletion are considered: | 1632 // of creation/deletion are considered: |
| 1666 // 1. Create one resource -> Context Lost => Expect the resource to have been | 1633 // 1. Create one resource -> Context Lost => Expect the resource to have been |
| 1667 // created. | 1634 // created. |
| 1668 // 2. Delete an exisiting resource (test_id0_) -> create a second resource | 1635 // 2. Delete an exisiting resource (test_id0_) -> create a second resource |
| 1669 // (test_id1_) -> Context Lost => Expect the test_id0_ to be removed and | 1636 // (test_id1_) -> Context Lost => Expect the test_id0_ to be removed and |
| 1670 // test_id1_ to have been created. | 1637 // test_id1_ to have been created. |
| 1671 // 3. Create one resource -> Delete that same resource -> Context Lost => Expect | 1638 // 3. Create one resource -> Delete that same resource -> Context Lost => Expect |
| 1672 // the resource to not exist in the manager. | 1639 // the resource to not exist in the manager. |
| 1673 class UIResourceLostBeforeCommit : public UIResourceLostTestSimple { | 1640 class UIResourceLostBeforeCommit : public UIResourceLostTestSimple { |
| 1674 public: | 1641 public: |
| 1675 UIResourceLostBeforeCommit() | 1642 UIResourceLostBeforeCommit() : test_id0_(0), test_id1_(0) {} |
| 1676 : test_id0_(0), | |
| 1677 test_id1_(0) {} | |
| 1678 | 1643 |
| 1679 virtual void StepCompleteOnMainThread(int step) OVERRIDE { | 1644 virtual void StepCompleteOnMainThread(int step) OVERRIDE { |
| 1680 switch (step) { | 1645 switch (step) { |
| 1681 case 0: | 1646 case 0: |
| 1682 ui_resource_ = FakeScopedUIResource::Create(layer_tree_host()); | 1647 ui_resource_ = FakeScopedUIResource::Create(layer_tree_host()); |
| 1683 // Lose the context on the impl thread before the commit. | 1648 // Lose the context on the impl thread before the commit. |
| 1684 PostLoseContextToImplThread(); | 1649 PostLoseContextToImplThread(); |
| 1685 break; | 1650 break; |
| 1686 case 2: | 1651 case 2: |
| 1687 // Sequence 2: | 1652 // Sequence 2: |
| (...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1892 ui_resource_.reset(); | 1857 ui_resource_.reset(); |
| 1893 EndTest(); | 1858 EndTest(); |
| 1894 break; | 1859 break; |
| 1895 case 4: | 1860 case 4: |
| 1896 NOTREACHED(); | 1861 NOTREACHED(); |
| 1897 } | 1862 } |
| 1898 } | 1863 } |
| 1899 | 1864 |
| 1900 virtual void DidSetVisibleOnImplTree(LayerTreeHostImpl* impl, | 1865 virtual void DidSetVisibleOnImplTree(LayerTreeHostImpl* impl, |
| 1901 bool visible) OVERRIDE { | 1866 bool visible) OVERRIDE { |
| 1902 TestWebGraphicsContext3D* context = static_cast<TestWebGraphicsContext3D*>( | 1867 TestWebGraphicsContext3D* context = TestContext(); |
| 1903 impl->output_surface()->context_provider()->Context3d()); | |
| 1904 if (!visible) { | 1868 if (!visible) { |
| 1905 // All resources should have been evicted. | 1869 // All resources should have been evicted. |
| 1906 ASSERT_EQ(0u, context->NumTextures()); | 1870 ASSERT_EQ(0u, context->NumTextures()); |
| 1907 EXPECT_EQ(0u, impl->ResourceIdForUIResource(ui_resource_->id())); | 1871 EXPECT_EQ(0u, impl->ResourceIdForUIResource(ui_resource_->id())); |
| 1908 EXPECT_EQ(2, ui_resource_->resource_create_count); | 1872 EXPECT_EQ(2, ui_resource_->resource_create_count); |
| 1909 EXPECT_EQ(1, ui_resource_->lost_resource_count); | 1873 EXPECT_EQ(1, ui_resource_->lost_resource_count); |
| 1910 // Drawing is disabled both because of the evicted resources and | 1874 // Drawing is disabled both because of the evicted resources and |
| 1911 // because the renderer is not visible. | 1875 // because the renderer is not visible. |
| 1912 EXPECT_FALSE(impl->CanDraw()); | 1876 EXPECT_FALSE(impl->CanDraw()); |
| 1913 // Make the renderer visible again. | 1877 // Make the renderer visible again. |
| 1914 PostSetVisibleToMainThread(true); | 1878 PostSetVisibleToMainThread(true); |
| 1915 } | 1879 } |
| 1916 } | 1880 } |
| 1917 | 1881 |
| 1918 virtual void StepCompleteOnImplThread(LayerTreeHostImpl* impl) OVERRIDE { | 1882 virtual void StepCompleteOnImplThread(LayerTreeHostImpl* impl) OVERRIDE { |
| 1919 TestWebGraphicsContext3D* context = static_cast<TestWebGraphicsContext3D*>( | 1883 TestWebGraphicsContext3D* context = TestContext(); |
| 1920 impl->output_surface()->context_provider()->Context3d()); | |
| 1921 LayerTreeHostContextTest::CommitCompleteOnThread(impl); | 1884 LayerTreeHostContextTest::CommitCompleteOnThread(impl); |
| 1922 switch (time_step_) { | 1885 switch (time_step_) { |
| 1923 case 1: | 1886 case 1: |
| 1924 // The resource should have been created on LTHI after the commit. | 1887 // The resource should have been created on LTHI after the commit. |
| 1925 ASSERT_EQ(1u, context->NumTextures()); | 1888 ASSERT_EQ(1u, context->NumTextures()); |
| 1926 EXPECT_NE(0u, impl->ResourceIdForUIResource(ui_resource_->id())); | 1889 EXPECT_NE(0u, impl->ResourceIdForUIResource(ui_resource_->id())); |
| 1927 EXPECT_EQ(1, ui_resource_->resource_create_count); | 1890 EXPECT_EQ(1, ui_resource_->resource_create_count); |
| 1928 EXPECT_EQ(0, ui_resource_->lost_resource_count); | 1891 EXPECT_EQ(0, ui_resource_->lost_resource_count); |
| 1929 EXPECT_TRUE(impl->CanDraw()); | 1892 EXPECT_TRUE(impl->CanDraw()); |
| 1930 // Evict all UI resources. This will trigger a commit. | 1893 // Evict all UI resources. This will trigger a commit. |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1965 : LayerTreeHostContextTest(), | 1928 : LayerTreeHostContextTest(), |
| 1966 layer_(FakeContentLayer::Create(&client_)), | 1929 layer_(FakeContentLayer::Create(&client_)), |
| 1967 num_commits_(0) {} | 1930 num_commits_(0) {} |
| 1968 | 1931 |
| 1969 virtual void SetupTree() OVERRIDE { | 1932 virtual void SetupTree() OVERRIDE { |
| 1970 layer_->SetBounds(gfx::Size(10, 20)); | 1933 layer_->SetBounds(gfx::Size(10, 20)); |
| 1971 layer_tree_host()->SetRootLayer(layer_); | 1934 layer_tree_host()->SetRootLayer(layer_); |
| 1972 LayerTreeHostContextTest::SetupTree(); | 1935 LayerTreeHostContextTest::SetupTree(); |
| 1973 } | 1936 } |
| 1974 | 1937 |
| 1975 virtual void BeginTest() OVERRIDE { | 1938 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); } |
| 1976 PostSetNeedsCommitToMainThread(); | |
| 1977 } | |
| 1978 | 1939 |
| 1979 virtual void DidCommit() OVERRIDE { | 1940 virtual void DidCommit() OVERRIDE { |
| 1980 switch (num_commits_) { | 1941 switch (num_commits_) { |
| 1981 case 0: | 1942 case 0: |
| 1982 EXPECT_EQ(1u, layer_->output_surface_created_count()); | 1943 EXPECT_EQ(1u, layer_->output_surface_created_count()); |
| 1983 layer_tree_host()->SetNeedsCommit(); | 1944 layer_tree_host()->SetNeedsCommit(); |
| 1984 break; | 1945 break; |
| 1985 case 1: | 1946 case 1: |
| 1986 EXPECT_EQ(1u, layer_->output_surface_created_count()); | 1947 EXPECT_EQ(1u, layer_->output_surface_created_count()); |
| 1987 layer_tree_host()->SetNeedsCommit(); | 1948 layer_tree_host()->SetNeedsCommit(); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2022 protected: | 1983 protected: |
| 2023 FakeContentLayerClient client_; | 1984 FakeContentLayerClient client_; |
| 2024 scoped_refptr<FakeContentLayer> layer_; | 1985 scoped_refptr<FakeContentLayer> layer_; |
| 2025 int num_commits_; | 1986 int num_commits_; |
| 2026 }; | 1987 }; |
| 2027 | 1988 |
| 2028 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostContextTestSurfaceCreateCallback); | 1989 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostContextTestSurfaceCreateCallback); |
| 2029 | 1990 |
| 2030 } // namespace | 1991 } // namespace |
| 2031 } // namespace cc | 1992 } // namespace cc |
| OLD | NEW |