| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "platform/scheduler/renderer/task_queue_throttler.h" | 5 #include "platform/scheduler/renderer/task_queue_throttler.h" |
| 6 | 6 |
| 7 #include <cstdint> | 7 #include <cstdint> |
| 8 | 8 |
| 9 #include "base/format_macros.h" | 9 #include "base/format_macros.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 81 TaskQueueThrottler::TimeBudgetPool::~TimeBudgetPool() {} | 81 TaskQueueThrottler::TimeBudgetPool::~TimeBudgetPool() {} |
| 82 | 82 |
| 83 void TaskQueueThrottler::TimeBudgetPool::SetTimeBudget(base::TimeTicks now, | 83 void TaskQueueThrottler::TimeBudgetPool::SetTimeBudget(base::TimeTicks now, |
| 84 double cpu_percentage) { | 84 double cpu_percentage) { |
| 85 Advance(now); | 85 Advance(now); |
| 86 cpu_percentage_ = cpu_percentage; | 86 cpu_percentage_ = cpu_percentage; |
| 87 } | 87 } |
| 88 | 88 |
| 89 void TaskQueueThrottler::TimeBudgetPool::AddQueue(base::TimeTicks now, | 89 void TaskQueueThrottler::TimeBudgetPool::AddQueue(base::TimeTicks now, |
| 90 TaskQueue* queue) { | 90 TaskQueue* queue) { |
| 91 std::pair<TaskQueueMap::iterator, bool> insert_result = | 91 Metadata& metadata = task_queue_throttler_->queue_details_[queue]; |
| 92 task_queue_throttler_->queue_details_.insert( | |
| 93 std::make_pair(queue, Metadata(0, queue->IsQueueEnabled()))); | |
| 94 Metadata& metadata = insert_result.first->second; | |
| 95 DCHECK(!metadata.time_budget_pool); | 92 DCHECK(!metadata.time_budget_pool); |
| 96 metadata.time_budget_pool = this; | 93 metadata.time_budget_pool = this; |
| 97 | 94 |
| 98 associated_task_queues_.insert(queue); | 95 associated_task_queues_.insert(queue); |
| 99 | 96 |
| 100 if (!is_enabled_ || !metadata.IsThrottled()) | 97 if (!metadata.IsThrottled()) |
| 101 return; | 98 return; |
| 102 | 99 |
| 103 queue->SetQueueEnabled(false); | 100 queue->SetQueueEnabled(false); |
| 104 | 101 |
| 105 task_queue_throttler_->MaybeSchedulePumpQueue(FROM_HERE, now, queue, | 102 task_queue_throttler_->MaybeSchedulePumpQueue(FROM_HERE, now, queue, |
| 106 GetNextAllowedRunTime()); | 103 GetNextAllowedRunTime()); |
| 107 } | 104 } |
| 108 | 105 |
| 109 void TaskQueueThrottler::TimeBudgetPool::RemoveQueue(base::TimeTicks now, | 106 void TaskQueueThrottler::TimeBudgetPool::RemoveQueue(base::TimeTicks now, |
| 110 TaskQueue* queue) { | 107 TaskQueue* queue) { |
| 111 auto find_it = task_queue_throttler_->queue_details_.find(queue); | 108 auto find_it = task_queue_throttler_->queue_details_.find(queue); |
| 112 DCHECK(find_it != task_queue_throttler_->queue_details_.end() && | 109 DCHECK(find_it != task_queue_throttler_->queue_details_.end() && |
| 113 find_it->second.time_budget_pool == this); | 110 find_it->second.time_budget_pool == this); |
| 114 find_it->second.time_budget_pool = nullptr; | 111 find_it->second.time_budget_pool = nullptr; |
| 115 bool is_throttled = find_it->second.IsThrottled(); | 112 bool is_throttled = find_it->second.IsThrottled(); |
| 116 | 113 |
| 117 task_queue_throttler_->MaybeDeleteQueueMetadata(find_it); | 114 task_queue_throttler_->MaybeDeleteQueueMetadata(find_it); |
| 118 associated_task_queues_.erase(queue); | 115 associated_task_queues_.erase(queue); |
| 119 | 116 |
| 120 if (!is_enabled_ || !is_throttled) | 117 if (is_throttled) |
| 121 return; | 118 return; |
| 122 | 119 |
| 123 task_queue_throttler_->MaybeSchedulePumpQueue(FROM_HERE, now, queue, | 120 task_queue_throttler_->MaybeSchedulePumpQueue(FROM_HERE, now, queue, |
| 124 base::nullopt); | 121 base::nullopt); |
| 125 } | 122 } |
| 126 | 123 |
| 127 void TaskQueueThrottler::TimeBudgetPool::EnableThrottling(LazyNow* lazy_now) { | 124 void TaskQueueThrottler::TimeBudgetPool::EnableThrottling(LazyNow* lazy_now) { |
| 128 if (is_enabled_) | 125 if (is_enabled_) |
| 129 return; | 126 return; |
| 130 is_enabled_ = true; | 127 is_enabled_ = true; |
| (...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 569 return std::max(now, time_budget_pool->GetNextAllowedRunTime()); | 566 return std::max(now, time_budget_pool->GetNextAllowedRunTime()); |
| 570 } | 567 } |
| 571 | 568 |
| 572 void TaskQueueThrottler::MaybeDeleteQueueMetadata(TaskQueueMap::iterator it) { | 569 void TaskQueueThrottler::MaybeDeleteQueueMetadata(TaskQueueMap::iterator it) { |
| 573 if (!it->second.IsThrottled() && !it->second.time_budget_pool) | 570 if (!it->second.IsThrottled() && !it->second.time_budget_pool) |
| 574 queue_details_.erase(it); | 571 queue_details_.erase(it); |
| 575 } | 572 } |
| 576 | 573 |
| 577 } // namespace scheduler | 574 } // namespace scheduler |
| 578 } // namespace blink | 575 } // namespace blink |
| OLD | NEW |