| 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 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 132 &shared_bitmap_manager_, nullptr /* gpu_memory_buffer_manager */, | 131 &shared_bitmap_manager_, nullptr /* gpu_memory_buffer_manager */, |
| 133 settings, std::move(begin_frame_source), std::move(output_surface), | 132 settings, std::move(begin_frame_source), std::move(output_surface), |
| 134 std::move(scheduler), | 133 std::move(scheduler), |
| 135 base::MakeUnique<TextureMailboxDeleter>(task_runner_.get())); | 134 base::MakeUnique<TextureMailboxDeleter>(task_runner_.get())); |
| 136 display_->SetVisible(true); | 135 display_->SetVisible(true); |
| 137 } | 136 } |
| 138 | 137 |
| 139 protected: | 138 protected: |
| 140 void SubmitCompositorFrame(RenderPassList* pass_list, | 139 void SubmitCompositorFrame(RenderPassList* pass_list, |
| 141 const LocalFrameId& local_frame_id) { | 140 const LocalFrameId& local_frame_id) { |
| 142 std::unique_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); | |
| 143 pass_list->swap(frame_data->render_pass_list); | |
| 144 | |
| 145 CompositorFrame frame; | 141 CompositorFrame frame; |
| 146 frame.delegated_frame_data = std::move(frame_data); | 142 pass_list->swap(frame.render_pass_list); |
| 147 | 143 |
| 148 factory_.SubmitCompositorFrame(local_frame_id, std::move(frame), | 144 factory_.SubmitCompositorFrame(local_frame_id, std::move(frame), |
| 149 SurfaceFactory::DrawCallback()); | 145 SurfaceFactory::DrawCallback()); |
| 150 } | 146 } |
| 151 | 147 |
| 152 SurfaceManager manager_; | 148 SurfaceManager manager_; |
| 153 FakeSurfaceFactoryClient surface_factory_client_; | 149 FakeSurfaceFactoryClient surface_factory_client_; |
| 154 SurfaceFactory factory_; | 150 SurfaceFactory factory_; |
| 155 SurfaceIdAllocator id_allocator_; | 151 SurfaceIdAllocator id_allocator_; |
| 156 scoped_refptr<base::NullTaskRunner> task_runner_; | 152 scoped_refptr<base::NullTaskRunner> task_runner_; |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 335 // Pass has no damage, so shouldn't be swapped, but latency info should be | 331 // Pass has no damage, so shouldn't be swapped, but latency info should be |
| 336 // saved for next swap. | 332 // saved for next swap. |
| 337 { | 333 { |
| 338 pass = RenderPass::Create(); | 334 pass = RenderPass::Create(); |
| 339 pass->output_rect = gfx::Rect(0, 0, 100, 100); | 335 pass->output_rect = gfx::Rect(0, 0, 100, 100); |
| 340 pass->damage_rect = gfx::Rect(10, 10, 0, 0); | 336 pass->damage_rect = gfx::Rect(10, 10, 0, 0); |
| 341 pass->id = RenderPassId(1, 1); | 337 pass->id = RenderPassId(1, 1); |
| 342 | 338 |
| 343 pass_list.push_back(std::move(pass)); | 339 pass_list.push_back(std::move(pass)); |
| 344 scheduler_->ResetDamageForTest(); | 340 scheduler_->ResetDamageForTest(); |
| 345 std::unique_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); | |
| 346 pass_list.swap(frame_data->render_pass_list); | |
| 347 | 341 |
| 348 CompositorFrame frame; | 342 CompositorFrame frame; |
| 349 frame.delegated_frame_data = std::move(frame_data); | 343 pass_list.swap(frame.render_pass_list); |
| 350 frame.metadata.latency_info.push_back(ui::LatencyInfo()); | 344 frame.metadata.latency_info.push_back(ui::LatencyInfo()); |
| 351 | 345 |
| 352 factory_.SubmitCompositorFrame(local_frame_id, std::move(frame), | 346 factory_.SubmitCompositorFrame(local_frame_id, std::move(frame), |
| 353 SurfaceFactory::DrawCallback()); | 347 SurfaceFactory::DrawCallback()); |
| 354 EXPECT_TRUE(scheduler_->damaged); | 348 EXPECT_TRUE(scheduler_->damaged); |
| 355 EXPECT_FALSE(scheduler_->display_resized_); | 349 EXPECT_FALSE(scheduler_->display_resized_); |
| 356 EXPECT_FALSE(scheduler_->has_new_root_surface); | 350 EXPECT_FALSE(scheduler_->has_new_root_surface); |
| 357 | 351 |
| 358 scheduler_->swapped = false; | 352 scheduler_->swapped = false; |
| 359 display_->DrawAndSwap(); | 353 display_->DrawAndSwap(); |
| 360 EXPECT_TRUE(scheduler_->swapped); | 354 EXPECT_TRUE(scheduler_->swapped); |
| 361 EXPECT_EQ(4u, output_surface_->num_sent_frames()); | 355 EXPECT_EQ(4u, output_surface_->num_sent_frames()); |
| 362 } | 356 } |
| 363 | 357 |
| 364 // Resize should cause a swap if no frame was swapped at the previous size. | 358 // Resize should cause a swap if no frame was swapped at the previous size. |
| 365 { | 359 { |
| 366 scheduler_->swapped = false; | 360 scheduler_->swapped = false; |
| 367 display_->Resize(gfx::Size(200, 200)); | 361 display_->Resize(gfx::Size(200, 200)); |
| 368 EXPECT_FALSE(scheduler_->swapped); | 362 EXPECT_FALSE(scheduler_->swapped); |
| 369 EXPECT_EQ(4u, output_surface_->num_sent_frames()); | 363 EXPECT_EQ(4u, output_surface_->num_sent_frames()); |
| 370 | 364 |
| 371 pass = RenderPass::Create(); | 365 pass = RenderPass::Create(); |
| 372 pass->output_rect = gfx::Rect(0, 0, 200, 200); | 366 pass->output_rect = gfx::Rect(0, 0, 200, 200); |
| 373 pass->damage_rect = gfx::Rect(10, 10, 10, 10); | 367 pass->damage_rect = gfx::Rect(10, 10, 10, 10); |
| 374 pass->id = RenderPassId(1, 1); | 368 pass->id = RenderPassId(1, 1); |
| 375 | 369 |
| 376 pass_list.push_back(std::move(pass)); | 370 pass_list.push_back(std::move(pass)); |
| 377 scheduler_->ResetDamageForTest(); | 371 scheduler_->ResetDamageForTest(); |
| 378 std::unique_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); | |
| 379 pass_list.swap(frame_data->render_pass_list); | |
| 380 | 372 |
| 381 CompositorFrame frame; | 373 CompositorFrame frame; |
| 382 frame.delegated_frame_data = std::move(frame_data); | 374 pass_list.swap(frame.render_pass_list); |
| 383 | 375 |
| 384 factory_.SubmitCompositorFrame(local_frame_id, std::move(frame), | 376 factory_.SubmitCompositorFrame(local_frame_id, std::move(frame), |
| 385 SurfaceFactory::DrawCallback()); | 377 SurfaceFactory::DrawCallback()); |
| 386 EXPECT_TRUE(scheduler_->damaged); | 378 EXPECT_TRUE(scheduler_->damaged); |
| 387 EXPECT_FALSE(scheduler_->display_resized_); | 379 EXPECT_FALSE(scheduler_->display_resized_); |
| 388 EXPECT_FALSE(scheduler_->has_new_root_surface); | 380 EXPECT_FALSE(scheduler_->has_new_root_surface); |
| 389 | 381 |
| 390 scheduler_->swapped = false; | 382 scheduler_->swapped = false; |
| 391 display_->Resize(gfx::Size(100, 100)); | 383 display_->Resize(gfx::Size(100, 100)); |
| 392 EXPECT_TRUE(scheduler_->swapped); | 384 EXPECT_TRUE(scheduler_->swapped); |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 494 | 486 |
| 495 EXPECT_CALL(*context_ptr, shallowFinishCHROMIUM()); | 487 EXPECT_CALL(*context_ptr, shallowFinishCHROMIUM()); |
| 496 display_->Resize(gfx::Size(250, 250)); | 488 display_->Resize(gfx::Size(250, 250)); |
| 497 testing::Mock::VerifyAndClearExpectations(context_ptr); | 489 testing::Mock::VerifyAndClearExpectations(context_ptr); |
| 498 | 490 |
| 499 factory_.Destroy(local_frame_id); | 491 factory_.Destroy(local_frame_id); |
| 500 } | 492 } |
| 501 | 493 |
| 502 } // namespace | 494 } // namespace |
| 503 } // namespace cc | 495 } // namespace cc |
| OLD | NEW |