diff options
-rw-r--r-- | chrome/renderer/render_thread.h | 6 | ||||
-rw-r--r-- | chrome/renderer/render_widget.cc | 5 | ||||
-rw-r--r-- | webkit/glue/webkitclient_impl.h | 5 |
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_)(); |