summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/renderer/render_thread.h6
-rw-r--r--chrome/renderer/render_widget.cc5
-rw-r--r--webkit/glue/webkitclient_impl.h5
3 files changed, 15 insertions, 1 deletions
diff --git a/chrome/renderer/render_thread.h b/chrome/renderer/render_thread.h
index 97bb0ef..75ff7bb 100644
--- a/chrome/renderer/render_thread.h
+++ b/chrome/renderer/render_thread.h
@@ -252,6 +252,12 @@ class RenderThread : public RenderThreadBase,
const GURL& url,
int extension_group);
+ // Hack for http://crbug.com/71735.
+ // TODO(jamesr): remove once http://crbug.com/72007 is fixed.
+ RendererWebKitClientImpl* GetWebKitClientImpl() const {
+ return webkit_client_.get();
+ }
+
private:
virtual bool OnControlMessageReceived(const IPC::Message& msg);
diff --git a/chrome/renderer/render_widget.cc b/chrome/renderer/render_widget.cc
index 96f33c9..b914786 100644
--- a/chrome/renderer/render_widget.cc
+++ b/chrome/renderer/render_widget.cc
@@ -16,6 +16,7 @@
#include "chrome/common/render_messages_params.h"
#include "chrome/renderer/render_process.h"
#include "chrome/renderer/render_thread.h"
+#include "chrome/renderer/renderer_webkitclient_impl.h"
#include "ipc/ipc_sync_message.h"
#include "skia/ext/platform_canvas.h"
#include "third_party/skia/include/core/SkShader.h"
@@ -499,6 +500,10 @@ void RenderWidget::AnimateIfNeeded() {
this, &RenderWidget::AnimationCallback), 16);
animation_task_posted_ = true;
animation_update_pending_ = false;
+ // Explicitly pump the WebCore Timer queue to avoid starvation on OS X.
+ // See crbug.com/71735.
+ // TODO(jamesr) Remove this call once crbug.com/72007 is fixed.
+ RenderThread::current()->GetWebKitClientImpl()->DoTimeout();
webwidget_->animate();
} else if (!animation_task_posted_) {
// This code uses base::Time::Now() to calculate the floor and next fire
diff --git a/webkit/glue/webkitclient_impl.h b/webkit/glue/webkitclient_impl.h
index 302a99f..1c4f9c7 100644
--- a/webkit/glue/webkitclient_impl.h
+++ b/webkit/glue/webkitclient_impl.h
@@ -76,12 +76,15 @@ class WebKitClientImpl : public WebKit::WebKitClient {
void SuspendSharedTimer();
void ResumeSharedTimer();
- private:
+ // Hack for http://crbug.com/71735.
+ // TODO(jamesr): move this back to the private section once
+ // http://crbug.com/72007 is fixed.
void DoTimeout() {
if (shared_timer_func_ && !shared_timer_suspended_)
shared_timer_func_();
}
+ private:
MessageLoop* main_loop_;
base::OneShotTimer<WebKitClientImpl> shared_timer_;
void (*shared_timer_func_)();