Chromium Code Reviews| Index: net/base/prioritized_dispatcher.cc |
| =================================================================== |
| --- net/base/prioritized_dispatcher.cc (revision 218288) |
| +++ net/base/prioritized_dispatcher.cc (working copy) |
| @@ -17,7 +17,8 @@ |
| PrioritizedDispatcher::PrioritizedDispatcher(const Limits& limits) |
| : queue_(limits.reserved_slots.size()), |
| max_running_jobs_(limits.reserved_slots.size()), |
| - num_running_jobs_(0) { |
| + num_running_jobs_(0), |
| + disabled_(false) { |
| size_t total = 0; |
| for (size_t i = 0; i < limits.reserved_slots.size(); ++i) { |
| total += limits.reserved_slots[i]; |
| @@ -37,7 +38,7 @@ |
| Job* job, Priority priority) { |
| DCHECK(job); |
| DCHECK_LT(priority, num_priorities()); |
| - if (num_running_jobs_ < max_running_jobs_[priority]) { |
| + if (!disabled_ && num_running_jobs_ < max_running_jobs_[priority]) { |
| ++num_running_jobs_; |
| job->Start(); |
| return Handle(); |
| @@ -45,6 +46,18 @@ |
| return queue_.Insert(job, priority); |
| } |
| +PrioritizedDispatcher::Handle PrioritizedDispatcher::AddAtHead( |
| + Job* job, Priority priority) { |
| + DCHECK(job); |
| + DCHECK_LT(priority, num_priorities()); |
| + if (!disabled_ && num_running_jobs_ < max_running_jobs_[priority]) { |
| + ++num_running_jobs_; |
| + job->Start(); |
| + return Handle(); |
| + } |
| + return queue_.InsertAtFront(job, priority); |
| +} |
| + |
| void PrioritizedDispatcher::Cancel(const Handle& handle) { |
| queue_.Erase(handle); |
| } |
| @@ -86,10 +99,14 @@ |
| MaybeDispatchJob(handle, handle.priority()); |
| } |
| +void PrioritizedDispatcher::Disable() { |
| + disabled_ = true; |
| +} |
| + |
| bool PrioritizedDispatcher::MaybeDispatchJob(const Handle& handle, |
| Priority job_priority) { |
| DCHECK_LT(job_priority, num_priorities()); |
| - if (num_running_jobs_ >= max_running_jobs_[job_priority]) |
| + if (disabled_ || num_running_jobs_ >= max_running_jobs_[job_priority]) |
|
szym
2013/08/19 20:49:34
If instead of |disabled_|, you set max_running_job
mmenke
2013/08/19 21:09:59
Not sure why this didn't occur to me. It's pretty
|
| return false; |
| Job* job = handle.value(); |
| queue_.Erase(handle); |