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

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

Issue 2893363002: Revert of [scheduler] Move task alignment into WakeUpBudgetPool. (Closed)
Patch Set: 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/wake_up_budget_pool.cc
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/wake_up_budget_pool.cc b/third_party/WebKit/Source/platform/scheduler/renderer/wake_up_budget_pool.cc
index 24d1720112a78fd04daaa558277a4abb19f60694..9d9274c8875552621d958c3da52c44cc8ab7edb4 100644
--- a/third_party/WebKit/Source/platform/scheduler/renderer/wake_up_budget_pool.cc
+++ b/third_party/WebKit/Source/platform/scheduler/renderer/wake_up_budget_pool.cc
@@ -5,8 +5,6 @@
#include "platform/scheduler/renderer/wake_up_budget_pool.h"
#include <cstdint>
-
-#include <iostream> // FIXME
#include "platform/scheduler/base/trace_helper.h"
#include "platform/scheduler/renderer/task_queue_throttler.h"
@@ -17,8 +15,7 @@
WakeUpBudgetPool::WakeUpBudgetPool(const char* name,
BudgetPoolController* budget_pool_controller,
base::TimeTicks now)
- : BudgetPool(name, budget_pool_controller),
- wake_up_interval_(base::TimeDelta::FromSecondsD(1.0)) {}
+ : BudgetPool(name, budget_pool_controller), wakeups_per_second_(1) {}
WakeUpBudgetPool::~WakeUpBudgetPool() {}
@@ -26,12 +23,12 @@
return QueueBlockType::kNewTasksOnly;
}
-void WakeUpBudgetPool::SetWakeUpRate(double wake_ups_per_second) {
- wake_up_interval_ = base::TimeDelta::FromSecondsD(1 / wake_ups_per_second);
+void WakeUpBudgetPool::SetWakeUpRate(double wakeups_per_second) {
+ wakeups_per_second_ = wakeups_per_second;
}
void WakeUpBudgetPool::SetWakeUpDuration(base::TimeDelta duration) {
- wake_up_duration_ = duration;
+ wakeup_duration_ = duration;
}
void WakeUpBudgetPool::RecordTaskRunTime(TaskQueue* queue,
@@ -40,42 +37,39 @@
budget_pool_controller_->UpdateQueueThrottlingState(end_time, queue);
}
+base::Optional<base::TimeTicks> WakeUpBudgetPool::NextWakeUp() const {
+ if (!last_wakeup_)
+ return base::nullopt;
+ // Subtract 1 microsecond to work with time alignment in task queue throttler.
+ // This is needed due to alignment mechanism in task queue throttler --
+ // whole seconds need to be aligned to the next second to deal with immediate
+ // tasks correctly. By subtracting 1 microsecond we ensure that next wakeup
+ // gets aligned to a correct time.
+ return last_wakeup_.value() +
+ base::TimeDelta::FromSeconds(1 / wakeups_per_second_) -
+ base::TimeDelta::FromMicroseconds(1);
+}
+
bool WakeUpBudgetPool::CanRunTasksAt(base::TimeTicks moment,
bool is_wake_up) const {
- if (!last_wake_up_)
+ if (!last_wakeup_)
return false;
// |is_wake_up| flag means that we're in the beginning of the wake-up and
// |OnWakeUp| has just been called. This is needed to support backwards
- // compability with old throttling mechanism (when |wake_up_duration| is zero)
+ // compability with old throttling mechanism (when |wakeup_duration| is zero)
// and allow only one task to run.
- if (last_wake_up_ == moment && is_wake_up)
+ if (last_wakeup_ == moment && is_wake_up)
return true;
- return moment < last_wake_up_.value() + wake_up_duration_;
+ return moment < last_wakeup_.value() + wakeup_duration_;
}
-
-namespace {
-
-// Wrapper around base::TimeTicks::SnappedToNextTick which ensures that
-// the returned point is strictly in the future.
-base::TimeTicks SnapToNextTickStrict(base::TimeTicks moment,
- base::TimeDelta interval) {
- base::TimeTicks snapped =
- moment.SnappedToNextTick(base::TimeTicks(), interval);
- if (snapped == moment)
- return moment + interval;
- return snapped;
-}
-
-} // namespace
base::TimeTicks WakeUpBudgetPool::GetNextAllowedRunTime(
base::TimeTicks desired_run_time) const {
- if (!last_wake_up_)
- return SnapToNextTickStrict(desired_run_time, wake_up_interval_);
- if (desired_run_time < last_wake_up_.value() + wake_up_duration_)
+ if (!last_wakeup_)
return desired_run_time;
- return SnapToNextTickStrict(std::max(desired_run_time, last_wake_up_.value()),
- wake_up_interval_);
+ if (desired_run_time < last_wakeup_.value() + wakeup_duration_)
+ return desired_run_time;
+ return std::max(desired_run_time, NextWakeUp().value());
}
void WakeUpBudgetPool::OnQueueNextWakeUpChanged(
@@ -86,7 +80,7 @@
}
void WakeUpBudgetPool::OnWakeUp(base::TimeTicks now) {
- last_wake_up_ = now;
+ last_wakeup_ = now;
}
void WakeUpBudgetPool::AsValueInto(base::trace_event::TracedValue* state,
@@ -94,13 +88,11 @@
state->BeginDictionary(name_);
state->SetString("name", name_);
- state->SetDouble("wake_up_interval_in_seconds",
- wake_up_interval_.InSecondsF());
- state->SetDouble("wake_up_duration_in_seconds",
- wake_up_duration_.InSecondsF());
- if (last_wake_up_) {
- state->SetDouble("last_wake_up_seconds_ago",
- (now - last_wake_up_.value()).InSecondsF());
+ state->SetDouble("wakeups_per_second_rate", wakeups_per_second_);
+ state->SetDouble("wakeup_duration_in_seconds", wakeup_duration_.InSecondsF());
+ if (last_wakeup_) {
+ state->SetDouble("last_wakeup_seconds_ago",
+ (now - last_wakeup_.value()).InSecondsF());
}
state->SetBoolean("is_enabled", is_enabled_);

Powered by Google App Engine
This is Rietveld 408576698