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 <utility> | 10 #include <utility> |
(...skipping 21 matching lines...) Expand all Loading... |
32 #include "base/threading/thread_local.h" | 32 #include "base/threading/thread_local.h" |
33 #include "base/threading/thread_restrictions.h" | 33 #include "base/threading/thread_restrictions.h" |
34 #include "base/threading/thread_task_runner_handle.h" | 34 #include "base/threading/thread_task_runner_handle.h" |
35 #include "base/trace_event/trace_event.h" | 35 #include "base/trace_event/trace_event.h" |
36 #include "base/values.h" | 36 #include "base/values.h" |
37 #include "build/build_config.h" | 37 #include "build/build_config.h" |
38 #include "cc/base/histograms.h" | 38 #include "cc/base/histograms.h" |
39 #include "cc/base/switches.h" | 39 #include "cc/base/switches.h" |
40 #include "cc/blink/web_layer_impl.h" | 40 #include "cc/blink/web_layer_impl.h" |
41 #include "cc/output/buffer_to_texture_target_map.h" | 41 #include "cc/output/buffer_to_texture_target_map.h" |
| 42 #include "cc/output/compositor_frame_sink.h" |
42 #include "cc/output/copy_output_request.h" | 43 #include "cc/output/copy_output_request.h" |
43 #include "cc/output/output_surface.h" | |
44 #include "cc/output/vulkan_in_process_context_provider.h" | 44 #include "cc/output/vulkan_in_process_context_provider.h" |
45 #include "cc/raster/task_graph_runner.h" | 45 #include "cc/raster/task_graph_runner.h" |
46 #include "cc/trees/layer_tree_host_common.h" | 46 #include "cc/trees/layer_tree_host_common.h" |
47 #include "cc/trees/layer_tree_settings.h" | 47 #include "cc/trees/layer_tree_settings.h" |
48 #include "components/memory_coordinator/child/child_memory_coordinator_impl.h" | 48 #include "components/memory_coordinator/child/child_memory_coordinator_impl.h" |
49 #include "content/child/appcache/appcache_dispatcher.h" | 49 #include "content/child/appcache/appcache_dispatcher.h" |
50 #include "content/child/appcache/appcache_frontend_impl.h" | 50 #include "content/child/appcache/appcache_frontend_impl.h" |
51 #include "content/child/blob_storage/blob_message_filter.h" | 51 #include "content/child/blob_storage/blob_message_filter.h" |
52 #include "content/child/child_discardable_shared_memory_manager.h" | 52 #include "content/child/child_discardable_shared_memory_manager.h" |
53 #include "content/child/child_gpu_memory_buffer_manager.h" | 53 #include "content/child/child_gpu_memory_buffer_manager.h" |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
88 #include "content/renderer/cache_storage/cache_storage_dispatcher.h" | 88 #include "content/renderer/cache_storage/cache_storage_dispatcher.h" |
89 #include "content/renderer/cache_storage/cache_storage_message_filter.h" | 89 #include "content/renderer/cache_storage/cache_storage_message_filter.h" |
90 #include "content/renderer/categorized_worker_pool.h" | 90 #include "content/renderer/categorized_worker_pool.h" |
91 #include "content/renderer/devtools/devtools_agent_filter.h" | 91 #include "content/renderer/devtools/devtools_agent_filter.h" |
92 #include "content/renderer/devtools/v8_sampling_profiler.h" | 92 #include "content/renderer/devtools/v8_sampling_profiler.h" |
93 #include "content/renderer/dom_storage/dom_storage_dispatcher.h" | 93 #include "content/renderer/dom_storage/dom_storage_dispatcher.h" |
94 #include "content/renderer/dom_storage/webstoragearea_impl.h" | 94 #include "content/renderer/dom_storage/webstoragearea_impl.h" |
95 #include "content/renderer/dom_storage/webstoragenamespace_impl.h" | 95 #include "content/renderer/dom_storage/webstoragenamespace_impl.h" |
96 #include "content/renderer/gpu/compositor_external_begin_frame_source.h" | 96 #include "content/renderer/gpu/compositor_external_begin_frame_source.h" |
97 #include "content/renderer/gpu/compositor_forwarding_message_filter.h" | 97 #include "content/renderer/gpu/compositor_forwarding_message_filter.h" |
98 #include "content/renderer/gpu/compositor_output_surface.h" | |
99 #include "content/renderer/gpu/frame_swap_message_queue.h" | 98 #include "content/renderer/gpu/frame_swap_message_queue.h" |
| 99 #include "content/renderer/gpu/renderer_compositor_frame_sink.h" |
100 #include "content/renderer/input/input_event_filter.h" | 100 #include "content/renderer/input/input_event_filter.h" |
101 #include "content/renderer/input/input_handler_manager.h" | 101 #include "content/renderer/input/input_handler_manager.h" |
102 #include "content/renderer/input/main_thread_input_event_filter.h" | 102 #include "content/renderer/input/main_thread_input_event_filter.h" |
103 #include "content/renderer/media/aec_dump_message_filter.h" | 103 #include "content/renderer/media/aec_dump_message_filter.h" |
104 #include "content/renderer/media/audio_input_message_filter.h" | 104 #include "content/renderer/media/audio_input_message_filter.h" |
105 #include "content/renderer/media/audio_message_filter.h" | 105 #include "content/renderer/media/audio_message_filter.h" |
106 #include "content/renderer/media/audio_renderer_mixer_manager.h" | 106 #include "content/renderer/media/audio_renderer_mixer_manager.h" |
107 #include "content/renderer/media/media_stream_center.h" | 107 #include "content/renderer/media/media_stream_center.h" |
108 #include "content/renderer/media/midi_message_filter.h" | 108 #include "content/renderer/media/midi_message_filter.h" |
109 #include "content/renderer/media/render_media_client.h" | 109 #include "content/renderer/media/render_media_client.h" |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
159 #include "third_party/WebKit/public/web/WebSecurityPolicy.h" | 159 #include "third_party/WebKit/public/web/WebSecurityPolicy.h" |
160 #include "third_party/WebKit/public/web/WebView.h" | 160 #include "third_party/WebKit/public/web/WebView.h" |
161 #include "third_party/icu/source/i18n/unicode/timezone.h" | 161 #include "third_party/icu/source/i18n/unicode/timezone.h" |
162 #include "third_party/skia/include/core/SkGraphics.h" | 162 #include "third_party/skia/include/core/SkGraphics.h" |
163 #include "ui/base/layout.h" | 163 #include "ui/base/layout.h" |
164 #include "ui/base/ui_base_switches.h" | 164 #include "ui/base/ui_base_switches.h" |
165 | 165 |
166 #if defined(OS_ANDROID) | 166 #if defined(OS_ANDROID) |
167 #include <cpu-features.h> | 167 #include <cpu-features.h> |
168 #include "content/renderer/android/synchronous_compositor_filter.h" | 168 #include "content/renderer/android/synchronous_compositor_filter.h" |
169 #include "content/renderer/android/synchronous_compositor_output_surface.h" | 169 #include "content/renderer/android/synchronous_compositor_frame_sink.h" |
170 #include "content/renderer/media/android/renderer_demuxer_android.h" | 170 #include "content/renderer/media/android/renderer_demuxer_android.h" |
171 #include "content/renderer/media/android/stream_texture_factory.h" | 171 #include "content/renderer/media/android/stream_texture_factory.h" |
172 #include "media/base/android/media_codec_util.h" | 172 #include "media/base/android/media_codec_util.h" |
173 #endif | 173 #endif |
174 | 174 |
175 #if defined(OS_MACOSX) | 175 #if defined(OS_MACOSX) |
176 #include "base/mac/mac_util.h" | 176 #include "base/mac/mac_util.h" |
177 #include "content/renderer/theme_helper_mac.h" | 177 #include "content/renderer/theme_helper_mac.h" |
178 #include "content/renderer/webscrollbarbehavior_impl_mac.h" | 178 #include "content/renderer/webscrollbarbehavior_impl_mac.h" |
179 #endif | 179 #endif |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 #endif | 236 #endif |
237 const double kThrottledResourceRequestFlushPeriodS = 1. / 60.; | 237 const double kThrottledResourceRequestFlushPeriodS = 1. / 60.; |
238 | 238 |
239 // Maximum allocation size allowed for image scaling filters that | 239 // Maximum allocation size allowed for image scaling filters that |
240 // require pre-scaling. Skia will fallback to a filter that doesn't | 240 // require pre-scaling. Skia will fallback to a filter that doesn't |
241 // require pre-scaling if the default filter would require an | 241 // require pre-scaling if the default filter would require an |
242 // allocation that exceeds this limit. | 242 // allocation that exceeds this limit. |
243 const size_t kImageCacheSingleAllocationByteLimit = 64 * 1024 * 1024; | 243 const size_t kImageCacheSingleAllocationByteLimit = 64 * 1024 * 1024; |
244 | 244 |
245 // Unique identifier for each output surface created. | 245 // Unique identifier for each output surface created. |
246 uint32_t g_next_output_surface_id = 1; | 246 uint32_t g_next_compositor_frame_sink_id = 1; |
247 | 247 |
248 // Keep the global RenderThreadImpl in a TLS slot so it is impossible to access | 248 // Keep the global RenderThreadImpl in a TLS slot so it is impossible to access |
249 // incorrectly from the wrong thread. | 249 // incorrectly from the wrong thread. |
250 base::LazyInstance<base::ThreadLocalPointer<RenderThreadImpl> > | 250 base::LazyInstance<base::ThreadLocalPointer<RenderThreadImpl> > |
251 lazy_tls = LAZY_INSTANCE_INITIALIZER; | 251 lazy_tls = LAZY_INSTANCE_INITIALIZER; |
252 | 252 |
253 // v8::MemoryPressureLevel should correspond to base::MemoryPressureListener. | 253 // v8::MemoryPressureLevel should correspond to base::MemoryPressureListener. |
254 static_assert(static_cast<v8::MemoryPressureLevel>( | 254 static_assert(static_cast<v8::MemoryPressureLevel>( |
255 base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE) == | 255 base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE) == |
256 v8::MemoryPressureLevel::kNone, "none level not align"); | 256 v8::MemoryPressureLevel::kNone, "none level not align"); |
(...skipping 1534 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1791 } else { | 1791 } else { |
1792 #if defined(USE_AURA) | 1792 #if defined(USE_AURA) |
1793 gpu_channel_ = gpu_service_->EstablishGpuChannelSync(); | 1793 gpu_channel_ = gpu_service_->EstablishGpuChannelSync(); |
1794 #else | 1794 #else |
1795 NOTREACHED(); | 1795 NOTREACHED(); |
1796 #endif | 1796 #endif |
1797 } | 1797 } |
1798 return gpu_channel_; | 1798 return gpu_channel_; |
1799 } | 1799 } |
1800 | 1800 |
1801 std::unique_ptr<cc::OutputSurface> | 1801 std::unique_ptr<cc::CompositorFrameSink> |
1802 RenderThreadImpl::CreateCompositorOutputSurface( | 1802 RenderThreadImpl::CreateCompositorFrameSink( |
1803 bool use_software, | 1803 bool use_software, |
1804 int routing_id, | 1804 int routing_id, |
1805 scoped_refptr<FrameSwapMessageQueue> frame_swap_message_queue, | 1805 scoped_refptr<FrameSwapMessageQueue> frame_swap_message_queue, |
1806 const GURL& url) { | 1806 const GURL& url) { |
1807 const base::CommandLine& command_line = | 1807 const base::CommandLine& command_line = |
1808 *base::CommandLine::ForCurrentProcess(); | 1808 *base::CommandLine::ForCurrentProcess(); |
1809 if (command_line.HasSwitch(switches::kDisableGpuCompositing)) | 1809 if (command_line.HasSwitch(switches::kDisableGpuCompositing)) |
1810 use_software = true; | 1810 use_software = true; |
1811 | 1811 |
1812 #if defined(USE_AURA) | 1812 #if defined(USE_AURA) |
1813 if (GetMojoShellConnection() && !use_software && | 1813 if (GetMojoShellConnection() && !use_software && |
1814 command_line.HasSwitch(switches::kUseMusInRenderer)) { | 1814 command_line.HasSwitch(switches::kUseMusInRenderer)) { |
1815 RenderWidgetMusConnection* connection = | 1815 RenderWidgetMusConnection* connection = |
1816 RenderWidgetMusConnection::GetOrCreate(routing_id); | 1816 RenderWidgetMusConnection::GetOrCreate(routing_id); |
1817 scoped_refptr<gpu::GpuChannelHost> gpu_channel_host = | 1817 scoped_refptr<gpu::GpuChannelHost> gpu_channel_host = |
1818 EstablishGpuChannelSync(); | 1818 EstablishGpuChannelSync(); |
1819 return connection->CreateOutputSurface(std::move(gpu_channel_host)); | 1819 return connection->CreateCompositorFrameSink(std::move(gpu_channel_host)); |
1820 } | 1820 } |
1821 #endif | 1821 #endif |
1822 | 1822 |
1823 uint32_t output_surface_id = g_next_output_surface_id++; | 1823 uint32_t compositor_frame_sink_id = g_next_compositor_frame_sink_id++; |
1824 | 1824 |
1825 if (command_line.HasSwitch(switches::kEnableVulkan)) { | 1825 if (command_line.HasSwitch(switches::kEnableVulkan)) { |
1826 scoped_refptr<cc::VulkanContextProvider> vulkan_context_provider = | 1826 scoped_refptr<cc::VulkanContextProvider> vulkan_context_provider = |
1827 cc::VulkanInProcessContextProvider::Create(); | 1827 cc::VulkanInProcessContextProvider::Create(); |
1828 if (vulkan_context_provider) { | 1828 if (vulkan_context_provider) { |
1829 DCHECK(!layout_test_mode()); | 1829 DCHECK(!layout_test_mode()); |
1830 return base::MakeUnique<CompositorOutputSurface>( | 1830 return base::MakeUnique<RendererCompositorFrameSink>( |
1831 routing_id, output_surface_id, | 1831 routing_id, compositor_frame_sink_id, |
1832 CreateExternalBeginFrameSource(routing_id), | 1832 CreateExternalBeginFrameSource(routing_id), |
1833 std::move(vulkan_context_provider), | 1833 std::move(vulkan_context_provider), |
1834 std::move(frame_swap_message_queue)); | 1834 std::move(frame_swap_message_queue)); |
1835 } | 1835 } |
1836 } | 1836 } |
1837 | 1837 |
1838 // Create a gpu process channel and verify we want to use GPU compositing | 1838 // Create a gpu process channel and verify we want to use GPU compositing |
1839 // before creating any context providers. | 1839 // before creating any context providers. |
1840 scoped_refptr<gpu::GpuChannelHost> gpu_channel_host; | 1840 scoped_refptr<gpu::GpuChannelHost> gpu_channel_host; |
1841 if (!use_software) { | 1841 if (!use_software) { |
1842 gpu_channel_host = EstablishGpuChannelSync(); | 1842 gpu_channel_host = EstablishGpuChannelSync(); |
1843 if (!gpu_channel_host) { | 1843 if (!gpu_channel_host) { |
1844 // Cause the compositor to wait and try again. | 1844 // Cause the compositor to wait and try again. |
1845 return nullptr; | 1845 return nullptr; |
1846 } | 1846 } |
1847 // We may get a valid channel, but with a software renderer. In that case, | 1847 // We may get a valid channel, but with a software renderer. In that case, |
1848 // disable GPU compositing. | 1848 // disable GPU compositing. |
1849 if (gpu_channel_host->gpu_info().software_rendering) | 1849 if (gpu_channel_host->gpu_info().software_rendering) |
1850 use_software = true; | 1850 use_software = true; |
1851 } | 1851 } |
1852 | 1852 |
1853 if (use_software) { | 1853 if (use_software) { |
1854 DCHECK(!layout_test_mode()); | 1854 DCHECK(!layout_test_mode()); |
1855 return base::MakeUnique<CompositorOutputSurface>( | 1855 return base::MakeUnique<RendererCompositorFrameSink>( |
1856 routing_id, output_surface_id, | 1856 routing_id, compositor_frame_sink_id, |
1857 CreateExternalBeginFrameSource(routing_id), nullptr, nullptr, | 1857 CreateExternalBeginFrameSource(routing_id), nullptr, nullptr, |
1858 std::move(frame_swap_message_queue)); | 1858 std::move(frame_swap_message_queue)); |
1859 } | 1859 } |
1860 | 1860 |
1861 scoped_refptr<ContextProviderCommandBuffer> worker_context_provider = | 1861 scoped_refptr<ContextProviderCommandBuffer> worker_context_provider = |
1862 SharedCompositorWorkerContextProvider(); | 1862 SharedCompositorWorkerContextProvider(); |
1863 if (!worker_context_provider) { | 1863 if (!worker_context_provider) { |
1864 // Cause the compositor to wait and try again. | 1864 // Cause the compositor to wait and try again. |
1865 return nullptr; | 1865 return nullptr; |
1866 } | 1866 } |
(...skipping 24 matching lines...) Expand all Loading... |
1891 share_context = nullptr; | 1891 share_context = nullptr; |
1892 | 1892 |
1893 scoped_refptr<ContextProviderCommandBuffer> context_provider( | 1893 scoped_refptr<ContextProviderCommandBuffer> context_provider( |
1894 new ContextProviderCommandBuffer( | 1894 new ContextProviderCommandBuffer( |
1895 gpu_channel_host, gpu::GPU_STREAM_DEFAULT, | 1895 gpu_channel_host, gpu::GPU_STREAM_DEFAULT, |
1896 gpu::GpuStreamPriority::NORMAL, gpu::kNullSurfaceHandle, url, | 1896 gpu::GpuStreamPriority::NORMAL, gpu::kNullSurfaceHandle, url, |
1897 automatic_flushes, support_locking, limits, attributes, share_context, | 1897 automatic_flushes, support_locking, limits, attributes, share_context, |
1898 command_buffer_metrics::RENDER_COMPOSITOR_CONTEXT)); | 1898 command_buffer_metrics::RENDER_COMPOSITOR_CONTEXT)); |
1899 | 1899 |
1900 if (layout_test_deps_) { | 1900 if (layout_test_deps_) { |
1901 return layout_test_deps_->CreateOutputSurface( | 1901 return layout_test_deps_->CreateCompositorFrameSink( |
1902 routing_id, std::move(gpu_channel_host), std::move(context_provider), | 1902 routing_id, std::move(gpu_channel_host), std::move(context_provider), |
1903 std::move(worker_context_provider), this); | 1903 std::move(worker_context_provider), this); |
1904 } | 1904 } |
1905 | 1905 |
1906 #if defined(OS_ANDROID) | 1906 #if defined(OS_ANDROID) |
1907 if (sync_compositor_message_filter_) { | 1907 if (sync_compositor_message_filter_) { |
1908 return base::MakeUnique<SynchronousCompositorOutputSurface>( | 1908 return base::MakeUnique<SynchronousCompositorFrameSink>( |
1909 std::move(context_provider), std::move(worker_context_provider), | 1909 std::move(context_provider), std::move(worker_context_provider), |
1910 routing_id, output_surface_id, | 1910 routing_id, compositor_frame_sink_id, |
1911 CreateExternalBeginFrameSource(routing_id), | 1911 CreateExternalBeginFrameSource(routing_id), |
1912 sync_compositor_message_filter_.get(), | 1912 sync_compositor_message_filter_.get(), |
1913 std::move(frame_swap_message_queue)); | 1913 std::move(frame_swap_message_queue)); |
1914 } | 1914 } |
1915 #endif | 1915 #endif |
1916 return base::WrapUnique(new CompositorOutputSurface( | 1916 return base::WrapUnique(new RendererCompositorFrameSink( |
1917 routing_id, output_surface_id, CreateExternalBeginFrameSource(routing_id), | 1917 routing_id, compositor_frame_sink_id, |
1918 std::move(context_provider), std::move(worker_context_provider), | 1918 CreateExternalBeginFrameSource(routing_id), std::move(context_provider), |
1919 std::move(frame_swap_message_queue))); | 1919 std::move(worker_context_provider), std::move(frame_swap_message_queue))); |
1920 } | 1920 } |
1921 | 1921 |
1922 std::unique_ptr<cc::SwapPromise> | 1922 std::unique_ptr<cc::SwapPromise> |
1923 RenderThreadImpl::RequestCopyOfOutputForLayoutTest( | 1923 RenderThreadImpl::RequestCopyOfOutputForLayoutTest( |
1924 int32_t routing_id, | 1924 int32_t routing_id, |
1925 std::unique_ptr<cc::CopyOutputRequest> request) { | 1925 std::unique_ptr<cc::CopyOutputRequest> request) { |
1926 DCHECK(layout_test_deps_); | 1926 DCHECK(layout_test_deps_); |
1927 return layout_test_deps_->RequestCopyOfOutput(routing_id, std::move(request)); | 1927 return layout_test_deps_->RequestCopyOfOutput(routing_id, std::move(request)); |
1928 } | 1928 } |
1929 | 1929 |
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2244 if (blink::mainThreadIsolate()) { | 2244 if (blink::mainThreadIsolate()) { |
2245 blink::mainThreadIsolate()->MemoryPressureNotification( | 2245 blink::mainThreadIsolate()->MemoryPressureNotification( |
2246 v8::MemoryPressureLevel::kCritical); | 2246 v8::MemoryPressureLevel::kCritical); |
2247 blink::MemoryPressureNotificationToWorkerThreadIsolates( | 2247 blink::MemoryPressureNotificationToWorkerThreadIsolates( |
2248 v8::MemoryPressureLevel::kCritical); | 2248 v8::MemoryPressureLevel::kCritical); |
2249 } | 2249 } |
2250 } | 2250 } |
2251 | 2251 |
2252 | 2252 |
2253 } // namespace content | 2253 } // namespace content |
OLD | NEW |