Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(144)

Unified Diff: third_party/WebKit/Source/platform/scheduler/renderer/task_queue_throttler.cc

Issue 2741473002: [scheduler] Move TimeBudgetPool to a separate file. (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/platform/scheduler/renderer/task_queue_throttler.cc
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/task_queue_throttler.cc b/third_party/WebKit/Source/platform/scheduler/renderer/task_queue_throttler.cc
index e6a894af2fa43c3566f5a16523f40fd70f6a0045..8ac96604c3250e86bde9bd41162366d8a75c8c20 100644
--- a/third_party/WebKit/Source/platform/scheduler/renderer/task_queue_throttler.cc
+++ b/third_party/WebKit/Source/platform/scheduler/renderer/task_queue_throttler.cc
@@ -14,6 +14,7 @@
#include "platform/WebFrameScheduler.h"
#include "platform/scheduler/base/real_time_domain.h"
#include "platform/scheduler/child/scheduler_tqm_delegate.h"
+#include "platform/scheduler/renderer/budget_pool.h"
#include "platform/scheduler/renderer/renderer_scheduler_impl.h"
#include "platform/scheduler/renderer/throttled_time_domain.h"
#include "platform/scheduler/renderer/web_frame_scheduler_impl.h"
@@ -71,215 +72,6 @@ std::string PointerToId(void* pointer) {
} // namespace
-TaskQueueThrottler::TimeBudgetPool::TimeBudgetPool(
- const char* name,
- TaskQueueThrottler* task_queue_throttler,
- base::TimeTicks now,
- base::Optional<base::TimeDelta> max_budget_level,
- base::Optional<base::TimeDelta> max_throttling_duration)
- : name_(name),
- task_queue_throttler_(task_queue_throttler),
- max_budget_level_(max_budget_level),
- max_throttling_duration_(max_throttling_duration),
- last_checkpoint_(now),
- cpu_percentage_(1),
- is_enabled_(true) {}
-
-TaskQueueThrottler::TimeBudgetPool::~TimeBudgetPool() {}
-
-void TaskQueueThrottler::TimeBudgetPool::SetTimeBudgetRecoveryRate(
- base::TimeTicks now,
- double cpu_percentage) {
- Advance(now);
- cpu_percentage_ = cpu_percentage;
- EnforceBudgetLevelRestrictions();
-}
-
-void TaskQueueThrottler::TimeBudgetPool::AddQueue(base::TimeTicks now,
- TaskQueue* queue) {
- std::pair<TaskQueueMap::iterator, bool> insert_result =
- task_queue_throttler_->queue_details_.insert(
- std::make_pair(queue, Metadata()));
- Metadata& metadata = insert_result.first->second;
- DCHECK(!metadata.time_budget_pool);
- metadata.time_budget_pool = this;
-
- associated_task_queues_.insert(queue);
-
- if (!is_enabled_ || !task_queue_throttler_->IsThrottled(queue))
- return;
-
- queue->InsertFence(TaskQueue::InsertFencePosition::BEGINNING_OF_TIME);
-
- task_queue_throttler_->MaybeSchedulePumpQueue(FROM_HERE, now, queue,
- GetNextAllowedRunTime());
-}
-
-void TaskQueueThrottler::TimeBudgetPool::RemoveQueue(base::TimeTicks now,
- TaskQueue* queue) {
- auto find_it = task_queue_throttler_->queue_details_.find(queue);
- DCHECK(find_it != task_queue_throttler_->queue_details_.end() &&
- find_it->second.time_budget_pool == this);
- find_it->second.time_budget_pool = nullptr;
- bool is_throttled = task_queue_throttler_->IsThrottled(queue);
-
- task_queue_throttler_->MaybeDeleteQueueMetadata(find_it);
- associated_task_queues_.erase(queue);
-
- if (!is_enabled_ || !is_throttled)
- return;
-
- task_queue_throttler_->MaybeSchedulePumpQueue(FROM_HERE, now, queue,
- base::nullopt);
-}
-
-void TaskQueueThrottler::TimeBudgetPool::EnableThrottling(LazyNow* lazy_now) {
- if (is_enabled_)
- return;
- is_enabled_ = true;
-
- TRACE_EVENT0(task_queue_throttler_->tracing_category_,
- "TaskQueueThrottler_TimeBudgetPool_EnableThrottling");
-
- BlockThrottledQueues(lazy_now->Now());
-}
-
-void TaskQueueThrottler::TimeBudgetPool::DisableThrottling(LazyNow* lazy_now) {
- if (!is_enabled_)
- return;
- is_enabled_ = false;
-
- TRACE_EVENT0(task_queue_throttler_->tracing_category_,
- "TaskQueueThrottler_TimeBudgetPool_DisableThrottling");
-
- for (TaskQueue* queue : associated_task_queues_) {
- if (!task_queue_throttler_->IsThrottled(queue))
- continue;
-
- task_queue_throttler_->MaybeSchedulePumpQueue(FROM_HERE, lazy_now->Now(),
- queue, base::nullopt);
- }
-
- // TODO(altimin): We need to disable TimeBudgetQueues here or they will
- // regenerate extra time budget when they are disabled.
-}
-
-bool TaskQueueThrottler::TimeBudgetPool::IsThrottlingEnabled() const {
- return is_enabled_;
-}
-
-void TaskQueueThrottler::TimeBudgetPool::GrantAdditionalBudget(
- base::TimeTicks now,
- base::TimeDelta budget_level) {
- Advance(now);
- current_budget_level_ += budget_level;
- EnforceBudgetLevelRestrictions();
-}
-
-void TaskQueueThrottler::TimeBudgetPool::SetReportingCallback(
- base::Callback<void(base::TimeDelta)> reporting_callback) {
- reporting_callback_ = reporting_callback;
-}
-
-void TaskQueueThrottler::TimeBudgetPool::Close() {
- DCHECK_EQ(0u, associated_task_queues_.size());
-
- task_queue_throttler_->time_budget_pools_.erase(this);
-}
-
-bool TaskQueueThrottler::TimeBudgetPool::HasEnoughBudgetToRun(
- base::TimeTicks now) {
- Advance(now);
- return !is_enabled_ || current_budget_level_.InMicroseconds() >= 0;
-}
-
-base::TimeTicks TaskQueueThrottler::TimeBudgetPool::GetNextAllowedRunTime() {
- if (!is_enabled_ || current_budget_level_.InMicroseconds() >= 0) {
- return last_checkpoint_;
- } else {
- // Subtract because current_budget is negative.
- return last_checkpoint_ - current_budget_level_ / cpu_percentage_;
- }
-}
-
-void TaskQueueThrottler::TimeBudgetPool::RecordTaskRunTime(
- base::TimeTicks start_time,
- base::TimeTicks end_time) {
- DCHECK_LE(start_time, end_time);
- Advance(end_time);
- if (is_enabled_) {
- base::TimeDelta old_budget_level = current_budget_level_;
- current_budget_level_ -= (end_time - start_time);
- EnforceBudgetLevelRestrictions();
-
- if (!reporting_callback_.is_null() && old_budget_level.InSecondsF() > 0 &&
- current_budget_level_.InSecondsF() < 0) {
- reporting_callback_.Run(-current_budget_level_ / cpu_percentage_);
- }
- }
-}
-
-const char* TaskQueueThrottler::TimeBudgetPool::Name() const {
- return name_;
-}
-
-void TaskQueueThrottler::TimeBudgetPool::AsValueInto(
- base::trace_event::TracedValue* state,
- base::TimeTicks now) const {
- state->BeginDictionary(name_);
-
- state->SetString("name", name_);
- state->SetDouble("time_budget", cpu_percentage_);
- state->SetDouble("time_budget_level_in_seconds",
- current_budget_level_.InSecondsF());
- state->SetDouble("last_checkpoint_seconds_ago",
- (now - last_checkpoint_).InSecondsF());
- state->SetBoolean("is_enabled", is_enabled_);
-
- state->BeginArray("task_queues");
- for (TaskQueue* queue : associated_task_queues_) {
- state->AppendString(PointerToId(queue));
- }
- state->EndArray();
-
- state->EndDictionary();
-}
-
-void TaskQueueThrottler::TimeBudgetPool::Advance(base::TimeTicks now) {
- if (now > last_checkpoint_) {
- if (is_enabled_) {
- current_budget_level_ += cpu_percentage_ * (now - last_checkpoint_);
- EnforceBudgetLevelRestrictions();
- }
- last_checkpoint_ = now;
- }
-}
-
-void TaskQueueThrottler::TimeBudgetPool::BlockThrottledQueues(
- base::TimeTicks now) {
- for (TaskQueue* queue : associated_task_queues_) {
- if (!task_queue_throttler_->IsThrottled(queue))
- continue;
-
- queue->InsertFence(TaskQueue::InsertFencePosition::BEGINNING_OF_TIME);
- task_queue_throttler_->MaybeSchedulePumpQueue(FROM_HERE, now, queue,
- base::nullopt);
- }
-}
-
-void TaskQueueThrottler::TimeBudgetPool::EnforceBudgetLevelRestrictions() {
- if (max_budget_level_) {
- current_budget_level_ =
- std::min(current_budget_level_, max_budget_level_.value());
- }
- if (max_throttling_duration_) {
- // Current budget level may be negative.
- current_budget_level_ =
- std::max(current_budget_level_,
- -max_throttling_duration_.value() * cpu_percentage_);
- }
-}
-
TaskQueueThrottler::TaskQueueThrottler(
RendererSchedulerImpl* renderer_scheduler,
const char* tracing_category)
@@ -516,7 +308,7 @@ void TaskQueueThrottler::MaybeSchedulePumpThrottledTasks(
from_here, pump_throttled_tasks_closure_.callback(), delay);
}
-TaskQueueThrottler::TimeBudgetPool* TaskQueueThrottler::CreateTimeBudgetPool(
+TimeBudgetPool* TaskQueueThrottler::CreateTimeBudgetPool(
const char* name,
base::Optional<base::TimeDelta> max_budget_level,
base::Optional<base::TimeDelta> max_throttling_duration) {
@@ -554,7 +346,7 @@ void TaskQueueThrottler::AsValueInto(base::trace_event::TracedValue* state,
state->BeginDictionary("time_budget_pools");
for (const auto& map_entry : time_budget_pools_) {
- TaskQueueThrottler::TimeBudgetPool* pool = map_entry.first;
+ BudgetPool* pool = map_entry.first;
pool->AsValueInto(state, now);
}
state->EndDictionary();
@@ -571,8 +363,8 @@ void TaskQueueThrottler::AsValueInto(base::trace_event::TracedValue* state,
state->EndDictionary();
}
-TaskQueueThrottler::TimeBudgetPool*
-TaskQueueThrottler::GetTimeBudgetPoolForQueue(TaskQueue* queue) {
+TimeBudgetPool* TaskQueueThrottler::GetTimeBudgetPoolForQueue(
+ TaskQueue* queue) {
auto find_it = queue_details_.find(queue);
if (find_it == queue_details_.end())
return nullptr;

Powered by Google App Engine
This is Rietveld 408576698