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 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 #include "content/renderer/media/render_media_client.h" | 96 #include "content/renderer/media/render_media_client.h" |
97 #include "content/renderer/media/renderer_gpu_video_accelerator_factories.h" | 97 #include "content/renderer/media/renderer_gpu_video_accelerator_factories.h" |
98 #include "content/renderer/media/video_capture_impl_manager.h" | 98 #include "content/renderer/media/video_capture_impl_manager.h" |
99 #include "content/renderer/media/video_capture_message_filter.h" | 99 #include "content/renderer/media/video_capture_message_filter.h" |
100 #include "content/renderer/net_info_helper.h" | 100 #include "content/renderer/net_info_helper.h" |
101 #include "content/renderer/p2p/socket_dispatcher.h" | 101 #include "content/renderer/p2p/socket_dispatcher.h" |
102 #include "content/renderer/render_frame_proxy.h" | 102 #include "content/renderer/render_frame_proxy.h" |
103 #include "content/renderer/render_process_impl.h" | 103 #include "content/renderer/render_process_impl.h" |
104 #include "content/renderer/render_view_impl.h" | 104 #include "content/renderer/render_view_impl.h" |
105 #include "content/renderer/renderer_blink_platform_impl.h" | 105 #include "content/renderer/renderer_blink_platform_impl.h" |
| 106 #include "content/renderer/resource_dispatch_throttler.h" |
106 #include "content/renderer/scheduler/renderer_scheduler.h" | 107 #include "content/renderer/scheduler/renderer_scheduler.h" |
107 #include "content/renderer/service_worker/embedded_worker_context_message_filter
.h" | 108 #include "content/renderer/service_worker/embedded_worker_context_message_filter
.h" |
108 #include "content/renderer/service_worker/embedded_worker_dispatcher.h" | 109 #include "content/renderer/service_worker/embedded_worker_dispatcher.h" |
109 #include "content/renderer/shared_worker/embedded_shared_worker_stub.h" | 110 #include "content/renderer/shared_worker/embedded_shared_worker_stub.h" |
110 #include "gin/public/debug.h" | 111 #include "gin/public/debug.h" |
111 #include "gpu/GLES2/gl2extchromium.h" | 112 #include "gpu/GLES2/gl2extchromium.h" |
112 #include "gpu/command_buffer/common/gles2_cmd_utils.h" | 113 #include "gpu/command_buffer/common/gles2_cmd_utils.h" |
113 #include "ipc/ipc_channel_handle.h" | 114 #include "ipc/ipc_channel_handle.h" |
114 #include "ipc/ipc_platform_file.h" | 115 #include "ipc/ipc_platform_file.h" |
115 #include "ipc/mojo/ipc_channel_mojo.h" | 116 #include "ipc/mojo/ipc_channel_mojo.h" |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
188 using blink::WebString; | 189 using blink::WebString; |
189 using blink::WebView; | 190 using blink::WebView; |
190 | 191 |
191 namespace content { | 192 namespace content { |
192 | 193 |
193 namespace { | 194 namespace { |
194 | 195 |
195 const int64 kInitialIdleHandlerDelayMs = 1000; | 196 const int64 kInitialIdleHandlerDelayMs = 1000; |
196 const int64 kLongIdleHandlerDelayMs = 30*1000; | 197 const int64 kLongIdleHandlerDelayMs = 30*1000; |
197 | 198 |
| 199 #if defined(OS_ANDROID) |
| 200 // On Android, resource messages can each take ~1ms to dispatch on the browser |
| 201 // IO thread. Limiting the message rate to 4/frame at 60hz ensures that the |
| 202 // induced work takes but a fraction (~1/4) of the overall frame budget. |
| 203 const int kMaxResourceRequestsPerFlushWhenThrottled = 4; |
| 204 #else |
| 205 const int kMaxResourceRequestsPerFlushWhenThrottled = 8; |
| 206 #endif |
| 207 const double kThrottledResourceRequestFlushPeriodS = 1. / 60.; |
| 208 |
198 // Maximum allocation size allowed for image scaling filters that | 209 // Maximum allocation size allowed for image scaling filters that |
199 // require pre-scaling. Skia will fallback to a filter that doesn't | 210 // require pre-scaling. Skia will fallback to a filter that doesn't |
200 // require pre-scaling if the default filter would require an | 211 // require pre-scaling if the default filter would require an |
201 // allocation that exceeds this limit. | 212 // allocation that exceeds this limit. |
202 const size_t kImageCacheSingleAllocationByteLimit = 64 * 1024 * 1024; | 213 const size_t kImageCacheSingleAllocationByteLimit = 64 * 1024 * 1024; |
203 | 214 |
204 const size_t kEmulatedDiscardableMemoryBytesToKeepWhenWidgetsHidden = | 215 const size_t kEmulatedDiscardableMemoryBytesToKeepWhenWidgetsHidden = |
205 4 * 1024 * 1024; | 216 4 * 1024 * 1024; |
206 | 217 |
207 // Keep the global RenderThreadImpl in a TLS slot so it is impossible to access | 218 // Keep the global RenderThreadImpl in a TLS slot so it is impossible to access |
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
464 | 475 |
465 appcache_dispatcher_.reset( | 476 appcache_dispatcher_.reset( |
466 new AppCacheDispatcher(Get(), new AppCacheFrontendImpl())); | 477 new AppCacheDispatcher(Get(), new AppCacheFrontendImpl())); |
467 dom_storage_dispatcher_.reset(new DomStorageDispatcher()); | 478 dom_storage_dispatcher_.reset(new DomStorageDispatcher()); |
468 main_thread_indexed_db_dispatcher_.reset(new IndexedDBDispatcher( | 479 main_thread_indexed_db_dispatcher_.reset(new IndexedDBDispatcher( |
469 thread_safe_sender())); | 480 thread_safe_sender())); |
470 renderer_scheduler_ = RendererScheduler::Create(); | 481 renderer_scheduler_ = RendererScheduler::Create(); |
471 channel()->SetListenerTaskRunner(renderer_scheduler_->DefaultTaskRunner()); | 482 channel()->SetListenerTaskRunner(renderer_scheduler_->DefaultTaskRunner()); |
472 embedded_worker_dispatcher_.reset(new EmbeddedWorkerDispatcher()); | 483 embedded_worker_dispatcher_.reset(new EmbeddedWorkerDispatcher()); |
473 | 484 |
| 485 resource_dispatch_throttler_.reset(new ResourceDispatchThrottler( |
| 486 static_cast<RenderThread*>(this), renderer_scheduler_.get(), |
| 487 base::TimeDelta::FromSecondsD(kThrottledResourceRequestFlushPeriodS), |
| 488 kMaxResourceRequestsPerFlushWhenThrottled)); |
| 489 resource_dispatcher()->set_message_sender(resource_dispatch_throttler_.get()); |
| 490 |
474 media_stream_center_ = NULL; | 491 media_stream_center_ = NULL; |
475 | 492 |
476 db_message_filter_ = new DBMessageFilter(); | 493 db_message_filter_ = new DBMessageFilter(); |
477 AddFilter(db_message_filter_.get()); | 494 AddFilter(db_message_filter_.get()); |
478 | 495 |
479 vc_manager_.reset(new VideoCaptureImplManager()); | 496 vc_manager_.reset(new VideoCaptureImplManager()); |
480 AddFilter(vc_manager_->video_capture_message_filter()); | 497 AddFilter(vc_manager_->video_capture_message_filter()); |
481 | 498 |
482 browser_plugin_manager_.reset(new BrowserPluginManager()); | 499 browser_plugin_manager_.reset(new BrowserPluginManager()); |
483 AddObserver(browser_plugin_manager_.get()); | 500 AddObserver(browser_plugin_manager_.get()); |
(...skipping 1277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1761 hidden_widget_count_--; | 1778 hidden_widget_count_--; |
1762 | 1779 |
1763 if (!GetContentClient()->renderer()->RunIdleHandlerWhenWidgetsHidden()) { | 1780 if (!GetContentClient()->renderer()->RunIdleHandlerWhenWidgetsHidden()) { |
1764 return; | 1781 return; |
1765 } | 1782 } |
1766 | 1783 |
1767 ScheduleIdleHandler(kLongIdleHandlerDelayMs); | 1784 ScheduleIdleHandler(kLongIdleHandlerDelayMs); |
1768 } | 1785 } |
1769 | 1786 |
1770 } // namespace content | 1787 } // namespace content |
OLD | NEW |