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/renderer/render_thread_impl.h" | 5 #include "content/renderer/render_thread_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <limits> | 8 #include <limits> |
9 #include <map> | 9 #include <map> |
10 #include <vector> | 10 #include <vector> |
(...skipping 825 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
836 // RenderThreadImpl. | 836 // RenderThreadImpl. |
837 embedded_worker_dispatcher_.reset(); | 837 embedded_worker_dispatcher_.reset(); |
838 | 838 |
839 // Ramp down IDB before we ramp down WebKit (and V8), since IDB classes might | 839 // Ramp down IDB before we ramp down WebKit (and V8), since IDB classes might |
840 // hold pointers to V8 objects (e.g., via pending requests). | 840 // hold pointers to V8 objects (e.g., via pending requests). |
841 main_thread_indexed_db_dispatcher_.reset(); | 841 main_thread_indexed_db_dispatcher_.reset(); |
842 | 842 |
843 main_thread_compositor_task_runner_ = NULL; | 843 main_thread_compositor_task_runner_ = NULL; |
844 | 844 |
845 // Context providers must be released prior to destroying the GPU channel. | 845 // Context providers must be released prior to destroying the GPU channel. |
| 846 shared_worker_context_provider_ = nullptr; |
846 gpu_va_context_provider_ = nullptr; | 847 gpu_va_context_provider_ = nullptr; |
847 shared_main_thread_contexts_ = nullptr; | 848 shared_main_thread_contexts_ = nullptr; |
848 | 849 |
849 if (gpu_channel_.get()) | 850 if (gpu_channel_.get()) |
850 gpu_channel_->DestroyChannel(); | 851 gpu_channel_->DestroyChannel(); |
851 | 852 |
852 // TODO(port) | 853 // TODO(port) |
853 #if defined(OS_WIN) | 854 #if defined(OS_WIN) |
854 // Clean up plugin channels before this thread goes away. | 855 // Clean up plugin channels before this thread goes away. |
855 NPChannelBase::CleanupChannels(); | 856 NPChannelBase::CleanupChannels(); |
(...skipping 474 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1330 } | 1331 } |
1331 return NULL; | 1332 return NULL; |
1332 } | 1333 } |
1333 #endif | 1334 #endif |
1334 | 1335 |
1335 scoped_refptr<GpuChannelHost> gpu_channel_host = GetGpuChannel(); | 1336 scoped_refptr<GpuChannelHost> gpu_channel_host = GetGpuChannel(); |
1336 scoped_refptr<media::GpuVideoAcceleratorFactories> gpu_factories; | 1337 scoped_refptr<media::GpuVideoAcceleratorFactories> gpu_factories; |
1337 scoped_refptr<base::SingleThreadTaskRunner> media_task_runner = | 1338 scoped_refptr<base::SingleThreadTaskRunner> media_task_runner = |
1338 GetMediaThreadTaskRunner(); | 1339 GetMediaThreadTaskRunner(); |
1339 if (!gpu_va_context_provider_.get() || | 1340 if (!gpu_va_context_provider_.get() || |
1340 gpu_va_context_provider_->DestroyedOnMainThread()) { | 1341 gpu_va_context_provider_->HasBeenLostOnMainThread()) { |
1341 if (!gpu_channel_host.get()) { | 1342 if (!gpu_channel_host.get()) { |
1342 gpu_channel_host = EstablishGpuChannelSync( | 1343 gpu_channel_host = EstablishGpuChannelSync( |
1343 CAUSE_FOR_GPU_LAUNCH_WEBGRAPHICSCONTEXT3DCOMMANDBUFFERIMPL_INITIALIZE)
; | 1344 CAUSE_FOR_GPU_LAUNCH_WEBGRAPHICSCONTEXT3DCOMMANDBUFFERIMPL_INITIALIZE)
; |
1344 } | 1345 } |
1345 blink::WebGraphicsContext3D::Attributes attributes; | 1346 blink::WebGraphicsContext3D::Attributes attributes; |
1346 bool lose_context_when_out_of_memory = false; | 1347 bool lose_context_when_out_of_memory = false; |
1347 gpu_va_context_provider_ = ContextProviderCommandBuffer::Create( | 1348 gpu_va_context_provider_ = ContextProviderCommandBuffer::Create( |
1348 make_scoped_ptr( | 1349 make_scoped_ptr( |
1349 WebGraphicsContext3DCommandBufferImpl::CreateOffscreenContext( | 1350 WebGraphicsContext3DCommandBufferImpl::CreateOffscreenContext( |
1350 gpu_channel_host.get(), attributes, | 1351 gpu_channel_host.get(), attributes, |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1392 lose_context_when_out_of_memory, | 1393 lose_context_when_out_of_memory, |
1393 GURL("chrome://gpu/RenderThreadImpl::CreateOffscreenContext3d"), | 1394 GURL("chrome://gpu/RenderThreadImpl::CreateOffscreenContext3d"), |
1394 WebGraphicsContext3DCommandBufferImpl::SharedMemoryLimits(), | 1395 WebGraphicsContext3DCommandBufferImpl::SharedMemoryLimits(), |
1395 NULL)); | 1396 NULL)); |
1396 } | 1397 } |
1397 | 1398 |
1398 scoped_refptr<cc_blink::ContextProviderWebContext> | 1399 scoped_refptr<cc_blink::ContextProviderWebContext> |
1399 RenderThreadImpl::SharedMainThreadContextProvider() { | 1400 RenderThreadImpl::SharedMainThreadContextProvider() { |
1400 DCHECK(IsMainThread()); | 1401 DCHECK(IsMainThread()); |
1401 if (!shared_main_thread_contexts_.get() || | 1402 if (!shared_main_thread_contexts_.get() || |
1402 shared_main_thread_contexts_->DestroyedOnMainThread()) { | 1403 shared_main_thread_contexts_->HasBeenLostOnMainThread()) { |
1403 shared_main_thread_contexts_ = NULL; | 1404 shared_main_thread_contexts_ = NULL; |
1404 #if defined(OS_ANDROID) | 1405 #if defined(OS_ANDROID) |
1405 SynchronousCompositorFactory* factory = | 1406 SynchronousCompositorFactory* factory = |
1406 SynchronousCompositorFactory::GetInstance(); | 1407 SynchronousCompositorFactory::GetInstance(); |
1407 if (factory && factory->OverrideWithFactory()) { | 1408 if (factory && factory->OverrideWithFactory()) { |
1408 shared_main_thread_contexts_ = factory->CreateOffscreenContextProvider( | 1409 shared_main_thread_contexts_ = factory->CreateOffscreenContextProvider( |
1409 GetOffscreenAttribs(), "Offscreen-MainThread"); | 1410 GetOffscreenAttribs(), "Offscreen-MainThread"); |
1410 } | 1411 } |
1411 #endif | 1412 #endif |
1412 if (!shared_main_thread_contexts_.get()) { | 1413 if (!shared_main_thread_contexts_.get()) { |
(...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1875 AddFilter(renderer_demuxer_.get()); | 1876 AddFilter(renderer_demuxer_.get()); |
1876 #endif | 1877 #endif |
1877 } | 1878 } |
1878 return media_thread_->task_runner(); | 1879 return media_thread_->task_runner(); |
1879 } | 1880 } |
1880 | 1881 |
1881 base::TaskRunner* RenderThreadImpl::GetWorkerTaskRunner() { | 1882 base::TaskRunner* RenderThreadImpl::GetWorkerTaskRunner() { |
1882 return raster_worker_pool_.get(); | 1883 return raster_worker_pool_.get(); |
1883 } | 1884 } |
1884 | 1885 |
| 1886 scoped_refptr<ContextProviderCommandBuffer> |
| 1887 RenderThreadImpl::SharedWorkerContextProvider() { |
| 1888 DCHECK(IsMainThread()); |
| 1889 // Try to reuse existing shared worker context provider. |
| 1890 if (shared_worker_context_provider_) { |
| 1891 base::AutoLock lock(*shared_worker_context_provider_->GetLock()); |
| 1892 if (shared_worker_context_provider_->ContextGL() |
| 1893 ->GetGraphicsResetStatusKHR() != GL_NO_ERROR) { |
| 1894 shared_worker_context_provider_->Destroy(); |
| 1895 shared_worker_context_provider_ = nullptr; |
| 1896 } |
| 1897 } |
| 1898 if (!shared_worker_context_provider_) { |
| 1899 shared_worker_context_provider_ = ContextProviderCommandBuffer::Create( |
| 1900 CreateOffscreenContext3d(), RENDER_WORKER_CONTEXT); |
| 1901 if (shared_worker_context_provider_ && |
| 1902 !shared_worker_context_provider_->BindToCurrentThread()) |
| 1903 shared_worker_context_provider_ = nullptr; |
| 1904 if (shared_worker_context_provider_) |
| 1905 shared_worker_context_provider_->SetupLock(); |
| 1906 } |
| 1907 return shared_worker_context_provider_; |
| 1908 } |
| 1909 |
1885 void RenderThreadImpl::SampleGamepads(blink::WebGamepads* data) { | 1910 void RenderThreadImpl::SampleGamepads(blink::WebGamepads* data) { |
1886 blink_platform_impl_->sampleGamepads(*data); | 1911 blink_platform_impl_->sampleGamepads(*data); |
1887 } | 1912 } |
1888 | 1913 |
1889 bool RenderThreadImpl::RendererIsHidden() const { | 1914 bool RenderThreadImpl::RendererIsHidden() const { |
1890 return widget_count_ > 0 && hidden_widget_count_ == widget_count_; | 1915 return widget_count_ > 0 && hidden_widget_count_ == widget_count_; |
1891 } | 1916 } |
1892 | 1917 |
1893 void RenderThreadImpl::WidgetCreated() { | 1918 void RenderThreadImpl::WidgetCreated() { |
1894 bool renderer_was_hidden = RendererIsHidden(); | 1919 bool renderer_was_hidden = RendererIsHidden(); |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1967 } | 1992 } |
1968 | 1993 |
1969 void RenderThreadImpl::PendingRenderFrameConnect::OnConnectionError() { | 1994 void RenderThreadImpl::PendingRenderFrameConnect::OnConnectionError() { |
1970 size_t erased = | 1995 size_t erased = |
1971 RenderThreadImpl::current()->pending_render_frame_connects_.erase( | 1996 RenderThreadImpl::current()->pending_render_frame_connects_.erase( |
1972 routing_id_); | 1997 routing_id_); |
1973 DCHECK_EQ(1u, erased); | 1998 DCHECK_EQ(1u, erased); |
1974 } | 1999 } |
1975 | 2000 |
1976 } // namespace content | 2001 } // namespace content |
OLD | NEW |