| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/compositor/gpu_process_transport_factory.h" | 5 #include "content/browser/compositor/gpu_process_transport_factory.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 418 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 429 gpu::GpuChannelEstablishedCallback callback( | 429 gpu::GpuChannelEstablishedCallback callback( |
| 430 base::Bind(&GpuProcessTransportFactory::EstablishedGpuChannel, | 430 base::Bind(&GpuProcessTransportFactory::EstablishedGpuChannel, |
| 431 callback_factory_.GetWeakPtr(), compositor, | 431 callback_factory_.GetWeakPtr(), compositor, |
| 432 create_gpu_output_surface, num_attempts + 1)); | 432 create_gpu_output_surface, num_attempts + 1)); |
| 433 DCHECK(gpu_channel_factory_); | 433 DCHECK(gpu_channel_factory_); |
| 434 gpu_channel_factory_->EstablishGpuChannel(callback); | 434 gpu_channel_factory_->EstablishGpuChannel(callback); |
| 435 return; | 435 return; |
| 436 } | 436 } |
| 437 } | 437 } |
| 438 | 438 |
| 439 std::unique_ptr<cc::SyntheticBeginFrameSource> begin_frame_source; | 439 cc::SyntheticBeginFrameSource* synthetic_begin_frame_source; |
| 440 if (!compositor->GetRendererSettings().disable_display_vsync) { | 440 if (!compositor->GetRendererSettings().disable_display_vsync) { |
| 441 begin_frame_source.reset(new cc::DelayBasedBeginFrameSource( | 441 synthetic_begin_frame_source = new cc::DelayBasedBeginFrameSource( |
| 442 base::MakeUnique<cc::DelayBasedTimeSource>( | 442 base::MakeUnique<cc::DelayBasedTimeSource>( |
| 443 compositor->task_runner().get()))); | 443 compositor->task_runner().get())); |
| 444 } else { | 444 } else { |
| 445 begin_frame_source.reset(new cc::BackToBackBeginFrameSource( | 445 synthetic_begin_frame_source = new cc::BackToBackBeginFrameSource( |
| 446 base::MakeUnique<cc::DelayBasedTimeSource>( | 446 base::MakeUnique<cc::DelayBasedTimeSource>( |
| 447 compositor->task_runner().get()))); | 447 compositor->task_runner().get())); |
| 448 } | 448 } |
| 449 std::unique_ptr<cc::BeginFrameSource> begin_frame_source( |
| 450 synthetic_begin_frame_source); |
| 449 | 451 |
| 450 BrowserCompositorOutputSurface::UpdateVSyncParametersCallback vsync_callback = | 452 BrowserCompositorOutputSurface::UpdateVSyncParametersCallback vsync_callback = |
| 451 base::Bind(&ui::Compositor::SetDisplayVSyncParameters, compositor); | 453 base::Bind(&ui::Compositor::SetDisplayVSyncParameters, compositor); |
| 452 | 454 |
| 453 std::unique_ptr<BrowserCompositorOutputSurface> display_output_surface; | 455 std::unique_ptr<BrowserCompositorOutputSurface> display_output_surface; |
| 454 #if defined(ENABLE_VULKAN) | 456 #if defined(ENABLE_VULKAN) |
| 455 std::unique_ptr<VulkanBrowserCompositorOutputSurface> vulkan_surface; | 457 std::unique_ptr<VulkanBrowserCompositorOutputSurface> vulkan_surface; |
| 456 if (vulkan_context_provider) { | 458 if (vulkan_context_provider) { |
| 457 vulkan_surface.reset(new VulkanBrowserCompositorOutputSurface( | 459 vulkan_surface.reset(new VulkanBrowserCompositorOutputSurface( |
| 458 vulkan_context_provider, vsync_callback)); | 460 vulkan_context_provider, vsync_callback)); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 503 // Overlays are only supported on surfaceless output surfaces on Mac. | 505 // Overlays are only supported on surfaceless output surfaces on Mac. |
| 504 if (!use_mus) | 506 if (!use_mus) |
| 505 validator = CreateOverlayCandidateValidator(compositor->widget()); | 507 validator = CreateOverlayCandidateValidator(compositor->widget()); |
| 506 #endif | 508 #endif |
| 507 if (!use_mus) { | 509 if (!use_mus) { |
| 508 display_output_surface = | 510 display_output_surface = |
| 509 base::MakeUnique<GpuBrowserCompositorOutputSurface>( | 511 base::MakeUnique<GpuBrowserCompositorOutputSurface>( |
| 510 context_provider, vsync_callback, std::move(validator)); | 512 context_provider, vsync_callback, std::move(validator)); |
| 511 } else { | 513 } else { |
| 512 #if defined(USE_AURA) | 514 #if defined(USE_AURA) |
| 515 std::unique_ptr<MusBrowserCompositorOutputSurface> mus_output_surface; |
| 513 if (compositor->window()) { | 516 if (compositor->window()) { |
| 514 // TODO(mfomitchev): Remove this clause once we complete the switch | 517 // TODO(mfomitchev): Remove this clause once we complete the switch |
| 515 // to Aura-Mus. | 518 // to Aura-Mus. |
| 516 display_output_surface = | 519 mus_output_surface = |
| 517 base::MakeUnique<MusBrowserCompositorOutputSurface>( | 520 base::MakeUnique<MusBrowserCompositorOutputSurface>( |
| 518 compositor->window(), context_provider, | 521 compositor->window(), context_provider, |
| 519 GetGpuMemoryBufferManager(), vsync_callback, | 522 GetGpuMemoryBufferManager(), vsync_callback, |
| 520 std::move(validator)); | 523 std::move(validator)); |
| 521 } else { | 524 } else { |
| 522 aura::WindowTreeHost* host = | 525 aura::WindowTreeHost* host = |
| 523 aura::WindowTreeHost::GetForAcceleratedWidget( | 526 aura::WindowTreeHost::GetForAcceleratedWidget( |
| 524 compositor->widget()); | 527 compositor->widget()); |
| 525 display_output_surface = | 528 mus_output_surface = |
| 526 base::MakeUnique<MusBrowserCompositorOutputSurface>( | 529 base::MakeUnique<MusBrowserCompositorOutputSurface>( |
| 527 host->window(), context_provider, | 530 host->window(), context_provider, |
| 528 GetGpuMemoryBufferManager(), vsync_callback, | 531 GetGpuMemoryBufferManager(), vsync_callback, |
| 529 std::move(validator)); | 532 std::move(validator)); |
| 530 } | 533 } |
| 534 // We use the ExternalBeginFrameSource provided by the output surface |
| 535 // instead of our own synthetic one. |
| 536 begin_frame_source.reset(new cc::DelegatingBeginFrameSource( |
| 537 mus_output_surface->GetBeginFrameSource())); |
| 538 synthetic_begin_frame_source = nullptr; |
| 539 display_output_surface = std::move(mus_output_surface); |
| 531 #else | 540 #else |
| 532 NOTREACHED(); | 541 NOTREACHED(); |
| 533 #endif | 542 #endif |
| 534 } | 543 } |
| 535 } | 544 } |
| 536 } | 545 } |
| 537 } | 546 } |
| 538 | 547 |
| 539 data->display_output_surface = display_output_surface.get(); | 548 data->display_output_surface = display_output_surface.get(); |
| 540 data->begin_frame_source = begin_frame_source.get(); | 549 if (synthetic_begin_frame_source) |
| 550 data->begin_frame_source = synthetic_begin_frame_source; |
| 541 if (data->reflector) | 551 if (data->reflector) |
| 542 data->reflector->OnSourceSurfaceReady(data->display_output_surface); | 552 data->reflector->OnSourceSurfaceReady(data->display_output_surface); |
| 543 | 553 |
| 544 #if defined(OS_WIN) | 554 #if defined(OS_WIN) |
| 545 gfx::RenderingWindowManager::GetInstance()->DoSetParentOnChild( | 555 gfx::RenderingWindowManager::GetInstance()->DoSetParentOnChild( |
| 546 compositor->widget()); | 556 compositor->widget()); |
| 547 #endif | 557 #endif |
| 548 | 558 |
| 549 std::unique_ptr<cc::DisplayScheduler> scheduler(new cc::DisplayScheduler( | 559 std::unique_ptr<cc::DisplayScheduler> scheduler(new cc::DisplayScheduler( |
| 550 begin_frame_source.get(), compositor->task_runner().get(), | 560 compositor->task_runner().get(), |
| 551 display_output_surface->capabilities().max_frames_pending)); | 561 display_output_surface->capabilities().max_frames_pending)); |
| 552 | 562 |
| 553 // The Display owns and uses the |display_output_surface| created above. | 563 // The Display owns and uses the |display_output_surface| created above. |
| 554 data->display = base::MakeUnique<cc::Display>( | 564 data->display = base::MakeUnique<cc::Display>( |
| 555 HostSharedBitmapManager::current(), GetGpuMemoryBufferManager(), | 565 HostSharedBitmapManager::current(), GetGpuMemoryBufferManager(), |
| 556 compositor->GetRendererSettings(), compositor->frame_sink_id(), | 566 compositor->GetRendererSettings(), compositor->frame_sink_id(), |
| 557 std::move(begin_frame_source), std::move(display_output_surface), | 567 std::move(begin_frame_source), std::move(display_output_surface), |
| 558 std::move(scheduler), base::MakeUnique<cc::TextureMailboxDeleter>( | 568 std::move(scheduler), base::MakeUnique<cc::TextureMailboxDeleter>( |
| 559 compositor->task_runner().get())); | 569 compositor->task_runner().get())); |
| 560 | 570 |
| (...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 880 shared_vulkan_context_provider_ = | 890 shared_vulkan_context_provider_ = |
| 881 cc::VulkanInProcessContextProvider::Create(); | 891 cc::VulkanInProcessContextProvider::Create(); |
| 882 } | 892 } |
| 883 | 893 |
| 884 shared_vulkan_context_provider_initialized_ = true; | 894 shared_vulkan_context_provider_initialized_ = true; |
| 885 } | 895 } |
| 886 return shared_vulkan_context_provider_; | 896 return shared_vulkan_context_provider_; |
| 887 } | 897 } |
| 888 | 898 |
| 889 } // namespace content | 899 } // namespace content |
| OLD | NEW |