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

Unified Diff: components/scheduler/child/worker_scheduler_impl_unittest.cc

Issue 1151353003: [scheduler]: Avoid waking up the scheduler to end long idle periods. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@end_idle_sync_2
Patch Set: Fix Win for realz hopefully... Created 5 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: components/scheduler/child/worker_scheduler_impl_unittest.cc
diff --git a/components/scheduler/child/worker_scheduler_impl_unittest.cc b/components/scheduler/child/worker_scheduler_impl_unittest.cc
index c9f34dbcb4fc10b5ea14e16df98ba82f4a8d039f..2518ae3972c9369d07d154fd1a736b3fef861787 100644
--- a/components/scheduler/child/worker_scheduler_impl_unittest.cc
+++ b/components/scheduler/child/worker_scheduler_impl_unittest.cc
@@ -26,13 +26,6 @@ int TimeTicksToIntMs(const base::TimeTicks& time) {
return static_cast<int>((time - base::TimeTicks()).InMilliseconds());
}
-void WakeUpTask(std::vector<std::string>* timeline, cc::TestNowSource* clock) {
- if (timeline) {
- timeline->push_back(base::StringPrintf("run WakeUpTask @ %d",
- TimeTicksToIntMs(clock->Now())));
- }
-}
-
void RecordTimelineTask(std::vector<std::string>* timeline,
cc::TestNowSource* clock) {
timeline->push_back(base::StringPrintf("run RecordTimelineTask @ %d",
@@ -144,17 +137,6 @@ class WorkerSchedulerImplTest : public testing::Test {
}
}
- void InitAndPostDelayedWakeupTask() {
- Init();
- // WorkerSchedulerImpl::Init causes a delayed task to be posted on the
- // after wakeup control runner. We need a task to wake the system up
- // AFTER the delay for this has expired.
- default_task_runner_->PostDelayedTask(
- FROM_HERE, base::Bind(&WakeUpTask, base::Unretained(timeline_),
- base::Unretained(clock_.get())),
- base::TimeDelta::FromMilliseconds(100));
- }
-
// Helper for posting several tasks of specific types. |task_descriptor| is a
// string with space delimited task identifiers. The first letter of each
// task identifier specifies the task type:
@@ -202,7 +184,7 @@ class WorkerSchedulerImplTest : public testing::Test {
};
TEST_F(WorkerSchedulerImplTest, TestPostDefaultTask) {
- InitAndPostDelayedWakeupTask();
+ Init();
std::vector<std::string> run_order;
PostTestTasks(&run_order, "D1 D2 D3 D4");
@@ -214,7 +196,7 @@ TEST_F(WorkerSchedulerImplTest, TestPostDefaultTask) {
}
TEST_F(WorkerSchedulerImplTest, TestPostIdleTask) {
- InitAndPostDelayedWakeupTask();
+ Init();
std::vector<std::string> run_order;
PostTestTasks(&run_order, "I1");
@@ -223,17 +205,8 @@ TEST_F(WorkerSchedulerImplTest, TestPostIdleTask) {
EXPECT_THAT(run_order, testing::ElementsAre(std::string("I1")));
}
-TEST_F(WorkerSchedulerImplTest, TestPostIdleTask_NoWakeup) {
- Init();
- std::vector<std::string> run_order;
- PostTestTasks(&run_order, "I1");
-
- RunUntilIdle();
- EXPECT_TRUE(run_order.empty());
-}
-
TEST_F(WorkerSchedulerImplTest, TestPostDefaultAndIdleTasks) {
- InitAndPostDelayedWakeupTask();
+ Init();
std::vector<std::string> run_order;
PostTestTasks(&run_order, "I1 D2 D3 D4");
@@ -244,22 +217,8 @@ TEST_F(WorkerSchedulerImplTest, TestPostDefaultAndIdleTasks) {
std::string("D4"), std::string("I1")));
}
-TEST_F(WorkerSchedulerImplTest, TestPostIdleTaskWithWakeupNeeded_NoWakeup) {
- InitAndPostDelayedWakeupTask();
-
- RunUntilIdle();
- // The delayed call to EnableLongIdlePeriod happened and it posted a call to
- // EnableLongIdlePeriod on the after wakeup control queue.
-
- std::vector<std::string> run_order;
- PostTestTasks(&run_order, "I1");
-
- RunUntilIdle();
- EXPECT_TRUE(run_order.empty());
-}
-
TEST_F(WorkerSchedulerImplTest, TestPostDefaultDelayedAndIdleTasks) {
- InitAndPostDelayedWakeupTask();
+ Init();
std::vector<std::string> run_order;
PostTestTasks(&run_order, "I1 D2 D3 D4");
@@ -275,17 +234,46 @@ TEST_F(WorkerSchedulerImplTest, TestPostDefaultDelayedAndIdleTasks) {
std::string("DELAYED")));
}
+TEST_F(WorkerSchedulerImplTest, TestIdleTaskWhenIsNotQuiescent) {
+ std::vector<std::string> timeline;
+ RecordTimelineEvents(&timeline);
+ Init();
+
+ timeline.push_back("Post default task");
+ // Post a delayed task timed to occur mid way during the long idle period.
+ default_task_runner_->PostTask(
+ FROM_HERE, base::Bind(&RecordTimelineTask, base::Unretained(&timeline),
+ base::Unretained(clock_.get())));
+ RunUntilIdle();
+
+ timeline.push_back("Post idle task");
+ idle_task_runner_->PostIdleTask(FROM_HERE,
+ base::Bind(&TimelineIdleTestTask, &timeline));
+
+ RunUntilIdle();
+
+ std::string expected_timeline[] = {"CanEnterLongIdlePeriod @ 5",
+ "Post default task",
+ "run RecordTimelineTask @ 5",
+ "Post idle task",
+ "IsNotQuiescent @ 5",
+ "CanEnterLongIdlePeriod @ 305",
+ "run TimelineIdleTestTask deadline 355"};
+
+ EXPECT_THAT(timeline, ElementsAreArray(expected_timeline));
+}
+
TEST_F(WorkerSchedulerImplTest, TestIdleDeadlineWithPendingDelayedTask) {
std::vector<std::string> timeline;
RecordTimelineEvents(&timeline);
- InitAndPostDelayedWakeupTask();
+ Init();
timeline.push_back("Post delayed and idle tasks");
// Post a delayed task timed to occur mid way during the long idle period.
default_task_runner_->PostDelayedTask(
FROM_HERE, base::Bind(&RecordTimelineTask, base::Unretained(&timeline),
base::Unretained(clock_.get())),
- base::TimeDelta::FromMilliseconds(420));
+ base::TimeDelta::FromMilliseconds(20));
idle_task_runner_->PostIdleTask(FROM_HERE,
base::Bind(&TimelineIdleTestTask, &timeline));
@@ -294,11 +282,9 @@ TEST_F(WorkerSchedulerImplTest, TestIdleDeadlineWithPendingDelayedTask) {
std::string expected_timeline[] = {
"CanEnterLongIdlePeriod @ 5",
"Post delayed and idle tasks",
- "IsNotQuiescent @ 105",
- "CanEnterLongIdlePeriod @ 405",
- "run TimelineIdleTestTask deadline 425", // Note the short 20ms deadline.
- "CanEnterLongIdlePeriod @ 425",
- "run RecordTimelineTask @ 425"};
+ "CanEnterLongIdlePeriod @ 5",
+ "run TimelineIdleTestTask deadline 25", // Note the short 20ms deadline.
+ "run RecordTimelineTask @ 25"};
EXPECT_THAT(timeline, ElementsAreArray(expected_timeline));
}
@@ -307,14 +293,14 @@ TEST_F(WorkerSchedulerImplTest,
TestIdleDeadlineWithPendingDelayedTaskFarInTheFuture) {
std::vector<std::string> timeline;
RecordTimelineEvents(&timeline);
- InitAndPostDelayedWakeupTask();
+ Init();
timeline.push_back("Post delayed and idle tasks");
// Post a delayed task timed to occur well after the long idle period.
default_task_runner_->PostDelayedTask(
FROM_HERE, base::Bind(&RecordTimelineTask, base::Unretained(&timeline),
base::Unretained(clock_.get())),
- base::TimeDelta::FromMilliseconds(1000));
+ base::TimeDelta::FromMilliseconds(500));
idle_task_runner_->PostIdleTask(FROM_HERE,
base::Bind(&TimelineIdleTestTask, &timeline));
@@ -323,43 +309,19 @@ TEST_F(WorkerSchedulerImplTest,
std::string expected_timeline[] = {
"CanEnterLongIdlePeriod @ 5",
"Post delayed and idle tasks",
- "IsNotQuiescent @ 105",
- "CanEnterLongIdlePeriod @ 405",
- "run TimelineIdleTestTask deadline 455", // Note the full 50ms deadline.
- "CanEnterLongIdlePeriod @ 455",
- "run RecordTimelineTask @ 1005"};
+ "CanEnterLongIdlePeriod @ 5",
+ "run TimelineIdleTestTask deadline 55", // Note the full 50ms deadline.
+ "run RecordTimelineTask @ 505"};
EXPECT_THAT(timeline, ElementsAreArray(expected_timeline));
}
-TEST_F(WorkerSchedulerImplTest,
- TestPostIdleTaskAfterRunningUntilIdle_NoWakeUp) {
- InitAndPostDelayedWakeupTask();
-
- default_task_runner_->PostDelayedTask(
- FROM_HERE, base::Bind(&NopTask), base::TimeDelta::FromMilliseconds(1000));
- RunUntilIdle();
-
- // The delayed call to EnableLongIdlePeriod happened and it posted a call to
- // EnableLongIdlePeriod on the after wakeup control queue. Without an other
- // non-idle task posted, the idle tasks won't run.
- std::vector<std::string> run_order;
- PostTestTasks(&run_order, "I1 I2");
-
- RunUntilIdle();
- EXPECT_TRUE(run_order.empty());
-}
-
-TEST_F(WorkerSchedulerImplTest,
- TestPostIdleTaskAfterRunningUntilIdle_WithWakeUp) {
- InitAndPostDelayedWakeupTask();
+TEST_F(WorkerSchedulerImplTest, TestPostIdleTaskAfterRunningUntilIdle) {
+ Init();
default_task_runner_->PostDelayedTask(
FROM_HERE, base::Bind(&NopTask), base::TimeDelta::FromMilliseconds(1000));
RunUntilIdle();
- // The delayed call to EnableLongIdlePeriod happened and it posted a call to
- // EnableLongIdlePeriod on the after wakeup control queue. Without an other
- // non-idle task posted, the idle tasks won't run.
std::vector<std::string> run_order;
PostTestTasks(&run_order, "I1 I2 D3");
@@ -417,8 +379,7 @@ TEST_F(WorkerSchedulerImplTest, TestLongIdlePeriodTimeline) {
"IsNotQuiescent @ 55", // NOTE we have to wait for quiescence.
"CanEnterLongIdlePeriod @ 355",
"run TimelineIdleTestTask deadline 405",
- "CanEnterLongIdlePeriod @ 405",
- "RunUntilIdle end @ 455"};
+ "RunUntilIdle end @ 355"};
EXPECT_THAT(timeline, ElementsAreArray(expected_timeline));
}
« no previous file with comments | « components/scheduler/child/worker_scheduler_impl.cc ('k') | components/scheduler/renderer/renderer_scheduler_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698