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 |