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

Unified Diff: base/threading/sequenced_worker_pool_unittest.cc

Issue 2367843002: Support SequencedWorkerPool::FlushForTesting() with redirection to TaskScheduler. (Closed)
Patch Set: CR danakj #10 Created 4 years, 3 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
« no previous file with comments | « base/threading/sequenced_worker_pool.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/threading/sequenced_worker_pool_unittest.cc
diff --git a/base/threading/sequenced_worker_pool_unittest.cc b/base/threading/sequenced_worker_pool_unittest.cc
index acf8c39eb2342c73db428dbf2aad917c82b77827..64b57fb5a8333af4e4db274b9d6630acca166302 100644
--- a/base/threading/sequenced_worker_pool_unittest.cc
+++ b/base/threading/sequenced_worker_pool_unittest.cc
@@ -244,7 +244,7 @@ class SequencedWorkerPoolTest
tracker_(new TestTracker) {}
void SetUp() override {
- if (GetParam() == SequencedWorkerPoolRedirection::TO_TASK_SCHEDULER) {
+ if (RedirectedToTaskScheduler()) {
std::vector<SchedulerWorkerPoolParams> worker_pool_params;
worker_pool_params.emplace_back(
"SchedulerWorkerPoolName", ThreadPriority::NORMAL,
@@ -265,12 +265,16 @@ class SequencedWorkerPoolTest
// TaskScheduler.
DeletePool();
- if (GetParam() == SequencedWorkerPoolRedirection::TO_TASK_SCHEDULER) {
+ if (RedirectedToTaskScheduler()) {
SequencedWorkerPool::ResetRedirectToTaskSchedulerForProcessForTesting();
DeleteTaskScheduler();
}
}
+ bool RedirectedToTaskScheduler() const {
+ return GetParam() == SequencedWorkerPoolRedirection::TO_TASK_SCHEDULER;
+ }
+
const scoped_refptr<SequencedWorkerPool>& pool() {
return pool_owner_->pool();
}
@@ -393,7 +397,7 @@ TEST_P(SequencedWorkerPoolTest, DelayedTaskDuringShutdown) {
// Shutdown the pool.
pool()->Shutdown();
- if (GetParam() == SequencedWorkerPoolRedirection::TO_TASK_SCHEDULER)
+ if (RedirectedToTaskScheduler())
TaskScheduler::GetInstance()->Shutdown();
// Verify that we didn't block until the task was due.
@@ -402,13 +406,13 @@ TEST_P(SequencedWorkerPoolTest, DelayedTaskDuringShutdown) {
// TaskScheduler shouldn't delete the delayed task before it is itself
// deleted. SequencedWorkerPool starts deleting tasks as soon as its
// Shutdown() method is called (see SequencedWorkerPool::Inner::GetWork).
- if (GetParam() == SequencedWorkerPoolRedirection::TO_TASK_SCHEDULER)
+ if (RedirectedToTaskScheduler())
EXPECT_FALSE(deleted_flag->data);
// Verify that the delayed task is deleted once the SequencedWorkerPool (and
// the TaskScheduler when applicable) have been deleted.
DeletePool();
- if (GetParam() == SequencedWorkerPoolRedirection::TO_TASK_SCHEDULER)
+ if (RedirectedToTaskScheduler())
DeleteTaskScheduler();
EXPECT_TRUE(deleted_flag->data);
}
@@ -596,7 +600,7 @@ TEST_P(SequencedWorkerPoolTest, AllowsAfterShutdown) {
// TaskScheduler allows tasks to be posted during shutdown. However, since it
// doesn't provide a way to run a callback from inside its Shutdown() method,
// it would be hard to make this test work with redirection enabled.
- if (GetParam() == SequencedWorkerPoolRedirection::TO_TASK_SCHEDULER)
+ if (RedirectedToTaskScheduler())
return;
// Test that <n> new blocking tasks are allowed provided they're posted
@@ -650,7 +654,7 @@ TEST_P(SequencedWorkerPoolTest,
// TaskScheduler allows tasks to be posted during shutdown. However, since it
// doesn't provide a way to run a callback from inside its Shutdown() method,
// it would be hard to make this test work with redirection enabled.
- if (GetParam() == SequencedWorkerPoolRedirection::TO_TASK_SCHEDULER)
+ if (RedirectedToTaskScheduler())
return;
EnsureAllWorkersCreated();
@@ -686,7 +690,7 @@ TEST_P(SequencedWorkerPoolTest, DiscardOnShutdown) {
// CONTINUE_ON_SHUTDOWN tasks and runs BLOCK_SHUTDOWN tasks. However, since it
// doesn't provide a way to run a callback from inside its Shutdown() method,
// it would be hard to make this test work with redirection enabled.
- if (GetParam() == SequencedWorkerPoolRedirection::TO_TASK_SCHEDULER)
+ if (RedirectedToTaskScheduler())
return;
// Start tasks to take all the threads and block them.
@@ -759,7 +763,7 @@ TEST_P(SequencedWorkerPoolTest, ContinueOnShutdown) {
// This should not block. If this test hangs, it means it failed.
pool()->Shutdown();
- if (GetParam() == SequencedWorkerPoolRedirection::TO_TASK_SCHEDULER)
+ if (RedirectedToTaskScheduler())
TaskScheduler::GetInstance()->Shutdown();
// The task should not have completed yet.
@@ -789,7 +793,7 @@ TEST_P(SequencedWorkerPoolTest, SkipOnShutdown) {
// TaskScheduler correctly handles SKIP_ON_SHUTDOWN tasks. However, since it
// doesn't provide a way to run a callback from inside its Shutdown() method,
// it would be hard to make this test work with redirection enabled.
- if (GetParam() == SequencedWorkerPoolRedirection::TO_TASK_SCHEDULER)
+ if (RedirectedToTaskScheduler())
return;
// Start tasks to take all the threads and block them.
@@ -844,7 +848,7 @@ TEST_P(SequencedWorkerPoolTest, SkipOnShutdown) {
// triggered. This is a regression test for http://crbug.com/117469.
TEST_P(SequencedWorkerPoolTest, SpuriousWorkSignal) {
// This test doesn't apply when tasks are redirected to the TaskScheduler.
- if (GetParam() == SequencedWorkerPoolRedirection::TO_TASK_SCHEDULER)
+ if (RedirectedToTaskScheduler())
return;
EnsureAllWorkersCreated();
@@ -856,7 +860,7 @@ TEST_P(SequencedWorkerPoolTest, SpuriousWorkSignal) {
}
void VerifyRunsTasksOnCurrentThread(
- SequencedWorkerPoolRedirection redirection,
+ bool redirected_to_task_scheduler,
scoped_refptr<TaskRunner> test_positive_task_runner,
scoped_refptr<TaskRunner> test_negative_task_runner,
SequencedWorkerPool* pool,
@@ -867,7 +871,7 @@ void VerifyRunsTasksOnCurrentThread(
// Tasks posted to different SequencedWorkerPools may run on the same
// TaskScheduler threads.
- if (redirection == SequencedWorkerPoolRedirection::TO_TASK_SCHEDULER)
+ if (redirected_to_task_scheduler)
EXPECT_TRUE(unused_pool->RunsTasksOnCurrentThread());
else
EXPECT_FALSE(unused_pool->RunsTasksOnCurrentThread());
@@ -898,20 +902,22 @@ TEST_P(SequencedWorkerPoolTest, RunsTasksOnCurrentThread) {
// - pool()->RunsTasksOnCurrentThread() returns true.
// - unused_pool_owner.pool()->RunsTasksOnCurrentThread() returns false.
sequenced_task_runner_1->PostTask(
- FROM_HERE, base::Bind(&VerifyRunsTasksOnCurrentThread, GetParam(),
- sequenced_task_runner_1, sequenced_task_runner_2,
- base::RetainedRef(pool()),
- base::RetainedRef(unused_pool_owner.pool())));
+ FROM_HERE,
+ base::Bind(&VerifyRunsTasksOnCurrentThread, RedirectedToTaskScheduler(),
+ sequenced_task_runner_1, sequenced_task_runner_2,
+ base::RetainedRef(pool()),
+ base::RetainedRef(unused_pool_owner.pool())));
// From a task posted to |unsequenced_task_runner|:
// - unsequenced_task_runner->RunsTasksOnCurrentThread() returns true.
// - sequenced_task_runner_1->RunsTasksOnCurrentThread() returns false.
// - pool()->RunsTasksOnCurrentThread() returns true.
// - unused_pool_owner.pool()->RunsTasksOnCurrentThread() returns false.
unsequenced_task_runner->PostTask(
- FROM_HERE, base::Bind(&VerifyRunsTasksOnCurrentThread, GetParam(),
- unsequenced_task_runner, sequenced_task_runner_1,
- base::RetainedRef(pool()),
- base::RetainedRef(unused_pool_owner.pool())));
+ FROM_HERE,
+ base::Bind(&VerifyRunsTasksOnCurrentThread, RedirectedToTaskScheduler(),
+ unsequenced_task_runner, sequenced_task_runner_1,
+ base::RetainedRef(pool()),
+ base::RetainedRef(unused_pool_owner.pool())));
}
// Checks that tasks are destroyed in the right context during shutdown. If a
@@ -940,7 +946,7 @@ TEST_P(SequencedWorkerPoolTest,
// (PostRepostingBlockingTask). It can't run when tasks are redirected to
// TaskScheduler because TaskScheduler doesn't provide a way to limit the
// number of BLOCK_SHUTDOWN tasks posted during shutdown.
- if (GetParam() == SequencedWorkerPoolRedirection::TO_TASK_SCHEDULER)
+ if (RedirectedToTaskScheduler())
return;
const std::string sequence_token_name("name");
@@ -961,11 +967,6 @@ TEST_P(SequencedWorkerPoolTest,
// Verify that FlushForTesting works as intended.
TEST_P(SequencedWorkerPoolTest, FlushForTesting) {
- // FlushForTesting() can't be called when tasks are redirected to the
- // TaskScheduler.
- if (GetParam() == SequencedWorkerPoolRedirection::TO_TASK_SCHEDULER)
- return;
-
// Should be fine to call on a new instance.
pool()->FlushForTesting();
@@ -991,8 +992,10 @@ TEST_P(SequencedWorkerPoolTest, FlushForTesting) {
// tracker.
EXPECT_FALSE(tracker()->HasOneRef());
pool()->FlushForTesting();
- EXPECT_TRUE(tracker()->HasOneRef());
EXPECT_EQ(1 + kNumFastTasks + 1 + 3, tracker()->GetTasksCompletedCount());
+ // TaskScheduler deletes unexecuted delayed tasks as part of ~TaskScheduler()
+ // instead of TaskScheduler::FlushForTesting().
+ EXPECT_EQ(!RedirectedToTaskScheduler(), tracker()->HasOneRef());
// Should be fine to call on an idle instance with all threads created, and
// spamming the method shouldn't deadlock or confuse the class.
@@ -1001,7 +1004,16 @@ TEST_P(SequencedWorkerPoolTest, FlushForTesting) {
// Should be fine to call after shutdown too.
pool()->Shutdown();
+ if (RedirectedToTaskScheduler())
+ TaskScheduler::GetInstance()->Shutdown();
pool()->FlushForTesting();
+
+ // Verify that all tasks are deleted once the SequencedWorkerPool and the
+ // TaskScheduler are deleted.
+ DeletePool();
+ if (RedirectedToTaskScheduler())
+ DeleteTaskScheduler();
+ EXPECT_TRUE(tracker()->HasOneRef());
}
namespace {
@@ -1026,7 +1038,7 @@ TEST_P(SequencedWorkerPoolTest, GetWorkerPoolAndSequenceTokenForCurrentThread) {
// SequencedWorkerPool when redirection to TaskScheduler is enabled. These
// methods are only used from SequencedTaskRunnerHandle and
// SequenceCheckerImpl which work fine in TaskScheduler.
- if (GetParam() == SequencedWorkerPoolRedirection::TO_TASK_SCHEDULER)
+ if (RedirectedToTaskScheduler())
return;
EnsureAllWorkersCreated();
« no previous file with comments | « base/threading/sequenced_worker_pool.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698