Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(314)

Side by Side Diff: content/browser/renderer_host/compositor_impl_android.cc

Issue 2337913003: Fork cc::OutputSurface into cc::CompositorFrameSink. (Closed)
Patch Set: cfsfork: android-vulkan Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « content/browser/renderer_host/compositor_impl_android.h ('k') | content/browser/renderer_host/delegated_frame_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698