Skip to content

Commit

Permalink
[scheduler] Enable wake-up based throttling by default
Browse files Browse the repository at this point in the history
Enable wake-up based throttling by default with 3ms wake-up window.

R=alexclarke@chromium.org
BUG=699541

Change-Id: I9c8c273e43f812e1b296368cd227813c795d4d8d
Reviewed-on: https://chromium-review.googlesource.com/1070142
Commit-Queue: Alexander Timin <altimin@chromium.org>
Reviewed-by: Alex Clarke <alexclarke@chromium.org>
Cr-Commit-Position: refs/heads/master@{#561535}
  • Loading branch information
Alexander Timin authored and Commit Bot committed May 24, 2018
1 parent 7c29671 commit f456c79
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 20 deletions.
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
<!DOCTYPE html>

<!-- Measures the delay between two successive zero-delay timeouts. -->
<!-- Measures the delay between two successive short-delay timeouts.
Note that scheduler allows a small number of quick tasks to run without
throttling, so the delay is 20ms to avoid this.
-->
<script>
addEventListener('message', (e) => {
setTimeout(() => {
let start = performance.now();
setTimeout(() => {
let end = performance.now();
e.source.postMessage(end - start, e.origin);
}, 0);
}, 20);
}, 0);
});
</script>
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,8 @@ class TaskQueueThrottlerTest : public testing::Test {
base::sequence_manager::TaskQueueManagerForTest::Create(
nullptr, mock_task_runner_, clock_.get()),
base::nullopt));
scheduler_->GetWakeUpBudgetPoolForTesting()->SetWakeUpDuration(
base::TimeDelta());
task_queue_throttler_ = scheduler_->task_queue_throttler();
timer_queue_ = scheduler_->NewTimerTaskQueue(
MainThreadTaskQueue::QueueType::kFrameThrottleable, nullptr);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,8 @@ const double kSamplingRateForTaskUkm = 0.0001;
const char kWakeUpThrottlingTrial[] = "RendererSchedulerWakeUpThrottling";
const char kWakeUpDurationParam[] = "wake_up_duration_ms";

constexpr base::TimeDelta kDefaultWakeUpDuration = base::TimeDelta();
constexpr base::TimeDelta kDefaultWakeUpDuration =
base::TimeDelta::FromMilliseconds(3);

base::TimeDelta GetWakeUpDuration() {
int duration_ms;
Expand Down Expand Up @@ -1829,6 +1830,7 @@ IdleTimeEstimator* MainThreadSchedulerImpl::GetIdleTimeEstimatorForTesting() {
}

WakeUpBudgetPool* MainThreadSchedulerImpl::GetWakeUpBudgetPoolForTesting() {
InitWakeUpBudgetPoolIfNeeded();
return main_thread_only().wake_up_budget_pool;
}

Expand Down Expand Up @@ -2704,17 +2706,22 @@ MainThreadSchedulerImpl::GetVirtualTimeDomain() {

void MainThreadSchedulerImpl::AddQueueToWakeUpBudgetPool(
MainThreadTaskQueue* queue) {
if (!main_thread_only().wake_up_budget_pool) {
main_thread_only().wake_up_budget_pool =
task_queue_throttler()->CreateWakeUpBudgetPool("renderer_wake_up_pool");
main_thread_only().wake_up_budget_pool->SetWakeUpRate(1);
main_thread_only().wake_up_budget_pool->SetWakeUpDuration(
GetWakeUpDuration());
}
InitWakeUpBudgetPoolIfNeeded();
main_thread_only().wake_up_budget_pool->AddQueue(tick_clock()->NowTicks(),
queue);
}

void MainThreadSchedulerImpl::InitWakeUpBudgetPoolIfNeeded() {
if (main_thread_only().wake_up_budget_pool)
return;

main_thread_only().wake_up_budget_pool =
task_queue_throttler()->CreateWakeUpBudgetPool("renderer_wake_up_pool");
main_thread_only().wake_up_budget_pool->SetWakeUpRate(1);
main_thread_only().wake_up_budget_pool->SetWakeUpDuration(
GetWakeUpDuration());
}

TimeDomain* MainThreadSchedulerImpl::GetActiveTimeDomain() {
if (main_thread_only().use_virtual_time) {
return GetVirtualTimeDomain();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -653,6 +653,8 @@ class PLATFORM_EXPORT MainThreadSchedulerImpl
PageSchedulerImpl* page_scheduler,
size_t page_schedulers_to_attribute);

void InitWakeUpBudgetPoolIfNeeded();

// Indicates that scheduler has been shutdown.
// It should be accessed only on the main thread, but couldn't be a member
// of MainThreadOnly struct because last might be destructed before we
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -168,8 +168,8 @@ TEST_F(PageSchedulerImplTest, RepeatingTimer_PageInBackgroundThenForeground) {
ThrottleableTaskQueue()->PostDelayedTask(
FROM_HERE,
MakeRepeatingTask(ThrottleableTaskQueue(), &run_count,
base::TimeDelta::FromMilliseconds(1)),
base::TimeDelta::FromMilliseconds(1));
base::TimeDelta::FromMilliseconds(20)),
base::TimeDelta::FromMilliseconds(20));

mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1));
EXPECT_EQ(1, run_count);
Expand All @@ -180,9 +180,7 @@ TEST_F(PageSchedulerImplTest, RepeatingTimer_PageInBackgroundThenForeground) {

run_count = 0;
mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1));
EXPECT_EQ(1001, run_count); // Note we end up running 1001 here because the
// task was posted while throttled with a delay of 1ms so the first task was
// due to run before the 1s period started.
EXPECT_EQ(50, run_count);
}

TEST_F(PageSchedulerImplTest, RepeatingLoadingTask_PageInBackground) {
Expand Down Expand Up @@ -214,18 +212,18 @@ TEST_F(PageSchedulerImplTest, RepeatingTimers_OneBackgroundOneForeground) {
ThrottleableTaskQueue()->PostDelayedTask(
FROM_HERE,
MakeRepeatingTask(ThrottleableTaskQueue(), &run_count1,
base::TimeDelta::FromMilliseconds(1)),
base::TimeDelta::FromMilliseconds(1));
base::TimeDelta::FromMilliseconds(20)),
base::TimeDelta::FromMilliseconds(20));
ThrottleableTaskQueueForScheduler(frame_scheduler2.get())
->PostDelayedTask(
FROM_HERE,
MakeRepeatingTask(
ThrottleableTaskQueueForScheduler(frame_scheduler2.get()),
&run_count2, base::TimeDelta::FromMilliseconds(1)),
base::TimeDelta::FromMilliseconds(1));
&run_count2, base::TimeDelta::FromMilliseconds(20)),
base::TimeDelta::FromMilliseconds(20));

mock_task_runner_->RunForPeriod(base::TimeDelta::FromSeconds(1));
EXPECT_EQ(1000, run_count1);
EXPECT_EQ(50, run_count1);
EXPECT_EQ(1, run_count2);
}

Expand Down

0 comments on commit f456c79

Please sign in to comment.