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

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

Issue 2778123003: [scheduler] Add WakeupBudgetPool. (Closed)
Patch Set: Addressed comments Created 3 years, 7 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/cpu_time_budget_pool.cc
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/budget_pool.cc b/third_party/WebKit/Source/platform/scheduler/renderer/cpu_time_budget_pool.cc
similarity index 64%
copy from third_party/WebKit/Source/platform/scheduler/renderer/budget_pool.cc
copy to third_party/WebKit/Source/platform/scheduler/renderer/cpu_time_budget_pool.cc
index 0c68389330d7536300990bcd877a32a3f2acf551..96eb942dfa158185a50e4e51543bd1095ca438bb 100644
--- a/third_party/WebKit/Source/platform/scheduler/renderer/budget_pool.cc
+++ b/third_party/WebKit/Source/platform/scheduler/renderer/cpu_time_budget_pool.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "platform/scheduler/renderer/budget_pool.h"
+#include "platform/scheduler/renderer/cpu_time_budget_pool.h"
#include <cstdint>
@@ -11,13 +11,7 @@
#include "base/memory/ptr_util.h"
#include "base/optional.h"
#include "base/strings/stringprintf.h"
-#include "platform/WebFrameScheduler.h"
-#include "platform/scheduler/base/real_time_domain.h"
-#include "platform/scheduler/child/scheduler_tqm_delegate.h"
-#include "platform/scheduler/renderer/renderer_scheduler_impl.h"
#include "platform/scheduler/renderer/task_queue_throttler.h"
-#include "platform/scheduler/renderer/throttled_time_domain.h"
-#include "platform/scheduler/renderer/web_frame_scheduler_impl.h"
namespace blink {
namespace scheduler {
@@ -32,81 +26,6 @@ std::string PointerToId(void* pointer) {
} // namespace
-BudgetPool::BudgetPool(const char* name,
- BudgetPoolController* budget_pool_controller)
- : name_(name),
- budget_pool_controller_(budget_pool_controller),
- is_enabled_(true) {}
-
-BudgetPool::~BudgetPool() {}
-
-const char* BudgetPool::Name() const {
- return name_;
-}
-
-void BudgetPool::AddQueue(base::TimeTicks now, TaskQueue* queue) {
- budget_pool_controller_->AddQueueToBudgetPool(queue, this);
- associated_task_queues_.insert(queue);
-
- if (!is_enabled_ || !budget_pool_controller_->IsThrottled(queue))
- return;
-
- budget_pool_controller_->BlockQueue(now, queue);
-}
-
-void BudgetPool::RemoveQueue(base::TimeTicks now, TaskQueue* queue) {
- budget_pool_controller_->RemoveQueueFromBudgetPool(queue, this);
- associated_task_queues_.erase(queue);
-
- if (!is_enabled_ || !budget_pool_controller_->IsThrottled(queue))
- return;
-
- budget_pool_controller_->UnblockQueue(now, queue);
-}
-
-void BudgetPool::EnableThrottling(LazyNow* lazy_now) {
- if (is_enabled_)
- return;
- is_enabled_ = true;
-
- TRACE_EVENT0("renderer.scheduler", "BudgetPool_EnableThrottling");
-
- BlockThrottledQueues(lazy_now->Now());
-}
-
-void BudgetPool::DisableThrottling(LazyNow* lazy_now) {
- if (!is_enabled_)
- return;
- is_enabled_ = false;
-
- TRACE_EVENT0("renderer.scheduler", "BudgetPool_DisableThrottling");
-
- for (TaskQueue* queue : associated_task_queues_) {
- if (!budget_pool_controller_->IsThrottled(queue))
- continue;
-
- budget_pool_controller_->UnblockQueue(lazy_now->Now(), queue);
- }
-
- // TODO(altimin): We need to disable TimeBudgetQueues here or they will
- // regenerate extra time budget when they are disabled.
-}
-
-bool BudgetPool::IsThrottlingEnabled() const {
- return is_enabled_;
-}
-
-void BudgetPool::Close() {
- DCHECK_EQ(0u, associated_task_queues_.size());
-
- budget_pool_controller_->UnregisterBudgetPool(this);
-}
-
-void BudgetPool::BlockThrottledQueues(base::TimeTicks now) {
- for (TaskQueue* queue : associated_task_queues_)
- budget_pool_controller_->BlockQueue(now, queue);
-}
-
CPUTimeBudgetPool::CPUTimeBudgetPool(
const char* name,
BudgetPoolController* budget_pool_controller,
@@ -117,6 +36,10 @@ CPUTimeBudgetPool::CPUTimeBudgetPool(
CPUTimeBudgetPool::~CPUTimeBudgetPool() {}
+QueueBlockType CPUTimeBudgetPool::GetBlockType() const {
+ return QueueBlockType::kAllTasks;
+}
+
void CPUTimeBudgetPool::SetMaxBudgetLevel(
base::TimeTicks now,
base::Optional<base::TimeDelta> max_budget_level) {
@@ -159,11 +82,13 @@ void CPUTimeBudgetPool::SetReportingCallback(
reporting_callback_ = reporting_callback;
}
-bool CPUTimeBudgetPool::HasEnoughBudgetToRun(base::TimeTicks now) {
- return now >= GetNextAllowedRunTime();
+bool CPUTimeBudgetPool::CanRunTasksAt(base::TimeTicks moment,
+ bool is_wake_up) const {
+ return moment >= GetNextAllowedRunTime(moment);
}
-base::TimeTicks CPUTimeBudgetPool::GetNextAllowedRunTime() {
+base::TimeTicks CPUTimeBudgetPool::GetNextAllowedRunTime(
+ base::TimeTicks desired_run_time) const {
if (!is_enabled_ || current_budget_level_.InMicroseconds() >= 0) {
return last_checkpoint_;
} else {
@@ -174,7 +99,8 @@ base::TimeTicks CPUTimeBudgetPool::GetNextAllowedRunTime() {
}
}
-void CPUTimeBudgetPool::RecordTaskRunTime(base::TimeTicks start_time,
+void CPUTimeBudgetPool::RecordTaskRunTime(TaskQueue* queue,
+ base::TimeTicks start_time,
base::TimeTicks end_time) {
DCHECK_LE(start_time, end_time);
Advance(end_time);
@@ -188,8 +114,20 @@ void CPUTimeBudgetPool::RecordTaskRunTime(base::TimeTicks start_time,
reporting_callback_.Run(-current_budget_level_ / cpu_percentage_);
}
}
+
+ if (current_budget_level_.InSecondsF() < 0)
+ BlockThrottledQueues(end_time);
}
+void CPUTimeBudgetPool::OnQueueNextWakeUpChanged(
+ TaskQueue* queue,
+ base::TimeTicks now,
+ base::TimeTicks desired_run_time) {
+ budget_pool_controller_->UpdateQueueThrottlingState(now, queue);
+}
+
+void CPUTimeBudgetPool::OnWakeUp(base::TimeTicks now) {}
+
void CPUTimeBudgetPool::AsValueInto(base::trace_event::TracedValue* state,
base::TimeTicks now) const {
state->BeginDictionary(name_);

Powered by Google App Engine
This is Rietveld 408576698