diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/platform/scheduler/worker/worker_scheduler_unittest.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/platform/scheduler/worker/worker_scheduler_unittest.cc | 54 |
1 files changed, 44 insertions, 10 deletions
diff --git a/chromium/third_party/blink/renderer/platform/scheduler/worker/worker_scheduler_unittest.cc b/chromium/third_party/blink/renderer/platform/scheduler/worker/worker_scheduler_unittest.cc index 0f12381be8a..5b65ecb6dba 100644 --- a/chromium/third_party/blink/renderer/platform/scheduler/worker/worker_scheduler_unittest.cc +++ b/chromium/third_party/blink/renderer/platform/scheduler/worker/worker_scheduler_unittest.cc @@ -71,8 +71,8 @@ class WorkerSchedulerForTest : public WorkerScheduler { WorkerThreadSchedulerForTest* thread_scheduler) : WorkerScheduler(thread_scheduler, nullptr) {} - using WorkerScheduler::UnthrottleableTaskQueue; using WorkerScheduler::ThrottleableTaskQueue; + using WorkerScheduler::UnpausableTaskQueue; }; class WorkerSchedulerTest : public testing::Test { @@ -113,10 +113,10 @@ class WorkerSchedulerTest : public testing::Test { // Helper for posting a task. void PostTestTask(std::vector<std::string>* run_order, - const std::string& task_descriptor) { - worker_scheduler_->GetTaskRunner(TaskType::kInternalTest) - ->PostTask(FROM_HERE, - WTF::Bind(&AppendToVectorTestTask, + const std::string& task_descriptor, + TaskType task_type) { + worker_scheduler_->GetTaskRunner(task_type)->PostTask( + FROM_HERE, WTF::Bind(&AppendToVectorTestTask, WTF::Unretained(run_order), task_descriptor)); } @@ -131,18 +131,18 @@ class WorkerSchedulerTest : public testing::Test { TEST_F(WorkerSchedulerTest, TestPostTasks) { std::vector<std::string> run_order; - PostTestTask(&run_order, "T1"); - PostTestTask(&run_order, "T2"); + PostTestTask(&run_order, "T1", TaskType::kInternalTest); + PostTestTask(&run_order, "T2", TaskType::kInternalTest); RunUntilIdle(); - PostTestTask(&run_order, "T3"); + PostTestTask(&run_order, "T3", TaskType::kInternalTest); RunUntilIdle(); EXPECT_THAT(run_order, testing::ElementsAre("T1", "T2", "T3")); // Tasks should not run after the scheduler is disposed of. worker_scheduler_->Dispose(); run_order.clear(); - PostTestTask(&run_order, "T4"); - PostTestTask(&run_order, "T5"); + PostTestTask(&run_order, "T4", TaskType::kInternalTest); + PostTestTask(&run_order, "T5", TaskType::kInternalTest); RunUntilIdle(); EXPECT_TRUE(run_order.empty()); @@ -268,6 +268,40 @@ TEST_F(WorkerSchedulerTest, base::TimeTicks() + base::TimeDelta::FromSeconds(41))); } +TEST_F(WorkerSchedulerTest, PausableTasks) { + std::vector<std::string> run_order; + auto pause_handle = worker_scheduler_->Pause(); + // Tests interlacing pausable, throttable and unpausable tasks and + // ensures that the pausable & throttable tasks don't run when paused. + // Throttable + PostTestTask(&run_order, "T1", TaskType::kJavascriptTimer); + // Pausable + PostTestTask(&run_order, "T2", TaskType::kNetworking); + // Unpausable + PostTestTask(&run_order, "T3", TaskType::kInternalTest); + RunUntilIdle(); + EXPECT_THAT(run_order, testing::ElementsAre("T3")); + pause_handle.reset(); + RunUntilIdle(); + + EXPECT_THAT(run_order, testing::ElementsAre("T3", "T1", "T2")); +} + +TEST_F(WorkerSchedulerTest, NestedPauseHandlesTasks) { + std::vector<std::string> run_order; + auto pause_handle = worker_scheduler_->Pause(); + { + auto pause_handle2 = worker_scheduler_->Pause(); + PostTestTask(&run_order, "T1", TaskType::kJavascriptTimer); + PostTestTask(&run_order, "T2", TaskType::kNetworking); + } + RunUntilIdle(); + EXPECT_EQ(0u, run_order.size()); + pause_handle.reset(); + RunUntilIdle(); + EXPECT_THAT(run_order, testing::ElementsAre("T1", "T2")); +} + } // namespace worker_scheduler_unittest } // namespace scheduler } // namespace blink |