summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/platform/scheduler/worker/worker_scheduler_unittest.cc
diff options
context:
space:
mode:
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.cc54
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