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

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

Issue 2778123003: [scheduler] Add WakeupBudgetPool. (Closed)
Patch Set: First meaningful version Created 3 years, 8 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/budget_pool_unittest.cc
diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/budget_pool_unittest.cc b/third_party/WebKit/Source/platform/scheduler/renderer/budget_pool_unittest.cc
index a02778d4a2388e0e17f4f089aadf983a1bf8ada2..16e3518e7d4b60a970ba9961cbb230e3443d1b0f 100644
--- a/third_party/WebKit/Source/platform/scheduler/renderer/budget_pool_unittest.cc
+++ b/third_party/WebKit/Source/platform/scheduler/renderer/budget_pool_unittest.cc
@@ -38,6 +38,7 @@ class BudgetPoolTest : public testing::Test {
mock_task_runner_, base::MakeUnique<TestTimeSource>(clock_.get()));
scheduler_.reset(new RendererSchedulerImpl(delegate_));
task_queue_throttler_ = scheduler_->task_queue_throttler();
+ time_zero_ = clock_->NowTicks();
alex clarke (OOO till 29th) 2017/04/21 09:14:19 I think start_time_ would be a better name.
altimin 2017/04/25 13:22:35 Done.
}
void TearDown() override {
@@ -45,12 +46,21 @@ class BudgetPoolTest : public testing::Test {
scheduler_.reset();
}
+ base::TimeTicks Milliseconds(int milliseconds) {
alex clarke (OOO till 29th) 2017/04/21 09:14:19 I'd prefer if this and the function below had an
altimin 2017/04/25 13:22:35 Done.
+ return time_zero_ + base::TimeDelta::FromMilliseconds(milliseconds);
+ }
+
+ base::TimeTicks Seconds(int seconds) {
+ return time_zero_ + base::TimeDelta::FromSeconds(seconds);
+ }
+
protected:
std::unique_ptr<base::SimpleTestTickClock> clock_;
scoped_refptr<cc::OrderedSimpleTaskRunner> mock_task_runner_;
scoped_refptr<SchedulerTqmDelegate> delegate_;
std::unique_ptr<RendererSchedulerImpl> scheduler_;
TaskQueueThrottler* task_queue_throttler_; // NOT OWNED
+ base::TimeTicks time_zero_;
DISALLOW_COPY_AND_ASSIGN(BudgetPoolTest);
};
@@ -63,29 +73,30 @@ TEST_F(BudgetPoolTest, CPUTimeBudgetPool) {
pool->SetTimeBudgetRecoveryRate(time_zero, 0.1);
- EXPECT_TRUE(pool->HasEnoughBudgetToRun(time_zero));
- EXPECT_EQ(time_zero, pool->GetNextAllowedRunTime());
+ EXPECT_TRUE(pool->CanRunTasksAt(time_zero));
+ EXPECT_EQ(time_zero, pool->GetNextAllowedRunTime(time_zero));
// Run an expensive task and make sure that we're throttled.
- pool->RecordTaskRunTime(time_zero,
+ pool->RecordTaskRunTime(nullptr, time_zero,
time_zero + base::TimeDelta::FromMilliseconds(100));
- EXPECT_FALSE(pool->HasEnoughBudgetToRun(
- time_zero + base::TimeDelta::FromMilliseconds(500)));
+ EXPECT_FALSE(
+ pool->CanRunTasksAt(time_zero + base::TimeDelta::FromMilliseconds(500)));
EXPECT_EQ(time_zero + base::TimeDelta::FromMilliseconds(1000),
- pool->GetNextAllowedRunTime());
- EXPECT_TRUE(pool->HasEnoughBudgetToRun(
- time_zero + base::TimeDelta::FromMilliseconds(1000)));
+ pool->GetNextAllowedRunTime(time_zero));
+ EXPECT_TRUE(
+ pool->CanRunTasksAt(time_zero + base::TimeDelta::FromMilliseconds(1000)));
// Run a cheap task and make sure that it doesn't affect anything.
- EXPECT_TRUE(pool->HasEnoughBudgetToRun(
- time_zero + base::TimeDelta::FromMilliseconds(2000)));
- pool->RecordTaskRunTime(time_zero + base::TimeDelta::FromMilliseconds(2000),
+ EXPECT_TRUE(
+ pool->CanRunTasksAt(time_zero + base::TimeDelta::FromMilliseconds(2000)));
+ pool->RecordTaskRunTime(nullptr,
+ time_zero + base::TimeDelta::FromMilliseconds(2000),
time_zero + base::TimeDelta::FromMilliseconds(2020));
- EXPECT_TRUE(pool->HasEnoughBudgetToRun(
- time_zero + base::TimeDelta::FromMilliseconds(2020)));
+ EXPECT_TRUE(
+ pool->CanRunTasksAt(time_zero + base::TimeDelta::FromMilliseconds(2020)));
EXPECT_EQ(time_zero + base::TimeDelta::FromMilliseconds(2020),
- pool->GetNextAllowedRunTime());
+ pool->GetNextAllowedRunTime(time_zero));
pool->Close();
}
@@ -100,29 +111,78 @@ TEST_F(BudgetPoolTest, CPUTimeBudgetPoolMinBudgetLevelToRun) {
base::TimeDelta::FromMilliseconds(10));
pool->SetTimeBudgetRecoveryRate(time_zero, 0.1);
- EXPECT_TRUE(pool->HasEnoughBudgetToRun(time_zero));
- EXPECT_EQ(time_zero, pool->GetNextAllowedRunTime());
+ EXPECT_TRUE(pool->CanRunTasksAt(time_zero));
+ EXPECT_EQ(time_zero, pool->GetNextAllowedRunTime(time_zero));
- pool->RecordTaskRunTime(time_zero,
+ pool->RecordTaskRunTime(nullptr, time_zero,
time_zero + base::TimeDelta::FromMilliseconds(10));
- EXPECT_FALSE(pool->HasEnoughBudgetToRun(
- time_zero + base::TimeDelta::FromMilliseconds(15)));
- EXPECT_FALSE(pool->HasEnoughBudgetToRun(
- time_zero + base::TimeDelta::FromMilliseconds(150)));
+ EXPECT_FALSE(
+ pool->CanRunTasksAt(time_zero + base::TimeDelta::FromMilliseconds(15)));
+ EXPECT_FALSE(
+ pool->CanRunTasksAt(time_zero + base::TimeDelta::FromMilliseconds(150)));
// We need to wait extra 100ms to get budget of 10ms.
EXPECT_EQ(time_zero + base::TimeDelta::FromMilliseconds(200),
- pool->GetNextAllowedRunTime());
+ pool->GetNextAllowedRunTime(time_zero));
- pool->RecordTaskRunTime(time_zero + base::TimeDelta::FromMilliseconds(200),
+ pool->RecordTaskRunTime(nullptr,
+ time_zero + base::TimeDelta::FromMilliseconds(200),
time_zero + base::TimeDelta::FromMilliseconds(205));
// We can run when budget is non-negative even when it less than 10ms.
EXPECT_EQ(time_zero + base::TimeDelta::FromMilliseconds(205),
- pool->GetNextAllowedRunTime());
+ pool->GetNextAllowedRunTime(time_zero));
- pool->RecordTaskRunTime(time_zero + base::TimeDelta::FromMilliseconds(205),
+ pool->RecordTaskRunTime(nullptr,
+ time_zero + base::TimeDelta::FromMilliseconds(205),
time_zero + base::TimeDelta::FromMilliseconds(215));
EXPECT_EQ(time_zero + base::TimeDelta::FromMilliseconds(350),
- pool->GetNextAllowedRunTime());
+ pool->GetNextAllowedRunTime(time_zero));
+}
+
+TEST_F(BudgetPoolTest, WakeupBudgetPool) {
+ WakeupBudgetPool* pool =
+ task_queue_throttler_->CreateWakeupBudgetPool("test");
+
+ scoped_refptr<TaskQueue> queue =
+ scheduler_->NewTimerTaskRunner(TaskQueue::QueueType::TEST);
+
+ pool->SetWakeupRate(time_zero_, 0.1);
+ pool->SetWakeupDuration(time_zero_, base::TimeDelta::FromMilliseconds(10));
+
+ EXPECT_TRUE(pool->CanRunTasksAt(Milliseconds(0)));
+ EXPECT_TRUE(pool->CanRunTasksAt(Milliseconds(5)));
+ EXPECT_TRUE(pool->CanRunTasksAt(Milliseconds(9)));
+ EXPECT_FALSE(pool->CanRunTasksAt(Milliseconds(10)));
+ EXPECT_FALSE(pool->CanRunTasksAt(Milliseconds(11)));
+
+ // GetNextAllowedRunTime should return the desired time when in the
+ // wakeup window and return the next wakeup otherwise.
+ EXPECT_EQ(time_zero_, pool->GetNextAllowedRunTime(time_zero_));
+ EXPECT_EQ(Seconds(10) - base::TimeDelta::FromMicroseconds(1),
+ pool->GetNextAllowedRunTime(Milliseconds(15)));
+
+ pool->RecordTaskRunTime(queue.get(), Milliseconds(5), Milliseconds(7));
+
+ // Make sure that nothing changes after a task inside wakeup window.
+ EXPECT_TRUE(pool->CanRunTasksAt(Milliseconds(0)));
+ EXPECT_TRUE(pool->CanRunTasksAt(Milliseconds(5)));
+ EXPECT_TRUE(pool->CanRunTasksAt(Milliseconds(9)));
+ EXPECT_FALSE(pool->CanRunTasksAt(Milliseconds(10)));
+ EXPECT_FALSE(pool->CanRunTasksAt(Milliseconds(11)));
+ EXPECT_EQ(time_zero_, pool->GetNextAllowedRunTime(time_zero_));
+ EXPECT_EQ(Seconds(10) - base::TimeDelta::FromMicroseconds(1),
+ pool->GetNextAllowedRunTime(Milliseconds(15)));
+
+ pool->OnWakeup(Milliseconds(12005));
+ pool->RecordTaskRunTime(queue.get(), Milliseconds(12005),
+ Milliseconds(12007));
+
+ EXPECT_TRUE(pool->CanRunTasksAt(Milliseconds(12005)));
+ EXPECT_TRUE(pool->CanRunTasksAt(Milliseconds(12007)));
+ EXPECT_TRUE(pool->CanRunTasksAt(Milliseconds(12014)));
+ EXPECT_FALSE(pool->CanRunTasksAt(Milliseconds(12015)));
+ EXPECT_FALSE(pool->CanRunTasksAt(Milliseconds(12016)));
+ EXPECT_EQ(Milliseconds(22005) - base::TimeDelta::FromMicroseconds(1),
+ pool->GetNextAllowedRunTime(Seconds(13)));
}
} // namespace scheduler

Powered by Google App Engine
This is Rietveld 408576698