| Index: content/renderer/renderer_message_loop.cc
|
| diff --git a/content/renderer/renderer_message_loop.cc b/content/renderer/renderer_message_loop.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..00c59b2757946eaece87bdea828d4d83488843aa
|
| --- /dev/null
|
| +++ b/content/renderer/renderer_message_loop.cc
|
| @@ -0,0 +1,53 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "content/renderer/renderer_message_loop.h"
|
| +
|
| +#include "base/message_loop/high_priority_task_runner.h"
|
| +#include "content/renderer/render_thread_impl.h"
|
| +
|
| +namespace content {
|
| +
|
| +RendererMessageLoop::RendererMessageLoop()
|
| + : normal_work_queue_deficit_(0) {
|
| + high_priority_task_runner_ = new base::HighPriorityTaskRunner(this);
|
| +}
|
| +
|
| +RendererMessageLoop::RendererMessageLoop(scoped_ptr<base::MessagePump> pump)
|
| + : MessageLoop(pump.Pass()),
|
| + normal_work_queue_deficit_(0) {
|
| + high_priority_task_runner_ = new base::HighPriorityTaskRunner(this);
|
| +}
|
| +
|
| +RendererMessageLoop::~RendererMessageLoop() {
|
| +}
|
| +
|
| +void RendererMessageLoop::EnableHighPriorityIncomingTaskQueue() {
|
| + DCHECK(RenderThreadImpl::current());
|
| + DCHECK(!is_running());
|
| +
|
| + RenderThreadImpl::current()->UseHighPriorityTaskRunner(
|
| + high_priority_task_runner_);
|
| +}
|
| +
|
| +void RendererMessageLoop::ReloadWorkQueue() {
|
| + MessageLoop::ReloadWorkQueue();
|
| + if (high_priority_work_queue_.empty())
|
| + high_priority_task_runner_->ReloadWorkQueue(&high_priority_work_queue_);
|
| +}
|
| +
|
| +base::TaskQueue& RendererMessageLoop::SelectNextWorkQueue() {
|
| + // TODO(bashi): Need to be tuned.
|
| + static const int kMaxDeficit = 1000;
|
| + if (!high_priority_work_queue_.empty() &&
|
| + normal_work_queue_deficit_ <= kMaxDeficit) {
|
| + ++normal_work_queue_deficit_;
|
| + return high_priority_work_queue_;
|
| + }
|
| +
|
| + normal_work_queue_deficit_ = 0;
|
| + return MessageLoop::SelectNextWorkQueue();
|
| +}
|
| +
|
| +} // namespace content
|
|
|