Chromium Code Reviews| Index: content/renderer/scheduler/task_queue_manager.cc |
| diff --git a/content/renderer/scheduler/task_queue_manager.cc b/content/renderer/scheduler/task_queue_manager.cc |
| index eed64494175b782cb816212a84c357f50fcae7e9..515264bac2ad8f32adfedd7a4aeb308e78f74329 100644 |
| --- a/content/renderer/scheduler/task_queue_manager.cc |
| +++ b/content/renderer/scheduler/task_queue_manager.cc |
| @@ -245,6 +245,7 @@ TaskQueueManager::TaskQueueManager( |
| : main_task_runner_(main_task_runner), |
| selector_(selector), |
| pending_dowork_count_(0), |
| + work_batch_size_(1), |
| weak_factory_(this) { |
| DCHECK(main_task_runner->RunsTasksOnCurrentThread()); |
| TRACE_EVENT_OBJECT_CREATED_WITH_ID( |
| @@ -332,14 +333,18 @@ void TaskQueueManager::DoWork(bool posted_from_main_thread) { |
| DCHECK_GE(pending_dowork_count_, 0); |
| } |
| main_thread_checker_.CalledOnValidThread(); |
| - if (!UpdateWorkQueues()) |
| - return; |
| - size_t queue_index; |
| - if (!SelectWorkQueueToService(&queue_index)) |
| - return; |
| - MaybePostDoWorkOnMainRunner(); |
| - ProcessTaskFromWorkQueue(queue_index); |
| + for (int i = 0; i < work_batch_size_; i++) { |
| + if (!UpdateWorkQueues()) |
| + return; |
| + |
| + size_t queue_index; |
| + if (!SelectWorkQueueToService(&queue_index)) |
| + return; |
| + if (i == 0) |
| + MaybePostDoWorkOnMainRunner(); |
| + ProcessTaskFromWorkQueue(queue_index); |
| + } |
|
rmcilroy
2015/01/14 17:56:37
Would the following work:
if (!UpdateWorkQueues()
Sami
2015/01/14 18:11:49
I had the same idea and chose to do polling inside
rmcilroy
2015/01/14 19:34:48
Good point
|
| } |
| bool TaskQueueManager::SelectWorkQueueToService(size_t* out_queue_index) { |
| @@ -388,6 +393,12 @@ void TaskQueueManager::SetQueueName(size_t queue_index, const char* name) { |
| queue->set_name(name); |
| } |
| +void TaskQueueManager::SetWorkBatchSize(int work_batch_size) { |
| + main_thread_checker_.CalledOnValidThread(); |
| + DCHECK_GE(work_batch_size, 1); |
| + work_batch_size_ = work_batch_size; |
| +} |
| + |
| scoped_refptr<base::debug::ConvertableToTraceFormat> |
| TaskQueueManager::AsValueWithSelectorResult(bool should_run, |
| size_t selected_queue) const { |