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 #ifndef CONTENT_RENDERER_RENDER_THREAD_IMPL_H_ | 5 #ifndef CONTENT_RENDERER_RENDER_THREAD_IMPL_H_ |
6 #define CONTENT_RENDERER_RENDER_THREAD_IMPL_H_ | 6 #define CONTENT_RENDERER_RENDER_THREAD_IMPL_H_ |
7 | 7 |
8 #include <set> | 8 #include <set> |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
11 | 11 |
12 #include "base/cancelable_callback.h" | 12 #include "base/cancelable_callback.h" |
13 #include "base/memory/memory_pressure_listener.h" | 13 #include "base/memory/memory_pressure_listener.h" |
14 #include "base/metrics/user_metrics_action.h" | 14 #include "base/metrics/user_metrics_action.h" |
15 #include "base/observer_list.h" | 15 #include "base/observer_list.h" |
16 #include "base/strings/string16.h" | 16 #include "base/strings/string16.h" |
17 #include "base/threading/thread_checker.h" | 17 #include "base/threading/thread_checker.h" |
18 #include "base/timer/timer.h" | 18 #include "base/timer/timer.h" |
19 #include "build/build_config.h" | 19 #include "build/build_config.h" |
20 #include "content/child/child_thread.h" | 20 #include "content/child/child_thread.h" |
21 #include "content/common/content_export.h" | 21 #include "content/common/content_export.h" |
22 #include "content/common/frame_replication_state.h" | 22 #include "content/common/frame_replication_state.h" |
23 #include "content/common/gpu/client/gpu_channel_host.h" | 23 #include "content/common/gpu/client/gpu_channel_host.h" |
24 #include "content/common/gpu/gpu_result_codes.h" | 24 #include "content/common/gpu/gpu_result_codes.h" |
25 #include "content/public/renderer/render_thread.h" | 25 #include "content/public/renderer/render_thread.h" |
| 26 #include "content/renderer/gpu/compositor_dependencies.h" |
26 #include "net/base/network_change_notifier.h" | 27 #include "net/base/network_change_notifier.h" |
27 #include "third_party/WebKit/public/platform/WebConnectionType.h" | 28 #include "third_party/WebKit/public/platform/WebConnectionType.h" |
28 #include "ui/gfx/native_widget_types.h" | 29 #include "ui/gfx/native_widget_types.h" |
29 | 30 |
30 #if defined(OS_MACOSX) | 31 #if defined(OS_MACOSX) |
31 #include "third_party/WebKit/public/web/mac/WebScrollbarTheme.h" | 32 #include "third_party/WebKit/public/web/mac/WebScrollbarTheme.h" |
32 #endif | 33 #endif |
33 | 34 |
34 class GrContext; | 35 class GrContext; |
35 class SkBitmap; | 36 class SkBitmap; |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
107 | 108 |
108 // The RenderThreadImpl class represents a background thread where RenderView | 109 // The RenderThreadImpl class represents a background thread where RenderView |
109 // instances live. The RenderThread supports an API that is used by its | 110 // instances live. The RenderThread supports an API that is used by its |
110 // consumer to talk indirectly to the RenderViews and supporting objects. | 111 // consumer to talk indirectly to the RenderViews and supporting objects. |
111 // Likewise, it provides an API for the RenderViews to talk back to the main | 112 // Likewise, it provides an API for the RenderViews to talk back to the main |
112 // process (i.e., their corresponding WebContentsImpl). | 113 // process (i.e., their corresponding WebContentsImpl). |
113 // | 114 // |
114 // Most of the communication occurs in the form of IPC messages. They are | 115 // Most of the communication occurs in the form of IPC messages. They are |
115 // routed to the RenderThread according to the routing IDs of the messages. | 116 // routed to the RenderThread according to the routing IDs of the messages. |
116 // The routing IDs correspond to RenderView instances. | 117 // The routing IDs correspond to RenderView instances. |
117 class CONTENT_EXPORT RenderThreadImpl : public RenderThread, | 118 class CONTENT_EXPORT RenderThreadImpl |
118 public ChildThread, | 119 : public RenderThread, |
119 public GpuChannelHostFactory { | 120 public ChildThread, |
| 121 public GpuChannelHostFactory, |
| 122 NON_EXPORTED_BASE(public CompositorDependencies) { |
120 public: | 123 public: |
121 static RenderThreadImpl* current(); | 124 static RenderThreadImpl* current(); |
122 | 125 |
123 RenderThreadImpl(); | 126 RenderThreadImpl(); |
124 // Constructor that's used when running in single process mode. | 127 // Constructor that's used when running in single process mode. |
125 explicit RenderThreadImpl(const std::string& channel_name); | 128 explicit RenderThreadImpl(const std::string& channel_name); |
126 // Constructor that's used in RendererMain. | 129 // Constructor that's used in RendererMain. |
127 explicit RenderThreadImpl(scoped_ptr<base::MessageLoop> main_message_loop); | 130 explicit RenderThreadImpl(scoped_ptr<base::MessageLoop> main_message_loop); |
128 ~RenderThreadImpl() override; | 131 ~RenderThreadImpl() override; |
129 void Shutdown() override; | 132 void Shutdown() override; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
167 void UpdateHistograms(int sequence_number) override; | 170 void UpdateHistograms(int sequence_number) override; |
168 int PostTaskToAllWebWorkers(const base::Closure& closure) override; | 171 int PostTaskToAllWebWorkers(const base::Closure& closure) override; |
169 bool ResolveProxy(const GURL& url, std::string* proxy_list) override; | 172 bool ResolveProxy(const GURL& url, std::string* proxy_list) override; |
170 base::WaitableEvent* GetShutdownEvent() override; | 173 base::WaitableEvent* GetShutdownEvent() override; |
171 #if defined(OS_WIN) | 174 #if defined(OS_WIN) |
172 virtual void PreCacheFont(const LOGFONT& log_font) override; | 175 virtual void PreCacheFont(const LOGFONT& log_font) override; |
173 virtual void ReleaseCachedFonts() override; | 176 virtual void ReleaseCachedFonts() override; |
174 #endif | 177 #endif |
175 ServiceRegistry* GetServiceRegistry() override; | 178 ServiceRegistry* GetServiceRegistry() override; |
176 | 179 |
| 180 // CompositorDependencies implementation. |
| 181 bool IsImplSidePaintingEnabled() override; |
| 182 bool IsGpuRasterizationForced() override; |
| 183 bool IsGpuRasterizationEnabled() override; |
| 184 bool IsLcdTextEnabled() override; |
| 185 bool IsDistanceFieldTextEnabled() override; |
| 186 bool IsZeroCopyEnabled() override; |
| 187 bool IsOneCopyEnabled() override; |
| 188 uint32 GetImageTextureTarget() override; |
| 189 scoped_refptr<base::SingleThreadTaskRunner> |
| 190 GetCompositorMainThreadTaskRunner() override; |
| 191 scoped_refptr<base::SingleThreadTaskRunner> |
| 192 GetCompositorImplThreadTaskRunner() override; |
| 193 gpu::GpuMemoryBufferManager* GetGpuMemoryBufferManager() override; |
| 194 RendererScheduler* GetRendererScheduler() override; |
| 195 cc::ContextProvider* GetSharedMainThreadContextProvider() override; |
| 196 scoped_ptr<cc::BeginFrameSource> CreateExternalBeginFrameSource( |
| 197 int routing_id) override; |
| 198 |
177 // Synchronously establish a channel to the GPU plugin if not previously | 199 // Synchronously establish a channel to the GPU plugin if not previously |
178 // established or if it has been lost (for example if the GPU plugin crashed). | 200 // established or if it has been lost (for example if the GPU plugin crashed). |
179 // If there is a pending asynchronous request, it will be completed by the | 201 // If there is a pending asynchronous request, it will be completed by the |
180 // time this routine returns. | 202 // time this routine returns. |
181 GpuChannelHost* EstablishGpuChannelSync(CauseForGpuLaunch); | 203 GpuChannelHost* EstablishGpuChannelSync(CauseForGpuLaunch); |
182 | 204 |
183 | 205 |
184 // These methods modify how the next message is sent. Normally, when sending | 206 // These methods modify how the next message is sent. Normally, when sending |
185 // a synchronous message that runs a nested message loop, we need to suspend | 207 // a synchronous message that runs a nested message loop, we need to suspend |
186 // callbacks into WebKit. This involves disabling timers and deferring | 208 // callbacks into WebKit. This involves disabling timers and deferring |
187 // resource loads. However, there are exceptions when we need to customize | 209 // resource loads. However, there are exceptions when we need to customize |
188 // the behavior. | 210 // the behavior. |
189 void DoNotSuspendWebKitSharedTimer(); | 211 void DoNotSuspendWebKitSharedTimer(); |
190 void DoNotNotifyWebKitOfModalLoop(); | 212 void DoNotNotifyWebKitOfModalLoop(); |
191 | 213 |
192 // True if we are running layout tests. This currently disables forwarding | 214 // True if we are running layout tests. This currently disables forwarding |
193 // various status messages to the console, skips network error pages, and | 215 // various status messages to the console, skips network error pages, and |
194 // short circuits size update and focus events. | 216 // short circuits size update and focus events. |
195 bool layout_test_mode() const { | 217 bool layout_test_mode() const { |
196 return layout_test_mode_; | 218 return layout_test_mode_; |
197 } | 219 } |
198 void set_layout_test_mode(bool layout_test_mode) { | 220 void set_layout_test_mode(bool layout_test_mode) { |
199 layout_test_mode_ = layout_test_mode; | 221 layout_test_mode_ = layout_test_mode; |
200 } | 222 } |
201 | 223 |
202 RendererScheduler* renderer_scheduler() const { | |
203 DCHECK(renderer_scheduler_); | |
204 return renderer_scheduler_.get(); | |
205 } | |
206 | |
207 RendererBlinkPlatformImpl* blink_platform_impl() const { | 224 RendererBlinkPlatformImpl* blink_platform_impl() const { |
208 DCHECK(blink_platform_impl_); | 225 DCHECK(blink_platform_impl_); |
209 return blink_platform_impl_.get(); | 226 return blink_platform_impl_.get(); |
210 } | 227 } |
211 | 228 |
212 scoped_refptr<base::SingleThreadTaskRunner> | |
213 main_thread_compositor_task_runner() const { | |
214 return main_thread_compositor_task_runner_; | |
215 } | |
216 | |
217 CompositorForwardingMessageFilter* compositor_message_filter() const { | 229 CompositorForwardingMessageFilter* compositor_message_filter() const { |
218 return compositor_message_filter_.get(); | 230 return compositor_message_filter_.get(); |
219 } | 231 } |
220 | 232 |
221 InputHandlerManager* input_handler_manager() const { | 233 InputHandlerManager* input_handler_manager() const { |
222 return input_handler_manager_.get(); | 234 return input_handler_manager_.get(); |
223 } | 235 } |
224 | 236 |
225 // Will be NULL if threaded compositing has not been enabled. | 237 // Will be null if threaded compositing has not been enabled. |
226 scoped_refptr<base::MessageLoopProxy> compositor_message_loop_proxy() const { | 238 scoped_refptr<base::MessageLoopProxy> compositor_message_loop_proxy() const { |
227 return compositor_message_loop_proxy_; | 239 return compositor_message_loop_proxy_; |
228 } | 240 } |
229 | 241 |
230 bool is_gpu_rasterization_enabled() const { | |
231 return is_gpu_rasterization_enabled_; | |
232 } | |
233 | |
234 bool is_gpu_rasterization_forced() const { | |
235 return is_gpu_rasterization_forced_; | |
236 } | |
237 | |
238 bool is_impl_side_painting_enabled() const { | |
239 return is_impl_side_painting_enabled_; | |
240 } | |
241 | |
242 bool is_lcd_text_enabled() const { return is_lcd_text_enabled_; } | |
243 | |
244 bool is_distance_field_text_enabled() const { | |
245 return is_distance_field_text_enabled_; | |
246 } | |
247 | |
248 bool is_zero_copy_enabled() const { return is_zero_copy_enabled_; } | |
249 | |
250 bool is_one_copy_enabled() const { return is_one_copy_enabled_; } | |
251 | |
252 unsigned use_image_texture_target() const { | |
253 return use_image_texture_target_; | |
254 } | |
255 | |
256 AppCacheDispatcher* appcache_dispatcher() const { | 242 AppCacheDispatcher* appcache_dispatcher() const { |
257 return appcache_dispatcher_.get(); | 243 return appcache_dispatcher_.get(); |
258 } | 244 } |
259 | 245 |
260 DomStorageDispatcher* dom_storage_dispatcher() const { | 246 DomStorageDispatcher* dom_storage_dispatcher() const { |
261 return dom_storage_dispatcher_.get(); | 247 return dom_storage_dispatcher_.get(); |
262 } | 248 } |
263 | 249 |
264 EmbeddedWorkerDispatcher* embedded_worker_dispatcher() const { | 250 EmbeddedWorkerDispatcher* embedded_worker_dispatcher() const { |
265 return embedded_worker_dispatcher_.get(); | 251 return embedded_worker_dispatcher_.get(); |
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
575 | 561 |
576 #if defined(ENABLE_WEBRTC) | 562 #if defined(ENABLE_WEBRTC) |
577 scoped_ptr<WebRTCIdentityService> webrtc_identity_service_; | 563 scoped_ptr<WebRTCIdentityService> webrtc_identity_service_; |
578 #endif | 564 #endif |
579 | 565 |
580 scoped_ptr<MemoryObserver> memory_observer_; | 566 scoped_ptr<MemoryObserver> memory_observer_; |
581 | 567 |
582 scoped_refptr<base::SingleThreadTaskRunner> | 568 scoped_refptr<base::SingleThreadTaskRunner> |
583 main_thread_compositor_task_runner_; | 569 main_thread_compositor_task_runner_; |
584 | 570 |
585 // Compositor settings | 571 // Compositor settings. |
586 bool is_gpu_rasterization_enabled_; | 572 bool is_gpu_rasterization_enabled_; |
587 bool is_gpu_rasterization_forced_; | 573 bool is_gpu_rasterization_forced_; |
588 bool is_impl_side_painting_enabled_; | 574 bool is_impl_side_painting_enabled_; |
589 bool is_lcd_text_enabled_; | 575 bool is_lcd_text_enabled_; |
590 bool is_distance_field_text_enabled_; | 576 bool is_distance_field_text_enabled_; |
591 bool is_zero_copy_enabled_; | 577 bool is_zero_copy_enabled_; |
592 bool is_one_copy_enabled_; | 578 bool is_one_copy_enabled_; |
593 unsigned use_image_texture_target_; | 579 unsigned use_image_texture_target_; |
594 | 580 |
595 std::map<int, mojo::MessagePipeHandle> pending_render_frame_connects_; | 581 std::map<int, mojo::MessagePipeHandle> pending_render_frame_connects_; |
596 | 582 |
597 DISALLOW_COPY_AND_ASSIGN(RenderThreadImpl); | 583 DISALLOW_COPY_AND_ASSIGN(RenderThreadImpl); |
598 }; | 584 }; |
599 | 585 |
600 } // namespace content | 586 } // namespace content |
601 | 587 |
602 #endif // CONTENT_RENDERER_RENDER_THREAD_IMPL_H_ | 588 #endif // CONTENT_RENDERER_RENDER_THREAD_IMPL_H_ |
OLD | NEW |