summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
Diffstat (limited to 'chrome')
-rw-r--r--chrome/renderer/mock_render_thread.h10
-rw-r--r--chrome/renderer/render_thread.cc65
-rw-r--r--chrome/renderer/render_thread.h26
-rw-r--r--chrome/renderer/render_widget.cc22
-rw-r--r--chrome/renderer/render_widget.h5
5 files changed, 13 insertions, 115 deletions
diff --git a/chrome/renderer/mock_render_thread.h b/chrome/renderer/mock_render_thread.h
index a76180e..0e5bab8 100644
--- a/chrome/renderer/mock_render_thread.h
+++ b/chrome/renderer/mock_render_thread.h
@@ -41,12 +41,10 @@ class MockRenderThread : public RenderThreadBase {
virtual bool Send(IPC::Message* msg);
// Our mock thread doesn't do filtering.
- virtual void AddFilter(IPC::ChannelProxy::MessageFilter* filter) { }
- virtual void RemoveFilter(IPC::ChannelProxy::MessageFilter* filter) { }
-
- // Our mock thread doesn't deal with hidden and restored tabs.
- virtual void WidgetHidden() { }
- virtual void WidgetRestored() { }
+ virtual void AddFilter(IPC::ChannelProxy::MessageFilter* filter) {
+ }
+ virtual void RemoveFilter(IPC::ChannelProxy::MessageFilter* filter) {
+ }
//////////////////////////////////////////////////////////////////////////
// The following functions are called by the test itself.
diff --git a/chrome/renderer/render_thread.cc b/chrome/renderer/render_thread.cc
index e669e71..c6e5b17 100644
--- a/chrome/renderer/render_thread.cc
+++ b/chrome/renderer/render_thread.cc
@@ -9,7 +9,6 @@
#include "base/command_line.h"
#include "base/lazy_instance.h"
-#include "base/logging.h"
#include "base/shared_memory.h"
#include "base/stats_table.h"
#include "base/thread_local.h"
@@ -59,8 +58,6 @@ using WebKit::WebString;
namespace {
static const unsigned int kCacheStatsDelayMS = 2000 /* milliseconds */;
-static const double kInitialIdleHandlerDelayS = 1.0 /* seconds */;
-
static base::LazyInstance<base::ThreadLocalPointer<RenderThread> > lazy_tls(
base::LINKER_INITIALIZED);
@@ -108,11 +105,8 @@ void RenderThread::Init() {
#endif
plugin_refresh_allowed_ = true;
- cache_stats_task_pending_ = false;
- widget_count_ = 0;
- hidden_widget_count_ = 0;
- idle_notification_delay_in_s_ = kInitialIdleHandlerDelayS;
- task_factory_.reset(new ScopedRunnableMethodFactory<RenderThread>(this));
+ cache_stats_factory_.reset(
+ new ScopedRunnableMethodFactory<RenderThread>(this));
visited_link_slave_.reset(new VisitedLinkSlave());
user_script_slave_.reset(new UserScriptSlave());
@@ -162,30 +156,6 @@ void RenderThread::RemoveFilter(IPC::ChannelProxy::MessageFilter* filter) {
channel()->RemoveFilter(filter);
}
-void RenderThread::WidgetHidden() {
- DCHECK(hidden_widget_count_ <= widget_count_);
- hidden_widget_count_++ ;
- if (hidden_widget_count_ == widget_count_) {
- // Reset the delay.
- idle_notification_delay_in_s_ = kInitialIdleHandlerDelayS;
-
- // Schedule the IdleHandler to wakeup in a bit.
- MessageLoop::current()->PostDelayedTask(FROM_HERE,
- task_factory_->NewRunnableMethod(&RenderThread::IdleHandler),
- static_cast<int64>(floor(idle_notification_delay_in_s_)) * 1000);
- }
-}
-
-void RenderThread::WidgetRestored() {
- DCHECK(hidden_widget_count_ > 0);
- hidden_widget_count_--;
-
- // Note: we may have a timer pending to call the IdleHandler (see the
- // WidgetHidden() code). But we don't bother to cancel it as it is
- // benign and won't do anything if the tab is un-hidden when it is
- // called.
-}
-
void RenderThread::Resolve(const char* name, size_t length) {
return dns_master_->Resolve(name, length);
}
@@ -346,17 +316,15 @@ void RenderThread::InformHostOfCacheStats() {
WebCache::UsageStats stats;
WebCache::getUsageStats(&stats);
Send(new ViewHostMsg_UpdatedCacheStats(stats));
- cache_stats_task_pending_ = false;
}
void RenderThread::InformHostOfCacheStatsLater() {
// Rate limit informing the host of our cache stats.
- if (cache_stats_task_pending_)
+ if (!cache_stats_factory_->empty())
return;
- cache_stats_task_pending_ = true;
MessageLoop::current()->PostDelayedTask(FROM_HERE,
- task_factory_->NewRunnableMethod(
+ cache_stats_factory_->NewRunnableMethod(
&RenderThread::InformHostOfCacheStats),
kCacheStatsDelayMS);
}
@@ -456,31 +424,6 @@ void RenderThread::EnsureWebKitInitialized() {
}
}
-void RenderThread::IdleHandler() {
- // It is possible that the timer was set while the widgets were idle,
- // but that they are no longer idle. If so, just return.
- if (hidden_widget_count_ < widget_count_)
- return;
-
- LOG(INFO) << "RenderThread calling v8 IdleNotification for " << this;
-
- // When V8::IdleNotification returns true, it means that it has cleaned up
- // as much as it can. There is no point in continuing to call it.
- if (!v8::V8::IdleNotification(false)) {
- // Dampen the delay using the algorithm:
- // delay = delay + 1 / (delay + 2)
- // Using floor(delay) has a dampening effect such as:
- // 1s, 1, 1, 2, 2, 2, 2, 3, 3, ...
- idle_notification_delay_in_s_ +=
- 1.0 / (idle_notification_delay_in_s_ + 2.0);
-
- // Schedule the next timer.
- MessageLoop::current()->PostDelayedTask(FROM_HERE,
- task_factory_->NewRunnableMethod(&RenderThread::IdleHandler),
- static_cast<int64>(floor(idle_notification_delay_in_s_)) * 1000);
- }
-}
-
void RenderThread::OnExtensionMessageInvoke(const std::string& function_name,
const ListValue& args) {
RendererExtensionBindings::Invoke(function_name, args, NULL);
diff --git a/chrome/renderer/render_thread.h b/chrome/renderer/render_thread.h
index 007bac4..5c22236 100644
--- a/chrome/renderer/render_thread.h
+++ b/chrome/renderer/render_thread.h
@@ -49,10 +49,6 @@ class RenderThreadBase {
virtual void AddFilter(IPC::ChannelProxy::MessageFilter* filter) = 0;
virtual void RemoveFilter(IPC::ChannelProxy::MessageFilter* filter) = 0;
-
- // Called by a RenderWidget when it is hidden or restored.
- virtual void WidgetHidden() = 0;
- virtual void WidgetRestored() = 0;
};
// The RenderThread class represents a background thread where RenderView
@@ -83,20 +79,15 @@ class RenderThread : public RenderThreadBase,
}
virtual void AddRoute(int32 routing_id, IPC::Channel::Listener* listener) {
- widget_count_++;
return ChildThread::AddRoute(routing_id, listener);
}
virtual void RemoveRoute(int32 routing_id) {
- widget_count_--;
return ChildThread::RemoveRoute(routing_id);
}
virtual void AddFilter(IPC::ChannelProxy::MessageFilter* filter);
virtual void RemoveFilter(IPC::ChannelProxy::MessageFilter* filter);
- virtual void WidgetHidden();
- virtual void WidgetRestored();
-
VisitedLinkSlave* visited_link_slave() const {
return visited_link_slave_.get();
}
@@ -172,11 +163,8 @@ class RenderThread : public RenderThreadBase,
// We initialize WebKit as late as possible.
void EnsureWebKitInitialized();
- // A task we invoke periodically to assist with idle cleanup.
- void IdleHandler();
-
// These objects live solely on the render thread.
- scoped_ptr<ScopedRunnableMethodFactory<RenderThread> > task_factory_;
+ scoped_ptr<ScopedRunnableMethodFactory<RenderThread> > cache_stats_factory_;
scoped_ptr<VisitedLinkSlave> visited_link_slave_;
scoped_ptr<UserScriptSlave> user_script_slave_;
scoped_ptr<RenderDnsMaster> dns_master_;
@@ -195,18 +183,6 @@ class RenderThread : public RenderThreadBase,
// If true, then a GetPlugins call is allowed to rescan the disk.
bool plugin_refresh_allowed_;
- // Is there a pending task for doing CacheStats.
- bool cache_stats_task_pending_;
-
- // The count of RenderWidgets running through this thread.
- int widget_count_;
-
- // The count of hidden RenderWidgets running through this thread.
- int hidden_widget_count_;
-
- // The current value of the idle notification timer delay.
- double idle_notification_delay_in_s_;
-
DISALLOW_COPY_AND_ASSIGN(RenderThread);
};
diff --git a/chrome/renderer/render_widget.cc b/chrome/renderer/render_widget.cc
index cd722ba..863e73d 100644
--- a/chrome/renderer/render_widget.cc
+++ b/chrome/renderer/render_widget.cc
@@ -180,10 +180,8 @@ void RenderWidget::OnClose() {
closing_ = true;
// Browser correspondence is no longer needed at this point.
- if (routing_id_ != MSG_ROUTING_NONE) {
+ if (routing_id_ != MSG_ROUTING_NONE)
render_thread_->RemoveRoute(routing_id_);
- SetHidden(false);
- }
// If there is a Send call on the stack, then it could be dangerous to close
// now. Post a task that only gets invoked when there are no nested message
@@ -205,7 +203,7 @@ void RenderWidget::OnResize(const gfx::Size& new_size,
resizer_rect_ = resizer_rect;
// TODO(darin): We should not need to reset this here.
- SetHidden(false);
+ is_hidden_ = false;
needs_repainting_on_restore_ = false;
// We shouldn't be asked to resize to our current size.
@@ -234,7 +232,7 @@ void RenderWidget::OnResize(const gfx::Size& new_size,
void RenderWidget::OnWasHidden() {
// Go into a mode where we stop generating paint and scrolling events.
- SetHidden(true);
+ is_hidden_ = true;
}
void RenderWidget::OnWasRestored(bool needs_repainting) {
@@ -243,7 +241,7 @@ void RenderWidget::OnWasRestored(bool needs_repainting) {
return;
// See OnWasHidden
- SetHidden(false);
+ is_hidden_ = false;
if (!needs_repainting && !needs_repainting_on_restore_)
return;
@@ -738,18 +736,6 @@ void RenderWidget::OnSetTextDirection(WebTextDirection direction) {
webwidget_->setTextDirection(direction);
}
-void RenderWidget::SetHidden(bool hidden) {
- if (is_hidden_ == hidden)
- return;
-
- // The status has changed. Tell the RenderThread about it.
- is_hidden_ = hidden;
- if (is_hidden_)
- render_thread_->WidgetHidden();
- else
- render_thread_->WidgetRestored();
-}
-
void RenderWidget::SetBackground(const SkBitmap& background) {
background_ = background;
// Generate a full repaint.
diff --git a/chrome/renderer/render_widget.h b/chrome/renderer/render_widget.h
index ae54a55..7987d28 100644
--- a/chrome/renderer/render_widget.h
+++ b/chrome/renderer/render_widget.h
@@ -151,11 +151,6 @@ class RenderWidget : public IPC::Channel::Listener,
// browser side has updated the screen for a newly painted region.
virtual void DidPaint() {}
- // Sets the "hidden" state of this widget. All accesses to is_hidden_ should
- // use this method so that we can properly inform the RenderThread of our
- // state.
- void SetHidden(bool hidden);
-
// True if a PaintRect_ACK message is pending.
bool paint_reply_pending() const {
return paint_reply_pending_;