| 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/output/output_surface.h" | 5 #include "cc/output/output_surface.h" |
| 6 | 6 |
| 7 #include "base/test/test_simple_task_runner.h" | 7 #include "base/test/test_simple_task_runner.h" |
| 8 #include "cc/output/managed_memory_policy.h" | 8 #include "cc/output/managed_memory_policy.h" |
| 9 #include "cc/output/output_surface_client.h" | 9 #include "cc/output/output_surface_client.h" |
| 10 #include "cc/output/software_output_device.h" | 10 #include "cc/output/software_output_device.h" |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 79 | 79 |
| 80 virtual base::TimeDelta RetroactiveBeginFramePeriod() OVERRIDE { | 80 virtual base::TimeDelta RetroactiveBeginFramePeriod() OVERRIDE { |
| 81 return retroactive_begin_frame_period_; | 81 return retroactive_begin_frame_period_; |
| 82 } | 82 } |
| 83 | 83 |
| 84 base::TimeDelta retroactive_begin_frame_period_; | 84 base::TimeDelta retroactive_begin_frame_period_; |
| 85 }; | 85 }; |
| 86 | 86 |
| 87 TEST(OutputSurfaceTest, ClientPointerIndicatesBindToClientSuccess) { | 87 TEST(OutputSurfaceTest, ClientPointerIndicatesBindToClientSuccess) { |
| 88 scoped_ptr<TestWebGraphicsContext3D> context3d = | 88 scoped_ptr<TestWebGraphicsContext3D> context3d = |
| 89 TestWebGraphicsContext3D::Create(); | 89 TestWebGraphicsContext3D::CreateShared(); |
| 90 | 90 |
| 91 TestOutputSurface output_surface( | 91 TestOutputSurface output_surface( |
| 92 context3d.PassAs<WebKit::WebGraphicsContext3D>()); | 92 context3d.PassAs<WebKit::WebGraphicsContext3D>()); |
| 93 EXPECT_FALSE(output_surface.HasClientForTesting()); | 93 EXPECT_FALSE(output_surface.HasClientForTesting()); |
| 94 | 94 |
| 95 FakeOutputSurfaceClient client; | 95 FakeOutputSurfaceClient client; |
| 96 EXPECT_TRUE(output_surface.BindToClient(&client)); | 96 EXPECT_TRUE(output_surface.BindToClient(&client)); |
| 97 EXPECT_TRUE(output_surface.HasClientForTesting()); | 97 EXPECT_TRUE(output_surface.HasClientForTesting()); |
| 98 EXPECT_FALSE(client.deferred_initialize_called()); | 98 EXPECT_FALSE(client.deferred_initialize_called()); |
| 99 | 99 |
| 100 // Verify DidLoseOutputSurface callback is hooked up correctly. | 100 // Verify DidLoseOutputSurface callback is hooked up correctly. |
| 101 EXPECT_FALSE(client.did_lose_output_surface_called()); | 101 EXPECT_FALSE(client.did_lose_output_surface_called()); |
| 102 output_surface.context3d()->loseContextCHROMIUM( | 102 output_surface.context3d()->loseContextCHROMIUM( |
| 103 GL_GUILTY_CONTEXT_RESET_ARB, GL_INNOCENT_CONTEXT_RESET_ARB); | 103 GL_GUILTY_CONTEXT_RESET_ARB, GL_INNOCENT_CONTEXT_RESET_ARB); |
| 104 EXPECT_TRUE(client.did_lose_output_surface_called()); | 104 EXPECT_TRUE(client.did_lose_output_surface_called()); |
| 105 } | 105 } |
| 106 | 106 |
| 107 TEST(OutputSurfaceTest, ClientPointerIndicatesBindToClientFailure) { | 107 TEST(OutputSurfaceTest, ClientPointerIndicatesBindToClientFailure) { |
| 108 scoped_ptr<TestWebGraphicsContext3D> context3d = | 108 scoped_ptr<TestWebGraphicsContext3D> context3d = |
| 109 TestWebGraphicsContext3D::Create(); | 109 TestWebGraphicsContext3D::CreateShared(); |
| 110 | 110 |
| 111 // Lose the context so BindToClient fails. | 111 // Lose the context so BindToClient fails. |
| 112 context3d->set_times_make_current_succeeds(0); | 112 context3d->set_times_make_current_succeeds(0); |
| 113 | 113 |
| 114 TestOutputSurface output_surface( | 114 TestOutputSurface output_surface( |
| 115 context3d.PassAs<WebKit::WebGraphicsContext3D>()); | 115 context3d.PassAs<WebKit::WebGraphicsContext3D>()); |
| 116 EXPECT_FALSE(output_surface.HasClientForTesting()); | 116 EXPECT_FALSE(output_surface.HasClientForTesting()); |
| 117 | 117 |
| 118 FakeOutputSurfaceClient client; | 118 FakeOutputSurfaceClient client; |
| 119 EXPECT_FALSE(output_surface.BindToClient(&client)); | 119 EXPECT_FALSE(output_surface.BindToClient(&client)); |
| 120 EXPECT_FALSE(output_surface.HasClientForTesting()); | 120 EXPECT_FALSE(output_surface.HasClientForTesting()); |
| 121 } | 121 } |
| 122 | 122 |
| 123 class InitializeNewContext3D : public ::testing::Test { | 123 class InitializeNewContext3D : public ::testing::Test { |
| 124 public: | 124 public: |
| 125 InitializeNewContext3D() | 125 InitializeNewContext3D() |
| 126 : context3d_(TestWebGraphicsContext3D::Create()), | 126 : context3d_(TestWebGraphicsContext3D::CreateShared()), |
| 127 output_surface_( | 127 output_surface_( |
| 128 scoped_ptr<SoftwareOutputDevice>(new SoftwareOutputDevice)) {} | 128 scoped_ptr<SoftwareOutputDevice>(new SoftwareOutputDevice)) {} |
| 129 | 129 |
| 130 protected: | 130 protected: |
| 131 void BindOutputSurface() { | 131 void BindOutputSurface() { |
| 132 EXPECT_TRUE(output_surface_.BindToClient(&client_)); | 132 EXPECT_TRUE(output_surface_.BindToClient(&client_)); |
| 133 EXPECT_TRUE(output_surface_.HasClientForTesting()); | 133 EXPECT_TRUE(output_surface_.HasClientForTesting()); |
| 134 } | 134 } |
| 135 | 135 |
| 136 void InitializeNewContextExpectFail() { | 136 void InitializeNewContextExpectFail() { |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 } | 171 } |
| 172 | 172 |
| 173 TEST_F(InitializeNewContext3D, ClientDeferredInitializeFails) { | 173 TEST_F(InitializeNewContext3D, ClientDeferredInitializeFails) { |
| 174 BindOutputSurface(); | 174 BindOutputSurface(); |
| 175 client_.set_deferred_initialize_result(false); | 175 client_.set_deferred_initialize_result(false); |
| 176 InitializeNewContextExpectFail(); | 176 InitializeNewContextExpectFail(); |
| 177 } | 177 } |
| 178 | 178 |
| 179 TEST(OutputSurfaceTest, BeginFrameEmulation) { | 179 TEST(OutputSurfaceTest, BeginFrameEmulation) { |
| 180 scoped_ptr<TestWebGraphicsContext3D> context3d = | 180 scoped_ptr<TestWebGraphicsContext3D> context3d = |
| 181 TestWebGraphicsContext3D::Create(); | 181 TestWebGraphicsContext3D::CreateShared(); |
| 182 | 182 |
| 183 TestOutputSurface output_surface( | 183 TestOutputSurface output_surface( |
| 184 context3d.PassAs<WebKit::WebGraphicsContext3D>()); | 184 context3d.PassAs<WebKit::WebGraphicsContext3D>()); |
| 185 EXPECT_FALSE(output_surface.HasClientForTesting()); | 185 EXPECT_FALSE(output_surface.HasClientForTesting()); |
| 186 | 186 |
| 187 FakeOutputSurfaceClient client; | 187 FakeOutputSurfaceClient client; |
| 188 EXPECT_TRUE(output_surface.BindToClient(&client)); | 188 EXPECT_TRUE(output_surface.BindToClient(&client)); |
| 189 EXPECT_TRUE(output_surface.HasClientForTesting()); | 189 EXPECT_TRUE(output_surface.HasClientForTesting()); |
| 190 EXPECT_FALSE(client.deferred_initialize_called()); | 190 EXPECT_FALSE(client.deferred_initialize_called()); |
| 191 | 191 |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 258 // Disabling SetNeedsBeginFrame should prevent further BeginFrames. | 258 // Disabling SetNeedsBeginFrame should prevent further BeginFrames. |
| 259 output_surface.SetNeedsBeginFrame(false); | 259 output_surface.SetNeedsBeginFrame(false); |
| 260 task_runner->RunPendingTasks(); | 260 task_runner->RunPendingTasks(); |
| 261 EXPECT_FALSE(task_runner->HasPendingTask()); | 261 EXPECT_FALSE(task_runner->HasPendingTask()); |
| 262 EXPECT_EQ(client.begin_frame_count(), 4); | 262 EXPECT_EQ(client.begin_frame_count(), 4); |
| 263 EXPECT_EQ(output_surface.pending_swap_buffers(), 1); | 263 EXPECT_EQ(output_surface.pending_swap_buffers(), 1); |
| 264 } | 264 } |
| 265 | 265 |
| 266 TEST(OutputSurfaceTest, OptimisticAndRetroactiveBeginFrames) { | 266 TEST(OutputSurfaceTest, OptimisticAndRetroactiveBeginFrames) { |
| 267 scoped_ptr<TestWebGraphicsContext3D> context3d = | 267 scoped_ptr<TestWebGraphicsContext3D> context3d = |
| 268 TestWebGraphicsContext3D::Create(); | 268 TestWebGraphicsContext3D::CreateShared(); |
| 269 | 269 |
| 270 TestOutputSurface output_surface( | 270 TestOutputSurface output_surface( |
| 271 context3d.PassAs<WebKit::WebGraphicsContext3D>()); | 271 context3d.PassAs<WebKit::WebGraphicsContext3D>()); |
| 272 EXPECT_FALSE(output_surface.HasClientForTesting()); | 272 EXPECT_FALSE(output_surface.HasClientForTesting()); |
| 273 | 273 |
| 274 FakeOutputSurfaceClient client; | 274 FakeOutputSurfaceClient client; |
| 275 EXPECT_TRUE(output_surface.BindToClient(&client)); | 275 EXPECT_TRUE(output_surface.BindToClient(&client)); |
| 276 EXPECT_TRUE(output_surface.HasClientForTesting()); | 276 EXPECT_TRUE(output_surface.HasClientForTesting()); |
| 277 EXPECT_FALSE(client.deferred_initialize_called()); | 277 EXPECT_FALSE(client.deferred_initialize_called()); |
| 278 | 278 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 312 EXPECT_EQ(output_surface.pending_swap_buffers(), 2); | 312 EXPECT_EQ(output_surface.pending_swap_buffers(), 2); |
| 313 output_surface.BeginFrameForTesting(); | 313 output_surface.BeginFrameForTesting(); |
| 314 EXPECT_EQ(client.begin_frame_count(), 3); | 314 EXPECT_EQ(client.begin_frame_count(), 3); |
| 315 // ...and retroactively triggered by OnSwapBuffersComplete | 315 // ...and retroactively triggered by OnSwapBuffersComplete |
| 316 output_surface.OnSwapBuffersCompleteForTesting(); | 316 output_surface.OnSwapBuffersCompleteForTesting(); |
| 317 EXPECT_EQ(client.begin_frame_count(), 4); | 317 EXPECT_EQ(client.begin_frame_count(), 4); |
| 318 } | 318 } |
| 319 | 319 |
| 320 TEST(OutputSurfaceTest, MemoryAllocation) { | 320 TEST(OutputSurfaceTest, MemoryAllocation) { |
| 321 scoped_ptr<TestWebGraphicsContext3D> scoped_context = | 321 scoped_ptr<TestWebGraphicsContext3D> scoped_context = |
| 322 TestWebGraphicsContext3D::Create(); | 322 TestWebGraphicsContext3D::CreateShared(); |
| 323 TestWebGraphicsContext3D* context = scoped_context.get(); | 323 TestWebGraphicsContext3D* context = scoped_context.get(); |
| 324 | 324 |
| 325 TestOutputSurface output_surface( | 325 TestOutputSurface output_surface( |
| 326 scoped_context.PassAs<WebKit::WebGraphicsContext3D>()); | 326 scoped_context.PassAs<WebKit::WebGraphicsContext3D>()); |
| 327 | 327 |
| 328 FakeOutputSurfaceClient client; | 328 FakeOutputSurfaceClient client; |
| 329 EXPECT_TRUE(output_surface.BindToClient(&client)); | 329 EXPECT_TRUE(output_surface.BindToClient(&client)); |
| 330 | 330 |
| 331 WebGraphicsMemoryAllocation allocation; | 331 WebGraphicsMemoryAllocation allocation; |
| 332 allocation.suggestHaveBackbuffer = true; | 332 allocation.suggestHaveBackbuffer = true; |
| (...skipping 24 matching lines...) Expand all Loading... |
| 357 WebGraphicsMemoryAllocation::PriorityCutoffAllowVisibleAndNearby; | 357 WebGraphicsMemoryAllocation::PriorityCutoffAllowVisibleAndNearby; |
| 358 context->SetMemoryAllocation(allocation); | 358 context->SetMemoryAllocation(allocation); |
| 359 EXPECT_EQ(ManagedMemoryPolicy::CUTOFF_ALLOW_EVERYTHING, | 359 EXPECT_EQ(ManagedMemoryPolicy::CUTOFF_ALLOW_EVERYTHING, |
| 360 client.memory_policy().priority_cutoff_when_visible); | 360 client.memory_policy().priority_cutoff_when_visible); |
| 361 EXPECT_EQ(ManagedMemoryPolicy::CUTOFF_ALLOW_NICE_TO_HAVE, | 361 EXPECT_EQ(ManagedMemoryPolicy::CUTOFF_ALLOW_NICE_TO_HAVE, |
| 362 client.memory_policy().priority_cutoff_when_not_visible); | 362 client.memory_policy().priority_cutoff_when_not_visible); |
| 363 } | 363 } |
| 364 | 364 |
| 365 } // namespace | 365 } // namespace |
| 366 } // namespace cc | 366 } // namespace cc |
| OLD | NEW |