OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 "content/browser/renderer_host/compositor_impl_android.h" | 5 #include "content/browser/renderer_host/compositor_impl_android.h" |
6 | 6 |
7 #include <android/bitmap.h> | 7 #include <android/bitmap.h> |
8 #include <android/native_window_jni.h> | 8 #include <android/native_window_jni.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 #include <unordered_set> | 10 #include <unordered_set> |
(...skipping 23 matching lines...) Expand all Loading... |
34 #include "cc/layers/layer.h" | 34 #include "cc/layers/layer.h" |
35 #include "cc/output/compositor_frame.h" | 35 #include "cc/output/compositor_frame.h" |
36 #include "cc/output/context_provider.h" | 36 #include "cc/output/context_provider.h" |
37 #include "cc/output/output_surface.h" | 37 #include "cc/output/output_surface.h" |
38 #include "cc/output/output_surface_client.h" | 38 #include "cc/output/output_surface_client.h" |
39 #include "cc/output/texture_mailbox_deleter.h" | 39 #include "cc/output/texture_mailbox_deleter.h" |
40 #include "cc/output/vulkan_in_process_context_provider.h" | 40 #include "cc/output/vulkan_in_process_context_provider.h" |
41 #include "cc/raster/single_thread_task_graph_runner.h" | 41 #include "cc/raster/single_thread_task_graph_runner.h" |
42 #include "cc/resources/ui_resource_manager.h" | 42 #include "cc/resources/ui_resource_manager.h" |
43 #include "cc/scheduler/begin_frame_source.h" | 43 #include "cc/scheduler/begin_frame_source.h" |
| 44 #include "cc/surfaces/direct_compositor_frame_sink.h" |
44 #include "cc/surfaces/display.h" | 45 #include "cc/surfaces/display.h" |
45 #include "cc/surfaces/display_scheduler.h" | 46 #include "cc/surfaces/display_scheduler.h" |
46 #include "cc/surfaces/surface_display_output_surface.h" | |
47 #include "cc/surfaces/surface_id_allocator.h" | 47 #include "cc/surfaces/surface_id_allocator.h" |
48 #include "cc/trees/layer_tree_host.h" | 48 #include "cc/trees/layer_tree_host.h" |
49 #include "cc/trees/layer_tree_settings.h" | 49 #include "cc/trees/layer_tree_settings.h" |
50 #include "components/display_compositor/compositor_overlay_candidate_validator_a
ndroid.h" | 50 #include "components/display_compositor/compositor_overlay_candidate_validator_a
ndroid.h" |
51 #include "components/display_compositor/gl_helper.h" | 51 #include "components/display_compositor/gl_helper.h" |
52 #include "content/browser/android/child_process_launcher_android.h" | 52 #include "content/browser/android/child_process_launcher_android.h" |
53 #include "content/browser/gpu/browser_gpu_memory_buffer_manager.h" | 53 #include "content/browser/gpu/browser_gpu_memory_buffer_manager.h" |
54 #include "content/browser/gpu/compositor_util.h" | 54 #include "content/browser/gpu/compositor_util.h" |
55 #include "content/browser/gpu/gpu_surface_tracker.h" | 55 #include "content/browser/gpu/gpu_surface_tracker.h" |
56 #include "content/browser/renderer_host/context_provider_factory_impl_android.h" | 56 #include "content/browser/renderer_host/context_provider_factory_impl_android.h" |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
205 base::TimeTicks deadline = frame_time + vsync_period; | 205 base::TimeTicks deadline = frame_time + vsync_period; |
206 last_begin_frame_args_ = | 206 last_begin_frame_args_ = |
207 cc::BeginFrameArgs::Create(BEGINFRAME_FROM_HERE, frame_time, deadline, | 207 cc::BeginFrameArgs::Create(BEGINFRAME_FROM_HERE, frame_time, deadline, |
208 vsync_period, cc::BeginFrameArgs::NORMAL); | 208 vsync_period, cc::BeginFrameArgs::NORMAL); |
209 std::unordered_set<cc::BeginFrameObserver*> observers(observers_); | 209 std::unordered_set<cc::BeginFrameObserver*> observers(observers_); |
210 for (auto* obs : observers) | 210 for (auto* obs : observers) |
211 obs->OnBeginFrame(last_begin_frame_args_); | 211 obs->OnBeginFrame(last_begin_frame_args_); |
212 } | 212 } |
213 | 213 |
214 // Used to override capabilities_.adjust_deadline_for_parent to false | 214 // Used to override capabilities_.adjust_deadline_for_parent to false |
215 class OutputSurfaceWithoutParent : public cc::OutputSurface { | 215 class AndroidOutputSurface : public cc::OutputSurface { |
216 public: | 216 public: |
217 OutputSurfaceWithoutParent( | 217 AndroidOutputSurface( |
218 scoped_refptr<ContextProviderCommandBuffer> context_provider, | 218 scoped_refptr<ContextProviderCommandBuffer> context_provider, |
219 const base::Callback<void(gpu::Capabilities)>& | 219 const base::Callback<void(gpu::Capabilities)>& |
220 populate_gpu_capabilities_callback) | 220 populate_gpu_capabilities_callback) |
221 : cc::OutputSurface(std::move(context_provider), nullptr, nullptr), | 221 : cc::OutputSurface(std::move(context_provider), nullptr, nullptr), |
222 populate_gpu_capabilities_callback_(populate_gpu_capabilities_callback), | 222 populate_gpu_capabilities_callback_(populate_gpu_capabilities_callback), |
223 swap_buffers_completion_callback_( | 223 swap_buffers_completion_callback_( |
224 base::Bind(&OutputSurfaceWithoutParent::OnSwapBuffersCompleted, | 224 base::Bind(&AndroidOutputSurface::OnSwapBuffersCompleted, |
225 base::Unretained(this))), | 225 base::Unretained(this))), |
226 overlay_candidate_validator_( | 226 overlay_candidate_validator_( |
227 new display_compositor:: | 227 new display_compositor:: |
228 CompositorOverlayCandidateValidatorAndroid()) { | 228 CompositorOverlayCandidateValidatorAndroid()) { |
229 capabilities_.adjust_deadline_for_parent = false; | 229 capabilities_.adjust_deadline_for_parent = false; |
230 capabilities_.max_frames_pending = kMaxDisplaySwapBuffers; | 230 capabilities_.max_frames_pending = kMaxDisplaySwapBuffers; |
231 } | 231 } |
232 | 232 |
233 ~OutputSurfaceWithoutParent() override = default; | 233 ~AndroidOutputSurface() override = default; |
234 | 234 |
235 void SwapBuffers(cc::CompositorFrame frame) override { | 235 void SwapBuffers(cc::CompositorFrame frame) override { |
236 GetCommandBufferProxy()->SetLatencyInfo(frame.metadata.latency_info); | 236 GetCommandBufferProxy()->SetLatencyInfo(frame.metadata.latency_info); |
237 if (frame.gl_frame_data->sub_buffer_rect.IsEmpty()) { | 237 if (frame.gl_frame_data->sub_buffer_rect.IsEmpty()) { |
238 context_provider_->ContextSupport()->CommitOverlayPlanes(); | 238 context_provider_->ContextSupport()->CommitOverlayPlanes(); |
239 } else { | 239 } else { |
240 DCHECK(frame.gl_frame_data->sub_buffer_rect == | 240 DCHECK(frame.gl_frame_data->sub_buffer_rect == |
241 gfx::Rect(frame.gl_frame_data->size)); | 241 gfx::Rect(frame.gl_frame_data->size)); |
242 context_provider_->ContextSupport()->Swap(); | 242 context_provider_->ContextSupport()->Swap(); |
243 } | 243 } |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
389 resource_manager_(root_window), | 389 resource_manager_(root_window), |
390 has_transparent_background_(false), | 390 has_transparent_background_(false), |
391 device_scale_factor_(1), | 391 device_scale_factor_(1), |
392 window_(NULL), | 392 window_(NULL), |
393 surface_handle_(gpu::kNullSurfaceHandle), | 393 surface_handle_(gpu::kNullSurfaceHandle), |
394 client_(client), | 394 client_(client), |
395 root_window_(root_window), | 395 root_window_(root_window), |
396 needs_animate_(false), | 396 needs_animate_(false), |
397 pending_swapbuffers_(0U), | 397 pending_swapbuffers_(0U), |
398 num_successive_context_creation_failures_(0), | 398 num_successive_context_creation_failures_(0), |
399 output_surface_request_pending_(false), | 399 compositor_frame_sink_request_pending_(false), |
400 needs_begin_frames_(false), | 400 needs_begin_frames_(false), |
401 weak_factory_(this) { | 401 weak_factory_(this) { |
402 ui::ContextProviderFactory::GetInstance() | 402 ui::ContextProviderFactory::GetInstance() |
403 ->GetSurfaceManager() | 403 ->GetSurfaceManager() |
404 ->RegisterSurfaceClientId(surface_id_allocator_->client_id()); | 404 ->RegisterSurfaceClientId(surface_id_allocator_->client_id()); |
405 DCHECK(client); | 405 DCHECK(client); |
406 DCHECK(root_window); | 406 DCHECK(root_window); |
407 DCHECK(root_window->GetLayer() == nullptr); | 407 DCHECK(root_window->GetLayer() == nullptr); |
408 root_window->SetLayer(cc::Layer::Create()); | 408 root_window->SetLayer(cc::Layer::Create()); |
409 readback_layer_tree_ = cc::Layer::Create(); | 409 readback_layer_tree_ = cc::Layer::Create(); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
465 // ANativeWindow_fromSurface are released immediately. This is needed as a | 465 // ANativeWindow_fromSurface are released immediately. This is needed as a |
466 // workaround for https://code.google.com/p/android/issues/detail?id=68174 | 466 // workaround for https://code.google.com/p/android/issues/detail?id=68174 |
467 base::android::ScopedJavaLocalFrame scoped_local_reference_frame(env); | 467 base::android::ScopedJavaLocalFrame scoped_local_reference_frame(env); |
468 window = ANativeWindow_fromSurface(env, surface); | 468 window = ANativeWindow_fromSurface(env, surface); |
469 } | 469 } |
470 | 470 |
471 if (window) { | 471 if (window) { |
472 window_ = window; | 472 window_ = window; |
473 ANativeWindow_acquire(window); | 473 ANativeWindow_acquire(window); |
474 surface_handle_ = tracker->AddSurfaceForNativeWidget(window); | 474 surface_handle_ = tracker->AddSurfaceForNativeWidget(window); |
475 // Register first, SetVisible() might create an OutputSurface. | 475 // Register first, SetVisible() might create a CompositorFrameSink. |
476 RegisterViewSurface(surface_handle_, j_surface); | 476 RegisterViewSurface(surface_handle_, j_surface); |
477 SetVisible(true); | 477 SetVisible(true); |
478 ANativeWindow_release(window); | 478 ANativeWindow_release(window); |
479 } | 479 } |
480 } | 480 } |
481 | 481 |
482 void CompositorImpl::CreateLayerTreeHost() { | 482 void CompositorImpl::CreateLayerTreeHost() { |
483 DCHECK(!host_); | 483 DCHECK(!host_); |
484 | 484 |
485 cc::LayerTreeSettings settings; | 485 cc::LayerTreeSettings settings; |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
522 if (!visible) { | 522 if (!visible) { |
523 DCHECK(host_->IsVisible()); | 523 DCHECK(host_->IsVisible()); |
524 | 524 |
525 // Make a best effort to try to complete pending readbacks. | 525 // Make a best effort to try to complete pending readbacks. |
526 // TODO(crbug.com/637035): Consider doing this in a better way, | 526 // TODO(crbug.com/637035): Consider doing this in a better way, |
527 // ideally with the guarantee of readbacks completing. | 527 // ideally with the guarantee of readbacks completing. |
528 if (display_.get() && HavePendingReadbacks()) | 528 if (display_.get() && HavePendingReadbacks()) |
529 display_->ForceImmediateDrawAndSwapIfPossible(); | 529 display_->ForceImmediateDrawAndSwapIfPossible(); |
530 | 530 |
531 host_->SetVisible(false); | 531 host_->SetVisible(false); |
532 host_->ReleaseOutputSurface(); | 532 host_->ReleaseCompositorFrameSink(); |
533 pending_swapbuffers_ = 0; | 533 pending_swapbuffers_ = 0; |
534 display_.reset(); | 534 display_.reset(); |
535 } else { | 535 } else { |
536 host_->SetVisible(true); | 536 host_->SetVisible(true); |
537 if (output_surface_request_pending_) | 537 if (compositor_frame_sink_request_pending_) |
538 HandlePendingOutputSurfaceRequest(); | 538 HandlePendingCompositorFrameSinkRequest(); |
539 } | 539 } |
540 } | 540 } |
541 | 541 |
542 void CompositorImpl::setDeviceScaleFactor(float factor) { | 542 void CompositorImpl::setDeviceScaleFactor(float factor) { |
543 device_scale_factor_ = factor; | 543 device_scale_factor_ = factor; |
544 if (host_) | 544 if (host_) |
545 host_->GetLayerTree()->SetDeviceScaleFactor(factor); | 545 host_->GetLayerTree()->SetDeviceScaleFactor(factor); |
546 } | 546 } |
547 | 547 |
548 void CompositorImpl::SetWindowBounds(const gfx::Size& size) { | 548 void CompositorImpl::SetWindowBounds(const gfx::Size& size) { |
(...skipping 22 matching lines...) Expand all Loading... |
571 } | 571 } |
572 | 572 |
573 void CompositorImpl::UpdateLayerTreeHost() { | 573 void CompositorImpl::UpdateLayerTreeHost() { |
574 client_->UpdateLayerTreeHost(); | 574 client_->UpdateLayerTreeHost(); |
575 if (needs_animate_) { | 575 if (needs_animate_) { |
576 needs_animate_ = false; | 576 needs_animate_ = false; |
577 root_window_->Animate(base::TimeTicks::Now()); | 577 root_window_->Animate(base::TimeTicks::Now()); |
578 } | 578 } |
579 } | 579 } |
580 | 580 |
581 void CompositorImpl::RequestNewOutputSurface() { | 581 void CompositorImpl::RequestNewCompositorFrameSink() { |
582 DCHECK(!output_surface_request_pending_) | 582 DCHECK(!compositor_frame_sink_request_pending_) |
583 << "Output Surface Request is already pending?"; | 583 << "Output Surface Request is already pending?"; |
584 | 584 |
585 output_surface_request_pending_ = true; | 585 compositor_frame_sink_request_pending_ = true; |
586 HandlePendingOutputSurfaceRequest(); | 586 HandlePendingCompositorFrameSinkRequest(); |
587 } | 587 } |
588 | 588 |
589 void CompositorImpl::DidInitializeOutputSurface() { | 589 void CompositorImpl::DidInitializeCompositorFrameSink() { |
590 num_successive_context_creation_failures_ = 0; | 590 num_successive_context_creation_failures_ = 0; |
591 output_surface_request_pending_ = false; | 591 compositor_frame_sink_request_pending_ = false; |
592 } | 592 } |
593 | 593 |
594 void CompositorImpl::DidFailToInitializeOutputSurface() { | 594 void CompositorImpl::DidFailToInitializeCompositorFrameSink() { |
595 LOG(ERROR) << "Failed to init OutputSurface for compositor."; | 595 LOG(ERROR) << "Failed to init CompositorFrameSink for compositor."; |
596 LOG_IF(FATAL, ++num_successive_context_creation_failures_ >= 2) | 596 LOG_IF(FATAL, ++num_successive_context_creation_failures_ >= 2) |
597 << "Too many context creation failures. Giving up... "; | 597 << "Too many context creation failures. Giving up... "; |
598 HandlePendingOutputSurfaceRequest(); | 598 HandlePendingCompositorFrameSinkRequest(); |
599 } | 599 } |
600 | 600 |
601 void CompositorImpl::HandlePendingOutputSurfaceRequest() { | 601 void CompositorImpl::HandlePendingCompositorFrameSinkRequest() { |
602 DCHECK(output_surface_request_pending_); | 602 DCHECK(compositor_frame_sink_request_pending_); |
603 | 603 |
604 // We might have been made invisible now. | 604 // We might have been made invisible now. |
605 if (!host_->IsVisible()) | 605 if (!host_->IsVisible()) |
606 return; | 606 return; |
607 | 607 |
608 #if defined(ENABLE_VULKAN) | 608 #if defined(ENABLE_VULKAN) |
609 CreateVulkanOutputSurface() | 609 CreateVulkanOutputSurface() |
610 if (display_) | 610 if (display_) |
611 return; | 611 return; |
612 #endif | 612 #endif |
613 | 613 |
614 DCHECK(surface_handle_ != gpu::kNullSurfaceHandle); | 614 DCHECK(surface_handle_ != gpu::kNullSurfaceHandle); |
615 ContextProviderFactoryImpl::GetInstance()->RequestGpuChannelHost(base::Bind( | 615 ContextProviderFactoryImpl::GetInstance()->RequestGpuChannelHost(base::Bind( |
616 &CompositorImpl::OnGpuChannelEstablished, weak_factory_.GetWeakPtr())); | 616 &CompositorImpl::OnGpuChannelEstablished, weak_factory_.GetWeakPtr())); |
617 } | 617 } |
618 | 618 |
619 #if defined(ENABLE_VULKAN) | 619 #if defined(ENABLE_VULKAN) |
620 void CompositorImpl::CreateVulkanOutputSurface() { | 620 void CompositorImpl::CreateVulkanOutputSurface() { |
621 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( | 621 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( |
622 switches::kEnableVulkan)) | 622 switches::kEnableVulkan)) |
623 return; | 623 return; |
624 | 624 |
625 std::unique_ptr<cc::OutputSurface> display_output_surface; | |
626 scoped_refptr<cc::VulkanContextProvider> vulkan_context_provider = | 625 scoped_refptr<cc::VulkanContextProvider> vulkan_context_provider = |
627 ui::ContextProviderFactory::GetInstance() | 626 ui::ContextProviderFactory::GetInstance() |
628 ->GetSharedVulkanContextProvider(); | 627 ->GetSharedVulkanContextProvider(); |
629 if (vulkan_context_provider) { | 628 if (!vulkan_context_provider) |
630 std::unique_ptr<VulkanOutputSurface> vulkan_surface( | |
631 new VulkanOutputSurface(std::move(vulkan_context_provider))); | |
632 if (!vulkan_surface->Initialize(window_)) { | |
633 vulkan_surface->Destroy(); | |
634 vulkan_surface.reset(); | |
635 } else { | |
636 display_output_surface = std::move(vulkan_surface); | |
637 } | |
638 } | |
639 | |
640 if (!display_output_surface) | |
641 return; | 629 return; |
642 | 630 |
643 InitializeDisplay(std::move(display_output_surface), | 631 auto vulkan_surface = |
| 632 base::MakeUnique<VulkanOutputSurface>(vulkan_context_provider); |
| 633 if (!vulkan_surface->Initialize(window_)) |
| 634 return; |
| 635 |
| 636 InitializeDisplay(std::move(vulkan_surface), |
644 std::move(vulkan_context_provider), nullptr); | 637 std::move(vulkan_context_provider), nullptr); |
645 } | 638 } |
646 #endif | 639 #endif |
647 | 640 |
648 void CompositorImpl::OnGpuChannelEstablished( | 641 void CompositorImpl::OnGpuChannelEstablished( |
649 scoped_refptr<gpu::GpuChannelHost> gpu_channel_host, | 642 scoped_refptr<gpu::GpuChannelHost> gpu_channel_host, |
650 ui::ContextProviderFactory::GpuChannelHostResult result) { | 643 ui::ContextProviderFactory::GpuChannelHostResult result) { |
651 // We might end up queing multiple GpuChannel requests for the same | 644 // We might end up queing multiple GpuChannel requests for the same |
652 // OutputSurface request as the visibility of the compositor changes, so the | 645 // CompositorFrameSink request as the visibility of the compositor changes, so |
653 // OutputSurface request could have been handled already. | 646 // the CompositorFrameSink request could have been handled already. |
654 if (!output_surface_request_pending_) | 647 if (!compositor_frame_sink_request_pending_) |
655 return; | 648 return; |
656 | 649 |
657 switch (result) { | 650 switch (result) { |
658 // Don't retry if we are shutting down. | 651 // Don't retry if we are shutting down. |
659 case ui::ContextProviderFactory::GpuChannelHostResult:: | 652 case ui::ContextProviderFactory::GpuChannelHostResult:: |
660 FAILURE_FACTORY_SHUTDOWN: | 653 FAILURE_FACTORY_SHUTDOWN: |
661 break; | 654 break; |
662 case ui::ContextProviderFactory::GpuChannelHostResult:: | 655 case ui::ContextProviderFactory::GpuChannelHostResult:: |
663 FAILURE_GPU_PROCESS_INITIALIZATION_FAILED: | 656 FAILURE_GPU_PROCESS_INITIALIZATION_FAILED: |
664 // TODO(khushalsagar): Retry or have a fallback path after | 657 // TODO(khushalsagar): Retry or have a fallback path after |
(...skipping 11 matching lines...) Expand all Loading... |
676 ->CreateDisplayContextProvider( | 669 ->CreateDisplayContextProvider( |
677 surface_handle_, GetCompositorContextSharedMemoryLimits(), | 670 surface_handle_, GetCompositorContextSharedMemoryLimits(), |
678 GetCompositorContextAttributes(has_transparent_background_), | 671 GetCompositorContextAttributes(has_transparent_background_), |
679 false /*support_locking*/, false /*automatic_flushes*/, | 672 false /*support_locking*/, false /*automatic_flushes*/, |
680 std::move(gpu_channel_host)); | 673 std::move(gpu_channel_host)); |
681 | 674 |
682 scoped_refptr<ContextProviderCommandBuffer> | 675 scoped_refptr<ContextProviderCommandBuffer> |
683 context_provider_command_buffer = | 676 context_provider_command_buffer = |
684 static_cast<ContextProviderCommandBuffer*>( | 677 static_cast<ContextProviderCommandBuffer*>( |
685 context_provider.get()); | 678 context_provider.get()); |
686 std::unique_ptr<cc::OutputSurface> display_output_surface( | 679 auto display_output_surface = base::MakeUnique<AndroidOutputSurface>( |
687 new OutputSurfaceWithoutParent( | 680 context_provider_command_buffer, |
688 context_provider_command_buffer, | 681 base::Bind(&CompositorImpl::PopulateGpuCapabilities, |
689 base::Bind(&CompositorImpl::PopulateGpuCapabilities, | 682 base::Unretained(this))); |
690 base::Unretained(this)))); | |
691 InitializeDisplay(std::move(display_output_surface), nullptr, | 683 InitializeDisplay(std::move(display_output_surface), nullptr, |
692 std::move(context_provider)); | 684 std::move(context_provider)); |
693 break; | 685 break; |
694 } | 686 } |
695 } | 687 } |
696 | 688 |
697 void CompositorImpl::InitializeDisplay( | 689 void CompositorImpl::InitializeDisplay( |
698 std::unique_ptr<cc::OutputSurface> display_output_surface, | 690 std::unique_ptr<cc::OutputSurface> display_output_surface, |
699 scoped_refptr<cc::VulkanContextProvider> vulkan_context_provider, | 691 scoped_refptr<cc::VulkanContextProvider> vulkan_context_provider, |
700 scoped_refptr<cc::ContextProvider> context_provider) { | 692 scoped_refptr<cc::ContextProvider> context_provider) { |
701 DCHECK(output_surface_request_pending_); | 693 DCHECK(compositor_frame_sink_request_pending_); |
702 | 694 |
703 pending_swapbuffers_ = 0; | 695 pending_swapbuffers_ = 0; |
704 | 696 |
705 cc::SurfaceManager* manager = | 697 cc::SurfaceManager* manager = |
706 ui::ContextProviderFactory::GetInstance()->GetSurfaceManager(); | 698 ui::ContextProviderFactory::GetInstance()->GetSurfaceManager(); |
707 auto* task_runner = base::ThreadTaskRunnerHandle::Get().get(); | 699 auto* task_runner = base::ThreadTaskRunnerHandle::Get().get(); |
708 std::unique_ptr<ExternalBeginFrameSource> begin_frame_source( | 700 std::unique_ptr<ExternalBeginFrameSource> begin_frame_source( |
709 new ExternalBeginFrameSource(this)); | 701 new ExternalBeginFrameSource(this)); |
710 std::unique_ptr<cc::DisplayScheduler> scheduler(new cc::DisplayScheduler( | 702 std::unique_ptr<cc::DisplayScheduler> scheduler(new cc::DisplayScheduler( |
711 begin_frame_source.get(), task_runner, | 703 begin_frame_source.get(), task_runner, |
712 display_output_surface->capabilities().max_frames_pending)); | 704 display_output_surface->capabilities().max_frames_pending)); |
713 | 705 |
714 display_.reset(new cc::Display( | 706 display_.reset(new cc::Display( |
715 HostSharedBitmapManager::current(), | 707 HostSharedBitmapManager::current(), |
716 BrowserGpuMemoryBufferManager::current(), | 708 BrowserGpuMemoryBufferManager::current(), |
717 host_->GetSettings().renderer_settings, std::move(begin_frame_source), | 709 host_->GetSettings().renderer_settings, std::move(begin_frame_source), |
718 std::move(display_output_surface), std::move(scheduler), | 710 std::move(display_output_surface), std::move(scheduler), |
719 base::MakeUnique<cc::TextureMailboxDeleter>(task_runner))); | 711 base::MakeUnique<cc::TextureMailboxDeleter>(task_runner))); |
720 | 712 |
721 std::unique_ptr<cc::SurfaceDisplayOutputSurface> delegated_output_surface( | 713 auto compositor_frame_sink = |
722 vulkan_context_provider ? new cc::SurfaceDisplayOutputSurface( | 714 vulkan_context_provider ? base::MakeUnique<cc::DirectCompositorFrameSink>( |
723 manager, surface_id_allocator_.get(), | 715 manager, surface_id_allocator_.get(), |
724 display_.get(), vulkan_context_provider) | 716 display_.get(), vulkan_context_provider) |
725 : new cc::SurfaceDisplayOutputSurface( | 717 : base::MakeUnique<cc::DirectCompositorFrameSink>( |
726 manager, surface_id_allocator_.get(), | 718 manager, surface_id_allocator_.get(), |
727 display_.get(), context_provider, nullptr)); | 719 display_.get(), context_provider, nullptr); |
728 | 720 |
729 display_->SetVisible(true); | 721 display_->SetVisible(true); |
730 display_->Resize(size_); | 722 display_->Resize(size_); |
731 host_->SetOutputSurface(std::move(delegated_output_surface)); | 723 host_->SetCompositorFrameSink(std::move(compositor_frame_sink)); |
732 } | 724 } |
733 | 725 |
734 void CompositorImpl::PopulateGpuCapabilities( | 726 void CompositorImpl::PopulateGpuCapabilities( |
735 gpu::Capabilities gpu_capabilities) { | 727 gpu::Capabilities gpu_capabilities) { |
736 gpu_capabilities_ = gpu_capabilities; | 728 gpu_capabilities_ = gpu_capabilities; |
737 } | 729 } |
738 | 730 |
739 void CompositorImpl::AddObserver(VSyncObserver* observer) { | 731 void CompositorImpl::AddObserver(VSyncObserver* observer) { |
740 observer_list_.AddObserver(observer); | 732 observer_list_.AddObserver(observer); |
741 } | 733 } |
(...skipping 25 matching lines...) Expand all Loading... |
767 void CompositorImpl::DidCompleteSwapBuffers() { | 759 void CompositorImpl::DidCompleteSwapBuffers() { |
768 TRACE_EVENT0("compositor", "CompositorImpl::DidCompleteSwapBuffers"); | 760 TRACE_EVENT0("compositor", "CompositorImpl::DidCompleteSwapBuffers"); |
769 DCHECK_GT(pending_swapbuffers_, 0U); | 761 DCHECK_GT(pending_swapbuffers_, 0U); |
770 pending_swapbuffers_--; | 762 pending_swapbuffers_--; |
771 client_->OnSwapBuffersCompleted(pending_swapbuffers_); | 763 client_->OnSwapBuffersCompleted(pending_swapbuffers_); |
772 } | 764 } |
773 | 765 |
774 void CompositorImpl::DidAbortSwapBuffers() { | 766 void CompositorImpl::DidAbortSwapBuffers() { |
775 TRACE_EVENT0("compositor", "CompositorImpl::DidAbortSwapBuffers"); | 767 TRACE_EVENT0("compositor", "CompositorImpl::DidAbortSwapBuffers"); |
776 // This really gets called only once from | 768 // This really gets called only once from |
777 // SingleThreadProxy::DidLoseOutputSurfaceOnImplThread() when the | 769 // SingleThreadProxy::DidLoseCompositorFrameSinkOnImplThread() when the |
778 // context was lost. | 770 // context was lost. |
779 if (host_->IsVisible()) | 771 if (host_->IsVisible()) |
780 host_->SetNeedsCommit(); | 772 host_->SetNeedsCommit(); |
781 client_->OnSwapBuffersCompleted(0); | 773 client_->OnSwapBuffersCompleted(0); |
782 } | 774 } |
783 | 775 |
784 void CompositorImpl::DidCommit() { | 776 void CompositorImpl::DidCommit() { |
785 root_window_->OnCompositingDidCommit(); | 777 root_window_->OnCompositingDidCommit(); |
786 } | 778 } |
787 | 779 |
(...skipping 30 matching lines...) Expand all Loading... |
818 | 810 |
819 TRACE_EVENT0("compositor", "Compositor::SetNeedsAnimate"); | 811 TRACE_EVENT0("compositor", "Compositor::SetNeedsAnimate"); |
820 host_->SetNeedsAnimate(); | 812 host_->SetNeedsAnimate(); |
821 } | 813 } |
822 | 814 |
823 bool CompositorImpl::HavePendingReadbacks() { | 815 bool CompositorImpl::HavePendingReadbacks() { |
824 return !readback_layer_tree_->children().empty(); | 816 return !readback_layer_tree_->children().empty(); |
825 } | 817 } |
826 | 818 |
827 } // namespace content | 819 } // namespace content |
OLD | NEW |