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" |
11 #include "base/command_line.h" | 11 #include "base/command_line.h" |
12 #include "base/location.h" | 12 #include "base/location.h" |
13 #include "base/metrics/histogram.h" | 13 #include "base/metrics/histogram.h" |
| 14 #include "base/profiler/scoped_tracker.h" |
14 #include "base/single_thread_task_runner.h" | 15 #include "base/single_thread_task_runner.h" |
15 #include "base/thread_task_runner_handle.h" | 16 #include "base/thread_task_runner_handle.h" |
16 #include "base/threading/simple_thread.h" | 17 #include "base/threading/simple_thread.h" |
17 #include "base/threading/thread.h" | 18 #include "base/threading/thread.h" |
18 #include "build/build_config.h" | 19 #include "build/build_config.h" |
19 #include "cc/base/histograms.h" | 20 #include "cc/base/histograms.h" |
20 #include "cc/output/compositor_frame.h" | 21 #include "cc/output/compositor_frame.h" |
21 #include "cc/output/output_surface.h" | 22 #include "cc/output/output_surface.h" |
22 #include "cc/output/vulkan_in_process_context_provider.h" | 23 #include "cc/output/vulkan_in_process_context_provider.h" |
23 #include "cc/raster/single_thread_task_graph_runner.h" | 24 #include "cc/raster/single_thread_task_graph_runner.h" |
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
358 BrowserGpuChannelHostFactory::instance()->GetGpuChannel(); | 359 BrowserGpuChannelHostFactory::instance()->GetGpuChannel(); |
359 } | 360 } |
360 | 361 |
361 if (!gpu_channel_host) { | 362 if (!gpu_channel_host) { |
362 shared_worker_context_provider_ = nullptr; | 363 shared_worker_context_provider_ = nullptr; |
363 } else { | 364 } else { |
364 if (!shared_worker_context_provider_) { | 365 if (!shared_worker_context_provider_) { |
365 shared_worker_context_provider_ = CreateContextCommon( | 366 shared_worker_context_provider_ = CreateContextCommon( |
366 gpu_channel_host, gpu::kNullSurfaceHandle, nullptr, | 367 gpu_channel_host, gpu::kNullSurfaceHandle, nullptr, |
367 command_buffer_metrics::BROWSER_WORKER_CONTEXT); | 368 command_buffer_metrics::BROWSER_WORKER_CONTEXT); |
| 369 // TODO(vadimt): Remove ScopedTracker below once crbug.com/125248 is |
| 370 // fixed. Tracking time in BindToCurrentThread. |
| 371 tracked_objects::ScopedTracker tracking_profile( |
| 372 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 373 "125248" |
| 374 " GpuProcessTransportFactory::EstablishedGpuChannel" |
| 375 "::Worker")); |
368 if (shared_worker_context_provider_->BindToCurrentThread()) | 376 if (shared_worker_context_provider_->BindToCurrentThread()) |
369 shared_worker_context_provider_->SetupLock(); | 377 shared_worker_context_provider_->SetupLock(); |
370 else | 378 else |
371 shared_worker_context_provider_ = nullptr; | 379 shared_worker_context_provider_ = nullptr; |
372 } | 380 } |
373 | 381 |
374 // The |context_provider| is used for both the browser compositor and the | 382 // The |context_provider| is used for both the browser compositor and the |
375 // display compositor. It shares resources with the worker context, so if | 383 // display compositor. It shares resources with the worker context, so if |
376 // we failed to make a worker context, just start over and try again. | 384 // we failed to make a worker context, just start over and try again. |
377 if (shared_worker_context_provider_) { | 385 if (shared_worker_context_provider_) { |
378 context_provider = CreateContextCommon( | 386 context_provider = CreateContextCommon( |
379 std::move(gpu_channel_host), data->surface_handle, | 387 std::move(gpu_channel_host), data->surface_handle, |
380 shared_worker_context_provider_.get(), | 388 shared_worker_context_provider_.get(), |
381 command_buffer_metrics::DISPLAY_COMPOSITOR_ONSCREEN_CONTEXT); | 389 command_buffer_metrics::DISPLAY_COMPOSITOR_ONSCREEN_CONTEXT); |
| 390 // TODO(vadimt): Remove ScopedTracker below once crbug.com/125248 is |
| 391 // fixed. Tracking time in BindToCurrentThread. |
| 392 tracked_objects::ScopedTracker tracking_profile( |
| 393 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 394 "125248" |
| 395 " GpuProcessTransportFactory::EstablishedGpuChannel" |
| 396 "::Compositor")); |
382 if (!context_provider->BindToCurrentThread()) | 397 if (!context_provider->BindToCurrentThread()) |
383 context_provider = nullptr; | 398 context_provider = nullptr; |
384 } | 399 } |
385 } | 400 } |
386 | 401 |
387 bool created_gpu_browser_compositor = | 402 bool created_gpu_browser_compositor = |
388 !!context_provider && !!shared_worker_context_provider_; | 403 !!context_provider && !!shared_worker_context_provider_; |
389 | 404 |
390 UMA_HISTOGRAM_BOOLEAN("Aura.CreatedGpuBrowserCompositor", | 405 UMA_HISTOGRAM_BOOLEAN("Aura.CreatedGpuBrowserCompositor", |
391 created_gpu_browser_compositor); | 406 created_gpu_browser_compositor); |
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
685 return nullptr; | 700 return nullptr; |
686 | 701 |
687 // We need a separate context from the compositor's so that skia and gl_helper | 702 // We need a separate context from the compositor's so that skia and gl_helper |
688 // don't step on each other. | 703 // don't step on each other. |
689 shared_main_thread_contexts_ = CreateContextCommon( | 704 shared_main_thread_contexts_ = CreateContextCommon( |
690 std::move(gpu_channel_host), gpu::kNullSurfaceHandle, nullptr, | 705 std::move(gpu_channel_host), gpu::kNullSurfaceHandle, nullptr, |
691 command_buffer_metrics::BROWSER_OFFSCREEN_MAINTHREAD_CONTEXT); | 706 command_buffer_metrics::BROWSER_OFFSCREEN_MAINTHREAD_CONTEXT); |
692 shared_main_thread_contexts_->SetLostContextCallback(base::Bind( | 707 shared_main_thread_contexts_->SetLostContextCallback(base::Bind( |
693 &GpuProcessTransportFactory::OnLostMainThreadSharedContextInsideCallback, | 708 &GpuProcessTransportFactory::OnLostMainThreadSharedContextInsideCallback, |
694 callback_factory_.GetWeakPtr())); | 709 callback_factory_.GetWeakPtr())); |
| 710 // TODO(vadimt): Remove ScopedTracker below once crbug.com/125248 is |
| 711 // fixed. Tracking time in BindToCurrentThread. |
| 712 tracked_objects::ScopedTracker tracking_profile( |
| 713 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 714 "125248" |
| 715 " GpuProcessTransportFactory::SharedMainThreadContextProvider")); |
695 if (!shared_main_thread_contexts_->BindToCurrentThread()) | 716 if (!shared_main_thread_contexts_->BindToCurrentThread()) |
696 shared_main_thread_contexts_ = nullptr; | 717 shared_main_thread_contexts_ = nullptr; |
697 return shared_main_thread_contexts_; | 718 return shared_main_thread_contexts_; |
698 } | 719 } |
699 | 720 |
700 GpuProcessTransportFactory::PerCompositorData* | 721 GpuProcessTransportFactory::PerCompositorData* |
701 GpuProcessTransportFactory::CreatePerCompositorData( | 722 GpuProcessTransportFactory::CreatePerCompositorData( |
702 ui::Compositor* compositor) { | 723 ui::Compositor* compositor) { |
703 DCHECK(!per_compositor_data_[compositor]); | 724 DCHECK(!per_compositor_data_[compositor]); |
704 | 725 |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
759 shared_vulkan_context_provider_ = | 780 shared_vulkan_context_provider_ = |
760 cc::VulkanInProcessContextProvider::Create(); | 781 cc::VulkanInProcessContextProvider::Create(); |
761 } | 782 } |
762 | 783 |
763 shared_vulkan_context_provider_initialized_ = true; | 784 shared_vulkan_context_provider_initialized_ = true; |
764 } | 785 } |
765 return shared_vulkan_context_provider_; | 786 return shared_vulkan_context_provider_; |
766 } | 787 } |
767 | 788 |
768 } // namespace content | 789 } // namespace content |
OLD | NEW |