Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10273)

Unified Diff: chrome/renderer/render_thread.cc

Issue 155876: Revert r21117 as it caused reliability failures.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/renderer/render_thread.h ('k') | chrome/renderer/render_thread_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/renderer/render_thread.cc
===================================================================
--- chrome/renderer/render_thread.cc (revision 21215)
+++ chrome/renderer/render_thread.cc (working copy)
@@ -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<base::ThreadLocalPointer<RenderThread> > 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,19 +128,7 @@
}
};
#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);
#if defined(OS_WIN)
@@ -105,7 +138,8 @@
CoInitialize(0);
#endif
- plugin_refresh_allowed_ = true;
+ ChildThread::Init();
+ notification_service_.reset(new NotificationService);
cache_stats_factory_.reset(
new ScopedRunnableMethodFactory<RenderThread>(this));
@@ -124,13 +158,24 @@
#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 @@
#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 @@
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);
« no previous file with comments | « chrome/renderer/render_thread.h ('k') | chrome/renderer/render_thread_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698