| 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 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 111 #endif | 111 #endif |
| 112 | 112 |
| 113 using WebKit::WebDocument; | 113 using WebKit::WebDocument; |
| 114 using WebKit::WebFrame; | 114 using WebKit::WebFrame; |
| 115 using WebKit::WebNetworkStateNotifier; | 115 using WebKit::WebNetworkStateNotifier; |
| 116 using WebKit::WebRuntimeFeatures; | 116 using WebKit::WebRuntimeFeatures; |
| 117 using WebKit::WebScriptController; | 117 using WebKit::WebScriptController; |
| 118 using WebKit::WebSecurityPolicy; | 118 using WebKit::WebSecurityPolicy; |
| 119 using WebKit::WebString; | 119 using WebKit::WebString; |
| 120 using WebKit::WebView; | 120 using WebKit::WebView; |
| 121 using content::AudioRendererMixerManager; | 121 |
| 122 using content::RenderProcessObserver; | 122 namespace content { |
| 123 | 123 |
| 124 namespace { | 124 namespace { |
| 125 | 125 |
| 126 const int64 kInitialIdleHandlerDelayMs = 1000; | 126 const int64 kInitialIdleHandlerDelayMs = 1000; |
| 127 const int64 kShortIdleHandlerDelayMs = 1000; | 127 const int64 kShortIdleHandlerDelayMs = 1000; |
| 128 const int64 kLongIdleHandlerDelayMs = 30*1000; | 128 const int64 kLongIdleHandlerDelayMs = 30*1000; |
| 129 const int kIdleCPUUsageThresholdInPercents = 3; | 129 const int kIdleCPUUsageThresholdInPercents = 3; |
| 130 | 130 |
| 131 // Keep the global RenderThreadImpl in a TLS slot so it is impossible to access | 131 // Keep the global RenderThreadImpl in a TLS slot so it is impossible to access |
| 132 // incorrectly from the wrong thread. | 132 // incorrectly from the wrong thread. |
| 133 base::LazyInstance<base::ThreadLocalPointer<RenderThreadImpl> > | 133 base::LazyInstance<base::ThreadLocalPointer<RenderThreadImpl> > |
| 134 lazy_tls = LAZY_INSTANCE_INITIALIZER; | 134 lazy_tls = LAZY_INSTANCE_INITIALIZER; |
| 135 | 135 |
| 136 class RenderViewZoomer : public content::RenderViewVisitor { | 136 class RenderViewZoomer : public RenderViewVisitor { |
| 137 public: | 137 public: |
| 138 RenderViewZoomer(const std::string& host, double zoom_level) | 138 RenderViewZoomer(const std::string& host, double zoom_level) |
| 139 : host_(host), zoom_level_(zoom_level) { | 139 : host_(host), zoom_level_(zoom_level) { |
| 140 } | 140 } |
| 141 | 141 |
| 142 virtual bool Visit(content::RenderView* render_view) { | 142 virtual bool Visit(RenderView* render_view) { |
| 143 WebView* webview = render_view->GetWebView(); | 143 WebView* webview = render_view->GetWebView(); |
| 144 WebDocument document = webview->mainFrame()->document(); | 144 WebDocument document = webview->mainFrame()->document(); |
| 145 | 145 |
| 146 // Don't set zoom level for full-page plugin since they don't use the same | 146 // Don't set zoom level for full-page plugin since they don't use the same |
| 147 // zoom settings. | 147 // zoom settings. |
| 148 if (document.isPluginDocument()) | 148 if (document.isPluginDocument()) |
| 149 return true; | 149 return true; |
| 150 | 150 |
| 151 if (net::GetHostOrSpecFromURL(GURL(document.url())) == host_) | 151 if (net::GetHostOrSpecFromURL(GURL(document.url())) == host_) |
| 152 webview->setZoomLevel(false, zoom_level_); | 152 webview->setZoomLevel(false, zoom_level_); |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 290 widget_count_ = 0; | 290 widget_count_ = 0; |
| 291 hidden_widget_count_ = 0; | 291 hidden_widget_count_ = 0; |
| 292 idle_notification_delay_in_ms_ = kInitialIdleHandlerDelayMs; | 292 idle_notification_delay_in_ms_ = kInitialIdleHandlerDelayMs; |
| 293 idle_notifications_to_skip_ = 0; | 293 idle_notifications_to_skip_ = 0; |
| 294 compositor_initialized_ = false; | 294 compositor_initialized_ = false; |
| 295 | 295 |
| 296 appcache_dispatcher_.reset(new AppCacheDispatcher(Get())); | 296 appcache_dispatcher_.reset(new AppCacheDispatcher(Get())); |
| 297 dom_storage_dispatcher_.reset(new DomStorageDispatcher()); | 297 dom_storage_dispatcher_.reset(new DomStorageDispatcher()); |
| 298 main_thread_indexed_db_dispatcher_.reset(new IndexedDBDispatcher()); | 298 main_thread_indexed_db_dispatcher_.reset(new IndexedDBDispatcher()); |
| 299 | 299 |
| 300 browser_plugin_registry_.reset(new content::old::BrowserPluginRegistry()); | 300 browser_plugin_registry_.reset(new old::BrowserPluginRegistry()); |
| 301 browser_plugin_channel_manager_.reset( | 301 browser_plugin_channel_manager_.reset( |
| 302 new content::old::BrowserPluginChannelManager()); | 302 new old::BrowserPluginChannelManager()); |
| 303 AddObserver(browser_plugin_channel_manager_.get()); | 303 AddObserver(browser_plugin_channel_manager_.get()); |
| 304 | 304 |
| 305 media_stream_center_ = NULL; | 305 media_stream_center_ = NULL; |
| 306 | 306 |
| 307 db_message_filter_ = new DBMessageFilter(); | 307 db_message_filter_ = new DBMessageFilter(); |
| 308 AddFilter(db_message_filter_.get()); | 308 AddFilter(db_message_filter_.get()); |
| 309 | 309 |
| 310 #if defined(ENABLE_WEBRTC) | 310 #if defined(ENABLE_WEBRTC) |
| 311 p2p_socket_dispatcher_ = new content::P2PSocketDispatcher( | 311 p2p_socket_dispatcher_ = new P2PSocketDispatcher(GetIOMessageLoopProxy()); |
| 312 GetIOMessageLoopProxy()); | |
| 313 AddFilter(p2p_socket_dispatcher_); | 312 AddFilter(p2p_socket_dispatcher_); |
| 314 #endif // defined(ENABLE_WEBRTC) | 313 #endif // defined(ENABLE_WEBRTC) |
| 315 vc_manager_ = new VideoCaptureImplManager(); | 314 vc_manager_ = new VideoCaptureImplManager(); |
| 316 AddFilter(vc_manager_->video_capture_message_filter()); | 315 AddFilter(vc_manager_->video_capture_message_filter()); |
| 317 | 316 |
| 318 audio_input_message_filter_ = new AudioInputMessageFilter(); | 317 audio_input_message_filter_ = new AudioInputMessageFilter(); |
| 319 AddFilter(audio_input_message_filter_.get()); | 318 AddFilter(audio_input_message_filter_.get()); |
| 320 | 319 |
| 321 audio_message_filter_ = new AudioMessageFilter(); | 320 audio_message_filter_ = new AudioMessageFilter(); |
| 322 AddFilter(audio_message_filter_.get()); | 321 AddFilter(audio_message_filter_.get()); |
| 323 | 322 |
| 324 AddFilter(new IndexedDBMessageFilter); | 323 AddFilter(new IndexedDBMessageFilter); |
| 325 | 324 |
| 326 content::GetContentClient()->renderer()->RenderThreadStarted(); | 325 GetContentClient()->renderer()->RenderThreadStarted(); |
| 327 | 326 |
| 328 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); | 327 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); |
| 329 if (command_line.HasSwitch(switches::kEnableGpuBenchmarking)) | 328 if (command_line.HasSwitch(switches::kEnableGpuBenchmarking)) |
| 330 RegisterExtension(content::GpuBenchmarkingExtension::Get()); | 329 RegisterExtension(GpuBenchmarkingExtension::Get()); |
| 331 | 330 |
| 332 context_lost_cb_.reset(new GpuVDAContextLostCallback()); | 331 context_lost_cb_.reset(new GpuVDAContextLostCallback()); |
| 333 | 332 |
| 334 // Note that under Linux, the media library will normally already have | 333 // Note that under Linux, the media library will normally already have |
| 335 // been initialized by the Zygote before this instance became a Renderer. | 334 // been initialized by the Zygote before this instance became a Renderer. |
| 336 FilePath media_path; | 335 FilePath media_path; |
| 337 PathService::Get(content::DIR_MEDIA_LIBS, &media_path); | 336 PathService::Get(DIR_MEDIA_LIBS, &media_path); |
| 338 if (!media_path.empty()) | 337 if (!media_path.empty()) |
| 339 media::InitializeMediaLibrary(media_path); | 338 media::InitializeMediaLibrary(media_path); |
| 340 | 339 |
| 341 TRACE_EVENT_END_ETW("RenderThreadImpl::Init", 0, ""); | 340 TRACE_EVENT_END_ETW("RenderThreadImpl::Init", 0, ""); |
| 342 } | 341 } |
| 343 | 342 |
| 344 RenderThreadImpl::~RenderThreadImpl() { | 343 RenderThreadImpl::~RenderThreadImpl() { |
| 345 FOR_EACH_OBSERVER( | 344 FOR_EACH_OBSERVER( |
| 346 RenderProcessObserver, observers_, OnRenderProcessShutdown()); | 345 RenderProcessObserver, observers_, OnRenderProcessShutdown()); |
| 347 | 346 |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 408 // callbacks, timers, and pending network loads that could trigger such | 407 // callbacks, timers, and pending network loads that could trigger such |
| 409 // callbacks. | 408 // callbacks. |
| 410 bool pumping_events = false; | 409 bool pumping_events = false; |
| 411 if (msg->is_sync()) { | 410 if (msg->is_sync()) { |
| 412 if (msg->is_caller_pumping_messages()) { | 411 if (msg->is_caller_pumping_messages()) { |
| 413 pumping_events = true; | 412 pumping_events = true; |
| 414 } else { | 413 } else { |
| 415 if ((msg->type() == ViewHostMsg_GetCookies::ID || | 414 if ((msg->type() == ViewHostMsg_GetCookies::ID || |
| 416 msg->type() == ViewHostMsg_GetRawCookies::ID || | 415 msg->type() == ViewHostMsg_GetRawCookies::ID || |
| 417 msg->type() == ViewHostMsg_CookiesEnabled::ID) && | 416 msg->type() == ViewHostMsg_CookiesEnabled::ID) && |
| 418 content::GetContentClient()->renderer()-> | 417 GetContentClient()->renderer()-> |
| 419 ShouldPumpEventsDuringCookieMessage()) { | 418 ShouldPumpEventsDuringCookieMessage()) { |
| 420 pumping_events = true; | 419 pumping_events = true; |
| 421 } | 420 } |
| 422 } | 421 } |
| 423 } | 422 } |
| 424 | 423 |
| 425 bool suspend_webkit_shared_timer = true; // default value | 424 bool suspend_webkit_shared_timer = true; // default value |
| 426 std::swap(suspend_webkit_shared_timer, suspend_webkit_shared_timer_); | 425 std::swap(suspend_webkit_shared_timer, suspend_webkit_shared_timer_); |
| 427 | 426 |
| 428 bool notify_webkit_of_modal_loop = true; // default value | 427 bool notify_webkit_of_modal_loop = true; // default value |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 515 } | 514 } |
| 516 | 515 |
| 517 void RenderThreadImpl::RemoveFilter(IPC::ChannelProxy::MessageFilter* filter) { | 516 void RenderThreadImpl::RemoveFilter(IPC::ChannelProxy::MessageFilter* filter) { |
| 518 channel()->RemoveFilter(filter); | 517 channel()->RemoveFilter(filter); |
| 519 } | 518 } |
| 520 | 519 |
| 521 void RenderThreadImpl::SetOutgoingMessageFilter( | 520 void RenderThreadImpl::SetOutgoingMessageFilter( |
| 522 IPC::ChannelProxy::OutgoingMessageFilter* filter) { | 521 IPC::ChannelProxy::OutgoingMessageFilter* filter) { |
| 523 } | 522 } |
| 524 | 523 |
| 525 void RenderThreadImpl::AddObserver(content::RenderProcessObserver* observer) { | 524 void RenderThreadImpl::AddObserver(RenderProcessObserver* observer) { |
| 526 observers_.AddObserver(observer); | 525 observers_.AddObserver(observer); |
| 527 } | 526 } |
| 528 | 527 |
| 529 void RenderThreadImpl::RemoveObserver( | 528 void RenderThreadImpl::RemoveObserver(RenderProcessObserver* observer) { |
| 530 content::RenderProcessObserver* observer) { | |
| 531 observers_.RemoveObserver(observer); | 529 observers_.RemoveObserver(observer); |
| 532 } | 530 } |
| 533 | 531 |
| 534 void RenderThreadImpl::SetResourceDispatcherDelegate( | 532 void RenderThreadImpl::SetResourceDispatcherDelegate( |
| 535 content::ResourceDispatcherDelegate* delegate) { | 533 ResourceDispatcherDelegate* delegate) { |
| 536 resource_dispatcher()->set_delegate(delegate); | 534 resource_dispatcher()->set_delegate(delegate); |
| 537 } | 535 } |
| 538 | 536 |
| 539 void RenderThreadImpl::WidgetHidden() { | 537 void RenderThreadImpl::WidgetHidden() { |
| 540 DCHECK(hidden_widget_count_ < widget_count_); | 538 DCHECK(hidden_widget_count_ < widget_count_); |
| 541 hidden_widget_count_++; | 539 hidden_widget_count_++; |
| 542 | 540 |
| 543 if (!content::GetContentClient()->renderer()-> | 541 if (!GetContentClient()->renderer()->RunIdleHandlerWhenWidgetsHidden()) { |
| 544 RunIdleHandlerWhenWidgetsHidden()) { | |
| 545 return; | 542 return; |
| 546 } | 543 } |
| 547 | 544 |
| 548 if (widget_count_ && hidden_widget_count_ == widget_count_) | 545 if (widget_count_ && hidden_widget_count_ == widget_count_) |
| 549 ScheduleIdleHandler(kInitialIdleHandlerDelayMs); | 546 ScheduleIdleHandler(kInitialIdleHandlerDelayMs); |
| 550 } | 547 } |
| 551 | 548 |
| 552 void RenderThreadImpl::WidgetRestored() { | 549 void RenderThreadImpl::WidgetRestored() { |
| 553 DCHECK_GT(hidden_widget_count_, 0); | 550 DCHECK_GT(hidden_widget_count_, 0); |
| 554 hidden_widget_count_--; | 551 hidden_widget_count_--; |
| 555 if (!content::GetContentClient()->renderer()-> | 552 if (!GetContentClient()->renderer()->RunIdleHandlerWhenWidgetsHidden()) { |
| 556 RunIdleHandlerWhenWidgetsHidden()) { | |
| 557 return; | 553 return; |
| 558 } | 554 } |
| 559 | 555 |
| 560 ScheduleIdleHandler(kLongIdleHandlerDelayMs); | 556 ScheduleIdleHandler(kLongIdleHandlerDelayMs); |
| 561 } | 557 } |
| 562 | 558 |
| 563 void RenderThreadImpl::EnsureWebKitInitialized() { | 559 void RenderThreadImpl::EnsureWebKitInitialized() { |
| 564 if (webkit_platform_support_.get()) | 560 if (webkit_platform_support_.get()) |
| 565 return; | 561 return; |
| 566 | 562 |
| 567 webkit_platform_support_.reset(new RendererWebKitPlatformSupportImpl); | 563 webkit_platform_support_.reset(new RendererWebKitPlatformSupportImpl); |
| 568 WebKit::initialize(webkit_platform_support_.get()); | 564 WebKit::initialize(webkit_platform_support_.get()); |
| 569 | 565 |
| 570 WebKit::WebCompositorSupport* compositor_support = | 566 WebKit::WebCompositorSupport* compositor_support = |
| 571 WebKit::Platform::current()->compositorSupport(); | 567 WebKit::Platform::current()->compositorSupport(); |
| 572 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); | 568 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); |
| 573 | 569 |
| 574 // TODO(fsamuel): Guests don't currently support threaded compositing. | 570 // TODO(fsamuel): Guests don't currently support threaded compositing. |
| 575 // This should go away with the new design of the browser plugin. | 571 // This should go away with the new design of the browser plugin. |
| 576 // The new design can be tracked at: http://crbug.com/134492. | 572 // The new design can be tracked at: http://crbug.com/134492. |
| 577 bool is_guest = CommandLine::ForCurrentProcess()->HasSwitch( | 573 bool is_guest = CommandLine::ForCurrentProcess()->HasSwitch( |
| 578 switches::kGuestRenderer); | 574 switches::kGuestRenderer); |
| 579 bool enable = content::IsThreadedCompositingEnabled() && !is_guest; | 575 bool enable = IsThreadedCompositingEnabled() && !is_guest; |
| 580 if (enable) { | 576 if (enable) { |
| 581 compositor_thread_.reset(new CompositorThread(this)); | 577 compositor_thread_.reset(new CompositorThread(this)); |
| 582 AddFilter(compositor_thread_->GetMessageFilter()); | 578 AddFilter(compositor_thread_->GetMessageFilter()); |
| 583 compositor_support->initialize(compositor_thread_->GetWebThread()); | 579 compositor_support->initialize(compositor_thread_->GetWebThread()); |
| 584 } else { | 580 } else { |
| 585 compositor_support->initialize(NULL); | 581 compositor_support->initialize(NULL); |
| 586 } | 582 } |
| 587 compositor_initialized_ = true; | 583 compositor_initialized_ = true; |
| 588 | 584 |
| 589 MessageLoop* output_surface_loop = enable ? | 585 MessageLoop* output_surface_loop = enable ? |
| 590 compositor_thread_->message_loop() : | 586 compositor_thread_->message_loop() : |
| 591 MessageLoop::current(); | 587 MessageLoop::current(); |
| 592 | 588 |
| 593 compositor_output_surface_filter_ = CompositorOutputSurface::CreateFilter( | 589 compositor_output_surface_filter_ = CompositorOutputSurface::CreateFilter( |
| 594 output_surface_loop->message_loop_proxy()); | 590 output_surface_loop->message_loop_proxy()); |
| 595 AddFilter(compositor_output_surface_filter_.get()); | 591 AddFilter(compositor_output_surface_filter_.get()); |
| 596 | 592 |
| 597 WebScriptController::enableV8SingleThreadMode(); | 593 WebScriptController::enableV8SingleThreadMode(); |
| 598 | 594 |
| 599 RenderThreadImpl::RegisterSchemes(); | 595 RenderThreadImpl::RegisterSchemes(); |
| 600 | 596 |
| 601 webkit_glue::EnableWebCoreLogChannels( | 597 webkit_glue::EnableWebCoreLogChannels( |
| 602 command_line.GetSwitchValueASCII(switches::kWebCoreLogChannels)); | 598 command_line.GetSwitchValueASCII(switches::kWebCoreLogChannels)); |
| 603 | 599 |
| 604 if (CommandLine::ForCurrentProcess()->HasSwitch( | 600 if (CommandLine::ForCurrentProcess()->HasSwitch( |
| 605 switches::kDomAutomationController)) { | 601 switches::kDomAutomationController)) { |
| 606 base::StringPiece extension = content::GetContentClient()->GetDataResource( | 602 base::StringPiece extension = GetContentClient()->GetDataResource( |
| 607 IDR_DOM_AUTOMATION_JS, ui::SCALE_FACTOR_NONE); | 603 IDR_DOM_AUTOMATION_JS, ui::SCALE_FACTOR_NONE); |
| 608 RegisterExtension(new v8::Extension( | 604 RegisterExtension(new v8::Extension( |
| 609 "dom_automation.js", extension.data(), 0, NULL, extension.size())); | 605 "dom_automation.js", extension.data(), 0, NULL, extension.size())); |
| 610 } | 606 } |
| 611 | 607 |
| 612 web_database_observer_impl_.reset( | 608 web_database_observer_impl_.reset( |
| 613 new WebDatabaseObserverImpl(sync_message_filter())); | 609 new WebDatabaseObserverImpl(sync_message_filter())); |
| 614 WebKit::WebDatabase::setObserver(web_database_observer_impl_.get()); | 610 WebKit::WebDatabase::setObserver(web_database_observer_impl_.get()); |
| 615 | 611 |
| 616 WebRuntimeFeatures::enableSockets( | 612 WebRuntimeFeatures::enableSockets( |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 702 command_line.HasSwitch(switches::kEnableExperimentalWebKitFeatures)); | 698 command_line.HasSwitch(switches::kEnableExperimentalWebKitFeatures)); |
| 703 | 699 |
| 704 WebRuntimeFeatures::enableCSSExclusions( | 700 WebRuntimeFeatures::enableCSSExclusions( |
| 705 command_line.HasSwitch(switches::kEnableExperimentalWebKitFeatures)); | 701 command_line.HasSwitch(switches::kEnableExperimentalWebKitFeatures)); |
| 706 | 702 |
| 707 FOR_EACH_OBSERVER(RenderProcessObserver, observers_, WebKitInitialized()); | 703 FOR_EACH_OBSERVER(RenderProcessObserver, observers_, WebKitInitialized()); |
| 708 | 704 |
| 709 devtools_agent_message_filter_ = new DevToolsAgentFilter(); | 705 devtools_agent_message_filter_ = new DevToolsAgentFilter(); |
| 710 AddFilter(devtools_agent_message_filter_.get()); | 706 AddFilter(devtools_agent_message_filter_.get()); |
| 711 | 707 |
| 712 if (content::GetContentClient()->renderer()-> | 708 if (GetContentClient()->renderer()->RunIdleHandlerWhenWidgetsHidden()) |
| 713 RunIdleHandlerWhenWidgetsHidden()) { | |
| 714 ScheduleIdleHandler(kLongIdleHandlerDelayMs); | 709 ScheduleIdleHandler(kLongIdleHandlerDelayMs); |
| 715 } | |
| 716 } | 710 } |
| 717 | 711 |
| 718 void RenderThreadImpl::RegisterSchemes() { | 712 void RenderThreadImpl::RegisterSchemes() { |
| 719 // swappedout: pages should not be accessible, and should also | 713 // swappedout: pages should not be accessible, and should also |
| 720 // be treated as empty documents that can commit synchronously. | 714 // be treated as empty documents that can commit synchronously. |
| 721 WebString swappedout_scheme(ASCIIToUTF16(chrome::kSwappedOutScheme)); | 715 WebString swappedout_scheme(ASCIIToUTF16(chrome::kSwappedOutScheme)); |
| 722 WebSecurityPolicy::registerURLSchemeAsDisplayIsolated(swappedout_scheme); | 716 WebSecurityPolicy::registerURLSchemeAsDisplayIsolated(swappedout_scheme); |
| 723 WebSecurityPolicy::registerURLSchemeAsEmptyDocument(swappedout_scheme); | 717 WebSecurityPolicy::registerURLSchemeAsEmptyDocument(swappedout_scheme); |
| 724 } | 718 } |
| 725 | 719 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 742 void RenderThreadImpl::ScheduleIdleHandler(int64 initial_delay_ms) { | 736 void RenderThreadImpl::ScheduleIdleHandler(int64 initial_delay_ms) { |
| 743 idle_notification_delay_in_ms_ = initial_delay_ms; | 737 idle_notification_delay_in_ms_ = initial_delay_ms; |
| 744 idle_timer_.Stop(); | 738 idle_timer_.Stop(); |
| 745 idle_timer_.Start(FROM_HERE, | 739 idle_timer_.Start(FROM_HERE, |
| 746 base::TimeDelta::FromMilliseconds(initial_delay_ms), | 740 base::TimeDelta::FromMilliseconds(initial_delay_ms), |
| 747 this, &RenderThreadImpl::IdleHandler); | 741 this, &RenderThreadImpl::IdleHandler); |
| 748 } | 742 } |
| 749 | 743 |
| 750 void RenderThreadImpl::IdleHandler() { | 744 void RenderThreadImpl::IdleHandler() { |
| 751 bool run_in_foreground_tab = (widget_count_ > hidden_widget_count_) && | 745 bool run_in_foreground_tab = (widget_count_ > hidden_widget_count_) && |
| 752 content::GetContentClient()->renderer()-> | 746 GetContentClient()->renderer()-> |
| 753 RunIdleHandlerWhenWidgetsHidden(); | 747 RunIdleHandlerWhenWidgetsHidden(); |
| 754 if (run_in_foreground_tab) { | 748 if (run_in_foreground_tab) { |
| 755 IdleHandlerInForegroundTab(); | 749 IdleHandlerInForegroundTab(); |
| 756 return; | 750 return; |
| 757 } | 751 } |
| 758 | 752 |
| 759 base::allocator::ReleaseFreeMemory(); | 753 base::allocator::ReleaseFreeMemory(); |
| 760 | 754 |
| 761 v8::V8::IdleNotification(); | 755 v8::V8::IdleNotification(); |
| 762 | 756 |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 852 gpu_vda_context3d_.reset( | 846 gpu_vda_context3d_.reset( |
| 853 WebGraphicsContext3DCommandBufferImpl::CreateOffscreenContext( | 847 WebGraphicsContext3DCommandBufferImpl::CreateOffscreenContext( |
| 854 this, WebKit::WebGraphicsContext3D::Attributes(), | 848 this, WebKit::WebGraphicsContext3D::Attributes(), |
| 855 GURL("chrome://gpu/RenderThreadImpl::GetGpuVDAContext3D"))); | 849 GURL("chrome://gpu/RenderThreadImpl::GetGpuVDAContext3D"))); |
| 856 if (gpu_vda_context3d_.get()) | 850 if (gpu_vda_context3d_.get()) |
| 857 gpu_vda_context3d_->setContextLostCallback(context_lost_cb_.get()); | 851 gpu_vda_context3d_->setContextLostCallback(context_lost_cb_.get()); |
| 858 } | 852 } |
| 859 return gpu_vda_context3d_.get(); | 853 return gpu_vda_context3d_.get(); |
| 860 } | 854 } |
| 861 | 855 |
| 862 content::AudioRendererMixerManager* | 856 AudioRendererMixerManager* RenderThreadImpl::GetAudioRendererMixerManager() { |
| 863 RenderThreadImpl::GetAudioRendererMixerManager() { | |
| 864 if (!audio_renderer_mixer_manager_.get()) { | 857 if (!audio_renderer_mixer_manager_.get()) { |
| 865 audio_renderer_mixer_manager_.reset(new AudioRendererMixerManager( | 858 audio_renderer_mixer_manager_.reset(new AudioRendererMixerManager( |
| 866 audio_hardware::GetOutputSampleRate(), | 859 audio_hardware::GetOutputSampleRate(), |
| 867 audio_hardware::GetOutputBufferSize())); | 860 audio_hardware::GetOutputBufferSize())); |
| 868 } | 861 } |
| 869 | 862 |
| 870 return audio_renderer_mixer_manager_.get(); | 863 return audio_renderer_mixer_manager_.get(); |
| 871 } | 864 } |
| 872 | 865 |
| 873 #if defined(OS_WIN) | 866 #if defined(OS_WIN) |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 970 suspend_webkit_shared_timer_ = false; | 963 suspend_webkit_shared_timer_ = false; |
| 971 } | 964 } |
| 972 | 965 |
| 973 void RenderThreadImpl::DoNotNotifyWebKitOfModalLoop() { | 966 void RenderThreadImpl::DoNotNotifyWebKitOfModalLoop() { |
| 974 notify_webkit_of_modal_loop_ = false; | 967 notify_webkit_of_modal_loop_ = false; |
| 975 } | 968 } |
| 976 | 969 |
| 977 void RenderThreadImpl::OnSetZoomLevelForCurrentURL(const std::string& host, | 970 void RenderThreadImpl::OnSetZoomLevelForCurrentURL(const std::string& host, |
| 978 double zoom_level) { | 971 double zoom_level) { |
| 979 RenderViewZoomer zoomer(host, zoom_level); | 972 RenderViewZoomer zoomer(host, zoom_level); |
| 980 content::RenderView::ForEach(&zoomer); | 973 RenderView::ForEach(&zoomer); |
| 981 } | 974 } |
| 982 | 975 |
| 983 bool RenderThreadImpl::OnControlMessageReceived(const IPC::Message& msg) { | 976 bool RenderThreadImpl::OnControlMessageReceived(const IPC::Message& msg) { |
| 984 ObserverListBase<RenderProcessObserver>::Iterator it(observers_); | 977 ObserverListBase<RenderProcessObserver>::Iterator it(observers_); |
| 985 RenderProcessObserver* observer; | 978 RenderProcessObserver* observer; |
| 986 while ((observer = it.GetNext()) != NULL) { | 979 while ((observer = it.GetNext()) != NULL) { |
| 987 if (observer->OnControlMessageReceived(msg)) | 980 if (observer->OnControlMessageReceived(msg)) |
| 988 return true; | 981 return true; |
| 989 } | 982 } |
| 990 | 983 |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1050 false, | 1043 false, |
| 1051 params.swapped_out, | 1044 params.swapped_out, |
| 1052 params.next_page_id, | 1045 params.next_page_id, |
| 1053 params.screen_info, | 1046 params.screen_info, |
| 1054 NULL, | 1047 NULL, |
| 1055 params.accessibility_mode); | 1048 params.accessibility_mode); |
| 1056 } | 1049 } |
| 1057 } | 1050 } |
| 1058 | 1051 |
| 1059 GpuChannelHost* RenderThreadImpl::EstablishGpuChannelSync( | 1052 GpuChannelHost* RenderThreadImpl::EstablishGpuChannelSync( |
| 1060 content::CauseForGpuLaunch cause_for_gpu_launch) { | 1053 CauseForGpuLaunch cause_for_gpu_launch) { |
| 1061 TRACE_EVENT0("gpu", "RenderThreadImpl::EstablishGpuChannelSync"); | 1054 TRACE_EVENT0("gpu", "RenderThreadImpl::EstablishGpuChannelSync"); |
| 1062 | 1055 |
| 1063 if (gpu_channel_.get()) { | 1056 if (gpu_channel_.get()) { |
| 1064 // Do nothing if we already have a GPU channel or are already | 1057 // Do nothing if we already have a GPU channel or are already |
| 1065 // establishing one. | 1058 // establishing one. |
| 1066 if (gpu_channel_->state() == GpuChannelHost::kUnconnected || | 1059 if (gpu_channel_->state() == GpuChannelHost::kUnconnected || |
| 1067 gpu_channel_->state() == GpuChannelHost::kConnected) | 1060 gpu_channel_->state() == GpuChannelHost::kConnected) |
| 1068 return GetGpuChannel(); | 1061 return GetGpuChannel(); |
| 1069 | 1062 |
| 1070 // Recreate the channel if it has been lost. | 1063 // Recreate the channel if it has been lost. |
| 1071 gpu_channel_ = NULL; | 1064 gpu_channel_ = NULL; |
| 1072 } | 1065 } |
| 1073 | 1066 |
| 1074 // Ask the browser for the channel name. | 1067 // Ask the browser for the channel name. |
| 1075 int client_id = 0; | 1068 int client_id = 0; |
| 1076 IPC::ChannelHandle channel_handle; | 1069 IPC::ChannelHandle channel_handle; |
| 1077 content::GPUInfo gpu_info; | 1070 GPUInfo gpu_info; |
| 1078 if (!Send(new GpuHostMsg_EstablishGpuChannel(cause_for_gpu_launch, | 1071 if (!Send(new GpuHostMsg_EstablishGpuChannel(cause_for_gpu_launch, |
| 1079 &client_id, | 1072 &client_id, |
| 1080 &channel_handle, | 1073 &channel_handle, |
| 1081 &gpu_info)) || | 1074 &gpu_info)) || |
| 1082 #if defined(OS_POSIX) | 1075 #if defined(OS_POSIX) |
| 1083 channel_handle.socket.fd == -1 || | 1076 channel_handle.socket.fd == -1 || |
| 1084 #endif | 1077 #endif |
| 1085 channel_handle.name.empty()) { | 1078 channel_handle.name.empty()) { |
| 1086 // Otherwise cancel the connection. | 1079 // Otherwise cancel the connection. |
| 1087 gpu_channel_ = NULL; | 1080 gpu_channel_ = NULL; |
| 1088 return NULL; | 1081 return NULL; |
| 1089 } | 1082 } |
| 1090 | 1083 |
| 1091 gpu_channel_ = new GpuChannelHost(this, 0, client_id); | 1084 gpu_channel_ = new GpuChannelHost(this, 0, client_id); |
| 1092 gpu_channel_->set_gpu_info(gpu_info); | 1085 gpu_channel_->set_gpu_info(gpu_info); |
| 1093 content::GetContentClient()->SetGpuInfo(gpu_info); | 1086 GetContentClient()->SetGpuInfo(gpu_info); |
| 1094 | 1087 |
| 1095 // Connect to the GPU process if a channel name was received. | 1088 // Connect to the GPU process if a channel name was received. |
| 1096 gpu_channel_->Connect(channel_handle); | 1089 gpu_channel_->Connect(channel_handle); |
| 1097 | 1090 |
| 1098 return GetGpuChannel(); | 1091 return GetGpuChannel(); |
| 1099 } | 1092 } |
| 1100 | 1093 |
| 1101 WebKit::WebMediaStreamCenter* RenderThreadImpl::CreateMediaStreamCenter( | 1094 WebKit::WebMediaStreamCenter* RenderThreadImpl::CreateMediaStreamCenter( |
| 1102 WebKit::WebMediaStreamCenterClient* client) { | 1095 WebKit::WebMediaStreamCenterClient* client) { |
| 1103 #if defined(ENABLE_WEBRTC) | 1096 #if defined(ENABLE_WEBRTC) |
| 1104 if (!media_stream_center_) | 1097 if (!media_stream_center_) |
| 1105 media_stream_center_ = new content::MediaStreamCenter( | 1098 media_stream_center_ = new MediaStreamCenter( |
| 1106 client, GetMediaStreamDependencyFactory()); | 1099 client, GetMediaStreamDependencyFactory()); |
| 1107 #endif | 1100 #endif |
| 1108 return media_stream_center_; | 1101 return media_stream_center_; |
| 1109 } | 1102 } |
| 1110 | 1103 |
| 1111 MediaStreamDependencyFactory* | 1104 MediaStreamDependencyFactory* |
| 1112 RenderThreadImpl::GetMediaStreamDependencyFactory() { | 1105 RenderThreadImpl::GetMediaStreamDependencyFactory() { |
| 1113 #if defined(ENABLE_WEBRTC) | 1106 #if defined(ENABLE_WEBRTC) |
| 1114 if (!media_stream_factory_.get()) { | 1107 if (!media_stream_factory_.get()) { |
| 1115 media_stream_factory_.reset(new MediaStreamDependencyFactory( | 1108 media_stream_factory_.reset(new MediaStreamDependencyFactory( |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1141 | 1134 |
| 1142 FOR_EACH_OBSERVER(RenderProcessObserver, observers_, PluginListChanged()); | 1135 FOR_EACH_OBSERVER(RenderProcessObserver, observers_, PluginListChanged()); |
| 1143 } | 1136 } |
| 1144 | 1137 |
| 1145 void RenderThreadImpl::OnNetworkStateChanged(bool online) { | 1138 void RenderThreadImpl::OnNetworkStateChanged(bool online) { |
| 1146 EnsureWebKitInitialized(); | 1139 EnsureWebKitInitialized(); |
| 1147 WebNetworkStateNotifier::setOnLine(online); | 1140 WebNetworkStateNotifier::setOnLine(online); |
| 1148 } | 1141 } |
| 1149 | 1142 |
| 1150 void RenderThreadImpl::OnTempCrashWithData(const GURL& data) { | 1143 void RenderThreadImpl::OnTempCrashWithData(const GURL& data) { |
| 1151 content::GetContentClient()->SetActiveURL(data); | 1144 GetContentClient()->SetActiveURL(data); |
| 1152 CHECK(false); | 1145 CHECK(false); |
| 1153 } | 1146 } |
| 1154 | 1147 |
| 1155 scoped_refptr<base::MessageLoopProxy> | 1148 scoped_refptr<base::MessageLoopProxy> |
| 1156 RenderThreadImpl::GetFileThreadMessageLoopProxy() { | 1149 RenderThreadImpl::GetFileThreadMessageLoopProxy() { |
| 1157 DCHECK(message_loop() == MessageLoop::current()); | 1150 DCHECK(message_loop() == MessageLoop::current()); |
| 1158 if (!file_thread_.get()) { | 1151 if (!file_thread_.get()) { |
| 1159 file_thread_.reset(new base::Thread("Renderer::FILE")); | 1152 file_thread_.reset(new base::Thread("Renderer::FILE")); |
| 1160 file_thread_->Start(); | 1153 file_thread_->Start(); |
| 1161 } | 1154 } |
| 1162 return file_thread_->message_loop_proxy(); | 1155 return file_thread_->message_loop_proxy(); |
| 1163 } | 1156 } |
| 1157 |
| 1158 } // namespace content |
| OLD | NEW |