| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/surfaces/display.h" | 5 #include "cc/surfaces/display.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/test/null_task_runner.h" | 9 #include "base/test/null_task_runner.h" |
| 10 #include "cc/output/compositor_frame.h" | 10 #include "cc/output/compositor_frame.h" |
| 11 #include "cc/output/copy_output_result.h" | 11 #include "cc/output/copy_output_result.h" |
| 12 #include "cc/output/delegated_frame_data.h" |
| 12 #include "cc/output/texture_mailbox_deleter.h" | 13 #include "cc/output/texture_mailbox_deleter.h" |
| 13 #include "cc/quads/render_pass.h" | 14 #include "cc/quads/render_pass.h" |
| 14 #include "cc/resources/shared_bitmap_manager.h" | 15 #include "cc/resources/shared_bitmap_manager.h" |
| 15 #include "cc/scheduler/begin_frame_source.h" | 16 #include "cc/scheduler/begin_frame_source.h" |
| 16 #include "cc/surfaces/display_client.h" | 17 #include "cc/surfaces/display_client.h" |
| 17 #include "cc/surfaces/display_scheduler.h" | 18 #include "cc/surfaces/display_scheduler.h" |
| 18 #include "cc/surfaces/frame_sink_id.h" | 19 #include "cc/surfaces/frame_sink_id.h" |
| 19 #include "cc/surfaces/surface.h" | 20 #include "cc/surfaces/surface.h" |
| 20 #include "cc/surfaces/surface_factory.h" | 21 #include "cc/surfaces/surface_factory.h" |
| 21 #include "cc/surfaces/surface_factory_client.h" | 22 #include "cc/surfaces/surface_factory_client.h" |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 134 &shared_bitmap_manager_, nullptr /* gpu_memory_buffer_manager */, | 135 &shared_bitmap_manager_, nullptr /* gpu_memory_buffer_manager */, |
| 135 settings, kArbitraryFrameSinkId, std::move(begin_frame_source), | 136 settings, kArbitraryFrameSinkId, std::move(begin_frame_source), |
| 136 std::move(output_surface), std::move(scheduler), | 137 std::move(output_surface), std::move(scheduler), |
| 137 base::MakeUnique<TextureMailboxDeleter>(task_runner_.get())); | 138 base::MakeUnique<TextureMailboxDeleter>(task_runner_.get())); |
| 138 display_->SetVisible(true); | 139 display_->SetVisible(true); |
| 139 } | 140 } |
| 140 | 141 |
| 141 protected: | 142 protected: |
| 142 void SubmitCompositorFrame(RenderPassList* pass_list, | 143 void SubmitCompositorFrame(RenderPassList* pass_list, |
| 143 const LocalFrameId& local_frame_id) { | 144 const LocalFrameId& local_frame_id) { |
| 145 std::unique_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); |
| 146 pass_list->swap(frame_data->render_pass_list); |
| 147 |
| 144 CompositorFrame frame; | 148 CompositorFrame frame; |
| 145 pass_list->swap(frame.render_pass_list); | 149 frame.delegated_frame_data = std::move(frame_data); |
| 146 | 150 |
| 147 factory_.SubmitCompositorFrame(local_frame_id, std::move(frame), | 151 factory_.SubmitCompositorFrame(local_frame_id, std::move(frame), |
| 148 SurfaceFactory::DrawCallback()); | 152 SurfaceFactory::DrawCallback()); |
| 149 } | 153 } |
| 150 | 154 |
| 151 SurfaceManager manager_; | 155 SurfaceManager manager_; |
| 152 FakeSurfaceFactoryClient surface_factory_client_; | 156 FakeSurfaceFactoryClient surface_factory_client_; |
| 153 SurfaceFactory factory_; | 157 SurfaceFactory factory_; |
| 154 SurfaceIdAllocator id_allocator_; | 158 SurfaceIdAllocator id_allocator_; |
| 155 scoped_refptr<base::NullTaskRunner> task_runner_; | 159 scoped_refptr<base::NullTaskRunner> task_runner_; |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 333 // Pass has no damage, so shouldn't be swapped, but latency info should be | 337 // Pass has no damage, so shouldn't be swapped, but latency info should be |
| 334 // saved for next swap. | 338 // saved for next swap. |
| 335 { | 339 { |
| 336 pass = RenderPass::Create(); | 340 pass = RenderPass::Create(); |
| 337 pass->output_rect = gfx::Rect(0, 0, 100, 100); | 341 pass->output_rect = gfx::Rect(0, 0, 100, 100); |
| 338 pass->damage_rect = gfx::Rect(10, 10, 0, 0); | 342 pass->damage_rect = gfx::Rect(10, 10, 0, 0); |
| 339 pass->id = RenderPassId(1, 1); | 343 pass->id = RenderPassId(1, 1); |
| 340 | 344 |
| 341 pass_list.push_back(std::move(pass)); | 345 pass_list.push_back(std::move(pass)); |
| 342 scheduler_->ResetDamageForTest(); | 346 scheduler_->ResetDamageForTest(); |
| 347 std::unique_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); |
| 348 pass_list.swap(frame_data->render_pass_list); |
| 343 | 349 |
| 344 CompositorFrame frame; | 350 CompositorFrame frame; |
| 345 pass_list.swap(frame.render_pass_list); | 351 frame.delegated_frame_data = std::move(frame_data); |
| 346 frame.metadata.latency_info.push_back(ui::LatencyInfo()); | 352 frame.metadata.latency_info.push_back(ui::LatencyInfo()); |
| 347 | 353 |
| 348 factory_.SubmitCompositorFrame(local_frame_id, std::move(frame), | 354 factory_.SubmitCompositorFrame(local_frame_id, std::move(frame), |
| 349 SurfaceFactory::DrawCallback()); | 355 SurfaceFactory::DrawCallback()); |
| 350 EXPECT_TRUE(scheduler_->damaged); | 356 EXPECT_TRUE(scheduler_->damaged); |
| 351 EXPECT_FALSE(scheduler_->display_resized_); | 357 EXPECT_FALSE(scheduler_->display_resized_); |
| 352 EXPECT_FALSE(scheduler_->has_new_root_surface); | 358 EXPECT_FALSE(scheduler_->has_new_root_surface); |
| 353 | 359 |
| 354 scheduler_->swapped = false; | 360 scheduler_->swapped = false; |
| 355 display_->DrawAndSwap(); | 361 display_->DrawAndSwap(); |
| 356 EXPECT_TRUE(scheduler_->swapped); | 362 EXPECT_TRUE(scheduler_->swapped); |
| 357 EXPECT_EQ(4u, output_surface_->num_sent_frames()); | 363 EXPECT_EQ(4u, output_surface_->num_sent_frames()); |
| 358 } | 364 } |
| 359 | 365 |
| 360 // Resize should cause a swap if no frame was swapped at the previous size. | 366 // Resize should cause a swap if no frame was swapped at the previous size. |
| 361 { | 367 { |
| 362 scheduler_->swapped = false; | 368 scheduler_->swapped = false; |
| 363 display_->Resize(gfx::Size(200, 200)); | 369 display_->Resize(gfx::Size(200, 200)); |
| 364 EXPECT_FALSE(scheduler_->swapped); | 370 EXPECT_FALSE(scheduler_->swapped); |
| 365 EXPECT_EQ(4u, output_surface_->num_sent_frames()); | 371 EXPECT_EQ(4u, output_surface_->num_sent_frames()); |
| 366 | 372 |
| 367 pass = RenderPass::Create(); | 373 pass = RenderPass::Create(); |
| 368 pass->output_rect = gfx::Rect(0, 0, 200, 200); | 374 pass->output_rect = gfx::Rect(0, 0, 200, 200); |
| 369 pass->damage_rect = gfx::Rect(10, 10, 10, 10); | 375 pass->damage_rect = gfx::Rect(10, 10, 10, 10); |
| 370 pass->id = RenderPassId(1, 1); | 376 pass->id = RenderPassId(1, 1); |
| 371 | 377 |
| 372 pass_list.push_back(std::move(pass)); | 378 pass_list.push_back(std::move(pass)); |
| 373 scheduler_->ResetDamageForTest(); | 379 scheduler_->ResetDamageForTest(); |
| 380 std::unique_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); |
| 381 pass_list.swap(frame_data->render_pass_list); |
| 374 | 382 |
| 375 CompositorFrame frame; | 383 CompositorFrame frame; |
| 376 pass_list.swap(frame.render_pass_list); | 384 frame.delegated_frame_data = std::move(frame_data); |
| 377 | 385 |
| 378 factory_.SubmitCompositorFrame(local_frame_id, std::move(frame), | 386 factory_.SubmitCompositorFrame(local_frame_id, std::move(frame), |
| 379 SurfaceFactory::DrawCallback()); | 387 SurfaceFactory::DrawCallback()); |
| 380 EXPECT_TRUE(scheduler_->damaged); | 388 EXPECT_TRUE(scheduler_->damaged); |
| 381 EXPECT_FALSE(scheduler_->display_resized_); | 389 EXPECT_FALSE(scheduler_->display_resized_); |
| 382 EXPECT_FALSE(scheduler_->has_new_root_surface); | 390 EXPECT_FALSE(scheduler_->has_new_root_surface); |
| 383 | 391 |
| 384 scheduler_->swapped = false; | 392 scheduler_->swapped = false; |
| 385 display_->Resize(gfx::Size(100, 100)); | 393 display_->Resize(gfx::Size(100, 100)); |
| 386 EXPECT_TRUE(scheduler_->swapped); | 394 EXPECT_TRUE(scheduler_->swapped); |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 513 // Verify DidLoseOutputSurface callback is hooked up correctly. | 521 // Verify DidLoseOutputSurface callback is hooked up correctly. |
| 514 EXPECT_EQ(0, client.loss_count()); | 522 EXPECT_EQ(0, client.loss_count()); |
| 515 output_surface_->context_provider()->ContextGL()->LoseContextCHROMIUM( | 523 output_surface_->context_provider()->ContextGL()->LoseContextCHROMIUM( |
| 516 GL_GUILTY_CONTEXT_RESET_ARB, GL_INNOCENT_CONTEXT_RESET_ARB); | 524 GL_GUILTY_CONTEXT_RESET_ARB, GL_INNOCENT_CONTEXT_RESET_ARB); |
| 517 output_surface_->context_provider()->ContextGL()->Flush(); | 525 output_surface_->context_provider()->ContextGL()->Flush(); |
| 518 EXPECT_EQ(1, client.loss_count()); | 526 EXPECT_EQ(1, client.loss_count()); |
| 519 } | 527 } |
| 520 | 528 |
| 521 } // namespace | 529 } // namespace |
| 522 } // namespace cc | 530 } // namespace cc |
| OLD | NEW |