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 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
218 using blink::WebScriptController; | 218 using blink::WebScriptController; |
219 using blink::WebSecurityPolicy; | 219 using blink::WebSecurityPolicy; |
220 using blink::WebString; | 220 using blink::WebString; |
221 using blink::WebView; | 221 using blink::WebView; |
222 using blink::scheduler::WebThreadImplForWorkerScheduler; | 222 using blink::scheduler::WebThreadImplForWorkerScheduler; |
223 | 223 |
224 namespace content { | 224 namespace content { |
225 | 225 |
226 namespace { | 226 namespace { |
227 | 227 |
228 const int64_t kInitialIdleHandlerDelayMs = 1000; | 228 const int64_t kInitialIdleHandlerDelayMs = 1000; |
229 const int64_t kLongIdleHandlerDelayMs = 30 * 1000; | 229 const int64_t kLongIdleHandlerDelayMs = 30 * 1000; |
230 | 230 |
231 #if defined(OS_ANDROID) | 231 #if defined(OS_ANDROID) |
232 // On Android, resource messages can each take ~1.5ms to dispatch on the browser | 232 // On Android, resource messages can each take ~1.5ms to dispatch on the browser |
233 // IO thread. Limiting the message rate to 3/frame at 60hz ensures that the | 233 // IO thread. Limiting the message rate to 3/frame at 60hz ensures that the |
234 // induced work takes but a fraction (~1/4) of the overall frame budget. | 234 // induced work takes but a fraction (~1/4) of the overall frame budget. |
235 const int kMaxResourceRequestsPerFlushWhenThrottled = 3; | 235 const int kMaxResourceRequestsPerFlushWhenThrottled = 3; |
236 #else | 236 #else |
237 const int kMaxResourceRequestsPerFlushWhenThrottled = 8; | 237 const int kMaxResourceRequestsPerFlushWhenThrottled = 8; |
238 #endif | 238 #endif |
239 const double kThrottledResourceRequestFlushPeriodS = 1. / 60.; | 239 const double kThrottledResourceRequestFlushPeriodS = 1. / 60.; |
240 | 240 |
241 // Maximum allocation size allowed for image scaling filters that | 241 // Maximum allocation size allowed for image scaling filters that |
242 // require pre-scaling. Skia will fallback to a filter that doesn't | 242 // require pre-scaling. Skia will fallback to a filter that doesn't |
243 // require pre-scaling if the default filter would require an | 243 // require pre-scaling if the default filter would require an |
244 // allocation that exceeds this limit. | 244 // allocation that exceeds this limit. |
245 const size_t kImageCacheSingleAllocationByteLimit = 64 * 1024 * 1024; | 245 const size_t kImageCacheSingleAllocationByteLimit = 64 * 1024 * 1024; |
246 | 246 |
247 // Unique identifier for each output surface created. | 247 // Unique identifier for each output surface created. |
248 uint32_t g_next_compositor_frame_sink_id = 1; | 248 uint32_t g_next_compositor_frame_sink_id = 1; |
249 | 249 |
| 250 // An implementation of mojom::RenderMessageFilter which can be mocked out |
| 251 // for tests which may indirectly send messages over this interface. |
| 252 mojom::RenderMessageFilter* g_render_message_filter_for_testing; |
| 253 |
250 // Keep the global RenderThreadImpl in a TLS slot so it is impossible to access | 254 // Keep the global RenderThreadImpl in a TLS slot so it is impossible to access |
251 // incorrectly from the wrong thread. | 255 // incorrectly from the wrong thread. |
252 base::LazyInstance<base::ThreadLocalPointer<RenderThreadImpl> > | 256 base::LazyInstance<base::ThreadLocalPointer<RenderThreadImpl> > |
253 lazy_tls = LAZY_INSTANCE_INITIALIZER; | 257 lazy_tls = LAZY_INSTANCE_INITIALIZER; |
254 | 258 |
255 // v8::MemoryPressureLevel should correspond to base::MemoryPressureListener. | 259 // v8::MemoryPressureLevel should correspond to base::MemoryPressureListener. |
256 static_assert(static_cast<v8::MemoryPressureLevel>( | 260 static_assert(static_cast<v8::MemoryPressureLevel>( |
257 base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE) == | 261 base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE) == |
258 v8::MemoryPressureLevel::kNone, "none level not align"); | 262 v8::MemoryPressureLevel::kNone, "none level not align"); |
259 static_assert(static_cast<v8::MemoryPressureLevel>( | 263 static_assert(static_cast<v8::MemoryPressureLevel>( |
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
562 } | 566 } |
563 | 567 |
564 // static | 568 // static |
565 RenderThreadImpl* RenderThreadImpl::Create( | 569 RenderThreadImpl* RenderThreadImpl::Create( |
566 std::unique_ptr<base::MessageLoop> main_message_loop, | 570 std::unique_ptr<base::MessageLoop> main_message_loop, |
567 std::unique_ptr<blink::scheduler::RendererScheduler> renderer_scheduler) { | 571 std::unique_ptr<blink::scheduler::RendererScheduler> renderer_scheduler) { |
568 return new RenderThreadImpl(std::move(main_message_loop), | 572 return new RenderThreadImpl(std::move(main_message_loop), |
569 std::move(renderer_scheduler)); | 573 std::move(renderer_scheduler)); |
570 } | 574 } |
571 | 575 |
| 576 // static |
572 RenderThreadImpl* RenderThreadImpl::current() { | 577 RenderThreadImpl* RenderThreadImpl::current() { |
573 return lazy_tls.Pointer()->Get(); | 578 return lazy_tls.Pointer()->Get(); |
574 } | 579 } |
575 | 580 |
| 581 // static |
| 582 mojom::RenderMessageFilter* RenderThreadImpl::current_render_message_filter() { |
| 583 if (g_render_message_filter_for_testing) |
| 584 return g_render_message_filter_for_testing; |
| 585 DCHECK(current()); |
| 586 return current()->render_message_filter(); |
| 587 } |
| 588 |
| 589 // static |
| 590 void RenderThreadImpl::SetRenderMessageFilterForTesting( |
| 591 mojom::RenderMessageFilter* render_message_filter) { |
| 592 g_render_message_filter_for_testing = render_message_filter; |
| 593 } |
| 594 |
576 RenderThreadImpl::RenderThreadImpl( | 595 RenderThreadImpl::RenderThreadImpl( |
577 const InProcessChildThreadParams& params, | 596 const InProcessChildThreadParams& params, |
578 std::unique_ptr<blink::scheduler::RendererScheduler> scheduler, | 597 std::unique_ptr<blink::scheduler::RendererScheduler> scheduler, |
579 scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue) | 598 scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue) |
580 : ChildThreadImpl(Options::Builder() | 599 : ChildThreadImpl(Options::Builder() |
581 .InBrowserProcess(params) | 600 .InBrowserProcess(params) |
582 .UseMojoChannel(true) | 601 .UseMojoChannel(true) |
583 .AutoStartMojoShellConnection(false) | 602 .AutoStartMojoShellConnection(false) |
584 .ConnectToBrowser(true) | 603 .ConnectToBrowser(true) |
585 .Build()), | 604 .Build()), |
(...skipping 1705 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2291 if (blink::mainThreadIsolate()) { | 2310 if (blink::mainThreadIsolate()) { |
2292 blink::mainThreadIsolate()->MemoryPressureNotification( | 2311 blink::mainThreadIsolate()->MemoryPressureNotification( |
2293 v8::MemoryPressureLevel::kCritical); | 2312 v8::MemoryPressureLevel::kCritical); |
2294 blink::MemoryPressureNotificationToWorkerThreadIsolates( | 2313 blink::MemoryPressureNotificationToWorkerThreadIsolates( |
2295 v8::MemoryPressureLevel::kCritical); | 2314 v8::MemoryPressureLevel::kCritical); |
2296 } | 2315 } |
2297 } | 2316 } |
2298 | 2317 |
2299 | 2318 |
2300 } // namespace content | 2319 } // namespace content |
OLD | NEW |