From 421d1cd06fb54c660e0f251df5a0d6403a214670 Mon Sep 17 00:00:00 2001 From: "estade@chromium.org" Date: Tue, 21 Jul 2009 21:06:23 +0000 Subject: Revert r21117 as it caused reliability failures. Also included in this revert: r21165, r21180, and a couple valgrind suppression edits TBR=huanr Review URL: http://codereview.chromium.org/155876 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21216 0039d316-1c4b-4281-b951-d872f2087c98 --- chrome/renderer/render_thread.cc | 99 +++++++++++++++++++++++++--------------- 1 file changed, 63 insertions(+), 36 deletions(-) (limited to 'chrome/renderer/render_thread.cc') diff --git a/chrome/renderer/render_thread.cc b/chrome/renderer/render_thread.cc index 80811b2..e35377a 100644 --- a/chrome/renderer/render_thread.cc +++ b/chrome/renderer/render_thread.cc @@ -17,6 +17,7 @@ #include "chrome/common/chrome_switches.h" #include "chrome/common/render_messages.h" #include "chrome/common/renderer_preferences.h" +#include "chrome/common/notification_service.h" #include "chrome/common/url_constants.h" #include "chrome/plugin/npobject_util.h" // TODO(port) @@ -54,10 +55,54 @@ using WebKit::WebCache; using WebKit::WebString; -namespace { static const unsigned int kCacheStatsDelayMS = 2000 /* milliseconds */; + static base::LazyInstance > lazy_tls( base::LINKER_INITIALIZED); + +//----------------------------------------------------------------------------- +// Methods below are only called on the owner's thread: + +// When we run plugins in process, we actually run them on the render thread, +// which means that we need to make the render thread pump UI events. +RenderThread::RenderThread() + : ChildThread( + base::Thread::Options(RenderProcess::InProcessPlugins() ? + MessageLoop::TYPE_UI : MessageLoop::TYPE_DEFAULT, kV8StackSize)), + plugin_refresh_allowed_(true) { +} + +RenderThread::RenderThread(const std::string& channel_name) + : ChildThread( + base::Thread::Options(RenderProcess::InProcessPlugins() ? + MessageLoop::TYPE_UI : MessageLoop::TYPE_DEFAULT, kV8StackSize)), + plugin_refresh_allowed_(true) { + SetChannelName(channel_name); +} + +RenderThread::~RenderThread() { +} + +RenderThread* RenderThread::current() { + return lazy_tls.Pointer()->Get(); +} + +void RenderThread::AddFilter(IPC::ChannelProxy::MessageFilter* filter) { + channel()->AddFilter(filter); +} + +void RenderThread::RemoveFilter(IPC::ChannelProxy::MessageFilter* filter) { + channel()->RemoveFilter(filter); +} + +void RenderThread::Resolve(const char* name, size_t length) { + return dns_master_->Resolve(name, length); +} + +void RenderThread::SendHistograms(int sequence_number) { + return histogram_snapshots_->SendHistograms(sequence_number); +} + static WebAppCacheContext* CreateAppCacheContextForRenderer() { return new AppCacheContextImpl(RenderThread::current()); } @@ -83,18 +128,6 @@ class SuicideOnChannelErrorFilter : public IPC::ChannelProxy::MessageFilter { } }; #endif -} // namespace - -// When we run plugins in process, we actually run them on the render thread, -// which means that we need to make the render thread pump UI events. -RenderThread::RenderThread() { - Init(); -} - -RenderThread::RenderThread(const std::string& channel_name) - : ChildThread(channel_name) { - Init(); -} void RenderThread::Init() { lazy_tls.Pointer()->Set(this); @@ -105,7 +138,8 @@ void RenderThread::Init() { CoInitialize(0); #endif - plugin_refresh_allowed_ = true; + ChildThread::Init(); + notification_service_.reset(new NotificationService); cache_stats_factory_.reset( new ScopedRunnableMethodFactory(this)); @@ -124,13 +158,24 @@ void RenderThread::Init() { #endif } -RenderThread::~RenderThread() { +void RenderThread::CleanUp() { // Shutdown in reverse of the initialization order. RemoveFilter(devtools_agent_filter_.get()); + devtools_agent_filter_ = NULL; WebAppCacheContext::SetFactory(NULL); - if (webkit_client_.get()) + app_cache_dispatcher_.reset(); + histogram_snapshots_.reset(); + dns_master_.reset(); + user_script_slave_.reset(); + visited_link_slave_.reset(); + + if (webkit_client_.get()) { WebKit::shutdown(); + webkit_client_.reset(); + } + notification_service_.reset(); + ChildThread::CleanUp(); lazy_tls.Pointer()->Set(NULL); // TODO(port) @@ -143,26 +188,6 @@ RenderThread::~RenderThread() { #endif } -RenderThread* RenderThread::current() { - return lazy_tls.Pointer()->Get(); -} - -void RenderThread::AddFilter(IPC::ChannelProxy::MessageFilter* filter) { - channel()->AddFilter(filter); -} - -void RenderThread::RemoveFilter(IPC::ChannelProxy::MessageFilter* filter) { - channel()->RemoveFilter(filter); -} - -void RenderThread::Resolve(const char* name, size_t length) { - return dns_master_->Resolve(name, length); -} - -void RenderThread::SendHistograms(int sequence_number) { - return histogram_snapshots_->SendHistograms(sequence_number); -} - void RenderThread::OnUpdateVisitedLinks(base::SharedMemoryHandle table) { DCHECK(base::SharedMemory::IsHandleValid(table)) << "Bad table handle"; visited_link_slave_->Init(table); @@ -249,6 +274,8 @@ void RenderThread::OnCreateNewView(gfx::NativeViewId parent_hwnd, true, false); #endif + // TODO(darin): once we have a RenderThread per RenderView, this will need to + // change to assert that we are not creating more than one view. RenderView::Create( this, parent_hwnd, waitable_event, MSG_ROUTING_NONE, renderer_prefs, webkit_prefs, new SharedRenderViewCounter(0), view_id); -- cgit v1.1