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