Commit 67b84b88 authored by Sami Kyostila's avatar Sami Kyostila Committed by Commit Bot

base/task: Require traits to be given to PostDelayedTask

This change makes it a requirement to pass in TaskTraits to
base::PostDelayedTask(), bringing it in line with the other task posting
APIs.

This patch has no functional changes.

Bug: 968047
Change-Id: I67daf3c1560f9c386578d458a45a3c791786141e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1985773
Commit-Queue: Sami Kyöstilä <skyostil@chromium.org>
Reviewed-by: default avatarGabriel Charette <gab@chromium.org>
Auto-Submit: Sami Kyöstilä <skyostil@chromium.org>
Cr-Commit-Position: refs/heads/master@{#742786}
parent 49fe87ef
...@@ -71,13 +71,9 @@ TaskExecutor* GetTaskExecutorForTraits(const TaskTraits& traits) { ...@@ -71,13 +71,9 @@ TaskExecutor* GetTaskExecutorForTraits(const TaskTraits& traits) {
} // namespace } // namespace
bool PostTask(const Location& from_here, OnceClosure task) { bool PostTask(const Location& from_here, OnceClosure task) {
return PostDelayedTask(from_here, std::move(task), TimeDelta()); // TODO(skyostil): Make task traits required here too.
} return PostDelayedTask(from_here, {ThreadPool()}, std::move(task),
TimeDelta());
bool PostDelayedTask(const Location& from_here,
OnceClosure task,
TimeDelta delay) {
return PostDelayedTask(from_here, {ThreadPool()}, std::move(task), delay);
} }
bool PostTaskAndReply(const Location& from_here, bool PostTaskAndReply(const Location& from_here,
......
...@@ -106,14 +106,6 @@ inline bool PostTask(OnceClosure task, ...@@ -106,14 +106,6 @@ inline bool PostTask(OnceClosure task,
return PostTask(from_here, std::move(task)); return PostTask(from_here, std::move(task));
} }
// Equivalent to calling PostDelayedTask with default TaskTraits.
//
// Use PostDelayedTask to specify a BEST_EFFORT priority if the task doesn't
// have to run as soon as |delay| expires.
BASE_EXPORT bool PostDelayedTask(const Location& from_here,
OnceClosure task,
TimeDelta delay);
// Equivalent to calling PostTaskAndReply with default TaskTraits. // Equivalent to calling PostTaskAndReply with default TaskTraits.
BASE_EXPORT bool PostTaskAndReply(const Location& from_here, BASE_EXPORT bool PostTaskAndReply(const Location& from_here,
OnceClosure task, OnceClosure task,
......
...@@ -16,8 +16,8 @@ ...@@ -16,8 +16,8 @@
#include "base/run_loop.h" #include "base/run_loop.h"
#include "base/synchronization/atomic_flag.h" #include "base/synchronization/atomic_flag.h"
#include "base/synchronization/waitable_event.h" #include "base/synchronization/waitable_event.h"
#include "base/task/post_task.h"
#include "base/task/sequence_manager/time_domain.h" #include "base/task/sequence_manager/time_domain.h"
#include "base/task/thread_pool.h"
#include "base/task/thread_pool/thread_pool_instance.h" #include "base/task/thread_pool/thread_pool_instance.h"
#include "base/test/bind_test_util.h" #include "base/test/bind_test_util.h"
#include "base/test/gtest_util.h" #include "base/test/gtest_util.h"
...@@ -81,19 +81,21 @@ void RunUntilIdleTest( ...@@ -81,19 +81,21 @@ void RunUntilIdleTest(
Unretained(&first_main_thread_task_ran))); Unretained(&first_main_thread_task_ran)));
AtomicFlag first_thread_pool_task_ran; AtomicFlag first_thread_pool_task_ran;
PostTask(FROM_HERE, BindOnce(&VerifyRunUntilIdleDidNotReturnAndSetFlag, ThreadPool::PostTask(FROM_HERE,
Unretained(&run_until_idle_returned), BindOnce(&VerifyRunUntilIdleDidNotReturnAndSetFlag,
Unretained(&first_thread_pool_task_ran))); Unretained(&run_until_idle_returned),
Unretained(&first_thread_pool_task_ran)));
AtomicFlag second_thread_pool_task_ran; AtomicFlag second_thread_pool_task_ran;
AtomicFlag second_main_thread_task_ran; AtomicFlag second_main_thread_task_ran;
PostTaskAndReply(FROM_HERE, ThreadPool::PostTaskAndReply(
BindOnce(&VerifyRunUntilIdleDidNotReturnAndSetFlag, FROM_HERE,
Unretained(&run_until_idle_returned), BindOnce(&VerifyRunUntilIdleDidNotReturnAndSetFlag,
Unretained(&second_thread_pool_task_ran)), Unretained(&run_until_idle_returned),
BindOnce(&VerifyRunUntilIdleDidNotReturnAndSetFlag, Unretained(&second_thread_pool_task_ran)),
Unretained(&run_until_idle_returned), BindOnce(&VerifyRunUntilIdleDidNotReturnAndSetFlag,
Unretained(&second_main_thread_task_ran))); Unretained(&run_until_idle_returned),
Unretained(&second_main_thread_task_ran)));
task_environment.RunUntilIdle(); task_environment.RunUntilIdle();
run_until_idle_returned.Set(); run_until_idle_returned.Set();
...@@ -121,21 +123,23 @@ TEST_F(TaskEnvironmentTest, QueuedTasksDoNotRunOutsideOfRunUntilIdle) { ...@@ -121,21 +123,23 @@ TEST_F(TaskEnvironmentTest, QueuedTasksDoNotRunOutsideOfRunUntilIdle) {
TaskEnvironment::ThreadPoolExecutionMode::QUEUED); TaskEnvironment::ThreadPoolExecutionMode::QUEUED);
AtomicFlag run_until_idle_called; AtomicFlag run_until_idle_called;
PostTask(FROM_HERE, BindOnce( ThreadPool::PostTask(FROM_HERE,
[](AtomicFlag* run_until_idle_called) { BindOnce(
EXPECT_TRUE(run_until_idle_called->IsSet()); [](AtomicFlag* run_until_idle_called) {
}, EXPECT_TRUE(run_until_idle_called->IsSet());
Unretained(&run_until_idle_called))); },
Unretained(&run_until_idle_called)));
PlatformThread::Sleep(TestTimeouts::tiny_timeout()); PlatformThread::Sleep(TestTimeouts::tiny_timeout());
run_until_idle_called.Set(); run_until_idle_called.Set();
task_environment.RunUntilIdle(); task_environment.RunUntilIdle();
AtomicFlag other_run_until_idle_called; AtomicFlag other_run_until_idle_called;
PostTask(FROM_HERE, BindOnce( ThreadPool::PostTask(FROM_HERE,
[](AtomicFlag* other_run_until_idle_called) { BindOnce(
EXPECT_TRUE(other_run_until_idle_called->IsSet()); [](AtomicFlag* other_run_until_idle_called) {
}, EXPECT_TRUE(other_run_until_idle_called->IsSet());
Unretained(&other_run_until_idle_called))); },
Unretained(&other_run_until_idle_called)));
PlatformThread::Sleep(TestTimeouts::tiny_timeout()); PlatformThread::Sleep(TestTimeouts::tiny_timeout());
other_run_until_idle_called.Set(); other_run_until_idle_called.Set();
task_environment.RunUntilIdle(); task_environment.RunUntilIdle();
...@@ -148,7 +152,8 @@ TEST_F(TaskEnvironmentTest, AsyncTasksRunAsTheyArePosted) { ...@@ -148,7 +152,8 @@ TEST_F(TaskEnvironmentTest, AsyncTasksRunAsTheyArePosted) {
TaskEnvironment::ThreadPoolExecutionMode::ASYNC); TaskEnvironment::ThreadPoolExecutionMode::ASYNC);
WaitableEvent task_ran; WaitableEvent task_ran;
PostTask(FROM_HERE, BindOnce(&WaitableEvent::Signal, Unretained(&task_ran))); ThreadPool::PostTask(FROM_HERE,
BindOnce(&WaitableEvent::Signal, Unretained(&task_ran)));
task_ran.Wait(); task_ran.Wait();
} }
...@@ -162,7 +167,8 @@ TEST_F(TaskEnvironmentTest, AsyncTasksRunAsTheyArePostedAfterRunUntilIdle) { ...@@ -162,7 +167,8 @@ TEST_F(TaskEnvironmentTest, AsyncTasksRunAsTheyArePostedAfterRunUntilIdle) {
task_environment.RunUntilIdle(); task_environment.RunUntilIdle();
WaitableEvent task_ran; WaitableEvent task_ran;
PostTask(FROM_HERE, BindOnce(&WaitableEvent::Signal, Unretained(&task_ran))); ThreadPool::PostTask(FROM_HERE,
BindOnce(&WaitableEvent::Signal, Unretained(&task_ran)));
task_ran.Wait(); task_ran.Wait();
} }
...@@ -184,13 +190,14 @@ void DelayedTasksTest(TaskEnvironment::TimeSource time_source) { ...@@ -184,13 +190,14 @@ void DelayedTasksTest(TaskEnvironment::TimeSource time_source) {
}, },
Unretained(&counter)), Unretained(&counter)),
kShortTaskDelay); kShortTaskDelay);
PostDelayedTask(FROM_HERE, ThreadPool::PostDelayedTask(FROM_HERE,
BindOnce( BindOnce(
[](subtle::Atomic32* counter) { [](subtle::Atomic32* counter) {
subtle::NoBarrier_AtomicIncrement(counter, 128); subtle::NoBarrier_AtomicIncrement(counter,
}, 128);
Unretained(&counter)), },
kShortTaskDelay); Unretained(&counter)),
kShortTaskDelay);
constexpr base::TimeDelta kLongTaskDelay = TimeDelta::FromDays(7); constexpr base::TimeDelta kLongTaskDelay = TimeDelta::FromDays(7);
// Same as first task, longer delays to exercise // Same as first task, longer delays to exercise
...@@ -211,13 +218,14 @@ void DelayedTasksTest(TaskEnvironment::TimeSource time_source) { ...@@ -211,13 +218,14 @@ void DelayedTasksTest(TaskEnvironment::TimeSource time_source) {
}, },
Unretained(&counter)), Unretained(&counter)),
kLongTaskDelay); kLongTaskDelay);
PostDelayedTask(FROM_HERE, ThreadPool::PostDelayedTask(FROM_HERE,
BindOnce( BindOnce(
[](subtle::Atomic32* counter) { [](subtle::Atomic32* counter) {
subtle::NoBarrier_AtomicIncrement(counter, 256); subtle::NoBarrier_AtomicIncrement(counter,
}, 256);
Unretained(&counter)), },
kLongTaskDelay * 2); Unretained(&counter)),
kLongTaskDelay * 2);
ThreadTaskRunnerHandle::Get()->PostDelayedTask( ThreadTaskRunnerHandle::Get()->PostDelayedTask(
FROM_HERE, FROM_HERE,
BindOnce( BindOnce(
...@@ -226,13 +234,14 @@ void DelayedTasksTest(TaskEnvironment::TimeSource time_source) { ...@@ -226,13 +234,14 @@ void DelayedTasksTest(TaskEnvironment::TimeSource time_source) {
}, },
Unretained(&counter)), Unretained(&counter)),
kLongTaskDelay * 3); kLongTaskDelay * 3);
PostDelayedTask(FROM_HERE, ThreadPool::PostDelayedTask(FROM_HERE,
BindOnce( BindOnce(
[](subtle::Atomic32* counter) { [](subtle::Atomic32* counter) {
subtle::NoBarrier_AtomicIncrement(counter, 1024); subtle::NoBarrier_AtomicIncrement(counter,
}, 1024);
Unretained(&counter)), },
kLongTaskDelay * 4); Unretained(&counter)),
kLongTaskDelay * 4);
ThreadTaskRunnerHandle::Get()->PostTask( ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE, BindOnce( FROM_HERE, BindOnce(
...@@ -240,11 +249,12 @@ void DelayedTasksTest(TaskEnvironment::TimeSource time_source) { ...@@ -240,11 +249,12 @@ void DelayedTasksTest(TaskEnvironment::TimeSource time_source) {
subtle::NoBarrier_AtomicIncrement(counter, 1); subtle::NoBarrier_AtomicIncrement(counter, 1);
}, },
Unretained(&counter))); Unretained(&counter)));
PostTask(FROM_HERE, BindOnce( ThreadPool::PostTask(FROM_HERE, BindOnce(
[](subtle::Atomic32* counter) { [](subtle::Atomic32* counter) {
subtle::NoBarrier_AtomicIncrement(counter, 2); subtle::NoBarrier_AtomicIncrement(
}, counter, 2);
Unretained(&counter))); },
Unretained(&counter)));
// This expectation will fail flakily if the preceding PostTask() is executed // This expectation will fail flakily if the preceding PostTask() is executed
// asynchronously, indicating a problem with the QUEUED execution mode. // asynchronously, indicating a problem with the QUEUED execution mode.
...@@ -546,9 +556,9 @@ TEST_F(TaskEnvironmentTest, FastForwardZero) { ...@@ -546,9 +556,9 @@ TEST_F(TaskEnvironmentTest, FastForwardZero) {
FROM_HERE, BindLambdaForTesting([&]() { FROM_HERE, BindLambdaForTesting([&]() {
run_count.fetch_add(1, std::memory_order_relaxed); run_count.fetch_add(1, std::memory_order_relaxed);
})); }));
base::PostTask(FROM_HERE, BindLambdaForTesting([&]() { ThreadPool::PostTask(FROM_HERE, BindLambdaForTesting([&]() {
run_count.fetch_add(1, std::memory_order_relaxed); run_count.fetch_add(1, std::memory_order_relaxed);
})); }));
} }
task_environment.FastForwardBy(base::TimeDelta()); task_environment.FastForwardBy(base::TimeDelta());
...@@ -639,7 +649,7 @@ TEST_F(TaskEnvironmentTest, ...@@ -639,7 +649,7 @@ TEST_F(TaskEnvironmentTest,
// races. // races.
base::WaitableEvent first_reply_is_incoming; base::WaitableEvent first_reply_is_incoming;
for (int i = 0; i < 1000; ++i) { for (int i = 0; i < 1000; ++i) {
base::PostTaskAndReply( ThreadPool::PostTaskAndReply(
FROM_HERE, FROM_HERE,
BindOnce(&WaitableEvent::Signal, Unretained(&first_reply_is_incoming)), BindOnce(&WaitableEvent::Signal, Unretained(&first_reply_is_incoming)),
DoNothing()); DoNothing());
...@@ -716,8 +726,8 @@ TEST_F(TaskEnvironmentTest, MultiThreadedMockTime) { ...@@ -716,8 +726,8 @@ TEST_F(TaskEnvironmentTest, MultiThreadedMockTime) {
ThreadTaskRunnerHandle::Get()->PostDelayedTask( ThreadTaskRunnerHandle::Get()->PostDelayedTask(
FROM_HERE, post_main_thread_delayed_task, kOneMs); FROM_HERE, post_main_thread_delayed_task, kOneMs);
CreateSequencedTaskRunner({ThreadPool()}) ThreadPool::CreateSequencedTaskRunner({})->PostDelayedTask(
->PostDelayedTask(FROM_HERE, post_thread_pool_delayed_task, kOneMs); FROM_HERE, post_thread_pool_delayed_task, kOneMs);
task_environment.FastForwardUntilNoTasksRemain(); task_environment.FastForwardUntilNoTasksRemain();
...@@ -739,8 +749,8 @@ TEST_F(TaskEnvironmentTest, MultiThreadedFastForwardBy) { ...@@ -739,8 +749,8 @@ TEST_F(TaskEnvironmentTest, MultiThreadedFastForwardBy) {
ThreadTaskRunnerHandle::Get()->PostDelayedTask( ThreadTaskRunnerHandle::Get()->PostDelayedTask(
FROM_HERE, MakeExpectedNotRunClosure(FROM_HERE), FROM_HERE, MakeExpectedNotRunClosure(FROM_HERE),
TimeDelta::FromSeconds(5)); TimeDelta::FromSeconds(5));
PostDelayedTask(FROM_HERE, {ThreadPool()}, MakeExpectedRunClosure(FROM_HERE), ThreadPool::PostDelayedTask(FROM_HERE, {}, MakeExpectedRunClosure(FROM_HERE),
TimeDelta::FromSeconds(1)); TimeDelta::FromSeconds(1));
task_environment.FastForwardBy(TimeDelta::FromSeconds(2)); task_environment.FastForwardBy(TimeDelta::FromSeconds(2));
EXPECT_EQ(task_environment.NowTicks(), EXPECT_EQ(task_environment.NowTicks(),
...@@ -761,11 +771,11 @@ TEST_F(TaskEnvironmentTest, MultiThreadedMockTimeAndThreadPoolQueuedMode) { ...@@ -761,11 +771,11 @@ TEST_F(TaskEnvironmentTest, MultiThreadedMockTimeAndThreadPoolQueuedMode) {
// Neither of these should run automatically per // Neither of these should run automatically per
// ThreadPoolExecutionMode::QUEUED. // ThreadPoolExecutionMode::QUEUED.
PostTask(FROM_HERE, {ThreadPool()}, ThreadPool::PostTask(FROM_HERE,
BindLambdaForTesting([&]() { count += 128; })); BindLambdaForTesting([&]() { count += 128; }));
PostDelayedTask(FROM_HERE, {ThreadPool()}, ThreadPool::PostDelayedTask(FROM_HERE, {},
BindLambdaForTesting([&]() { count += 256; }), BindLambdaForTesting([&]() { count += 256; }),
TimeDelta::FromSeconds(5)); TimeDelta::FromSeconds(5));
// Time should auto-advance to +500s in RunLoop::Run() without having to run // Time should auto-advance to +500s in RunLoop::Run() without having to run
// the above forcefully QUEUED tasks. // the above forcefully QUEUED tasks.
...@@ -797,9 +807,9 @@ TEST_F(TaskEnvironmentTest, MultiThreadedMockTimeAndThreadPoolQueuedMode) { ...@@ -797,9 +807,9 @@ TEST_F(TaskEnvironmentTest, MultiThreadedMockTimeAndThreadPoolQueuedMode) {
TimeDelta::FromSeconds(500)); TimeDelta::FromSeconds(500));
// Test advancing time to a QUEUED task in the future. // Test advancing time to a QUEUED task in the future.
PostDelayedTask(FROM_HERE, {ThreadPool()}, ThreadPool::PostDelayedTask(FROM_HERE,
BindLambdaForTesting([&]() { count += 512; }), BindLambdaForTesting([&]() { count += 512; }),
TimeDelta::FromSeconds(5)); TimeDelta::FromSeconds(5));
task_environment.FastForwardBy(TimeDelta::FromSeconds(7)); task_environment.FastForwardBy(TimeDelta::FromSeconds(7));
expected_value += 512; expected_value += 512;
EXPECT_EQ(expected_value, count); EXPECT_EQ(expected_value, count);
...@@ -808,8 +818,8 @@ TEST_F(TaskEnvironmentTest, MultiThreadedMockTimeAndThreadPoolQueuedMode) { ...@@ -808,8 +818,8 @@ TEST_F(TaskEnvironmentTest, MultiThreadedMockTimeAndThreadPoolQueuedMode) {
// Confirm that QUEUED mode is still active after the above fast forwarding // Confirm that QUEUED mode is still active after the above fast forwarding
// (only the main thread task should run from RunLoop). // (only the main thread task should run from RunLoop).
PostTask(FROM_HERE, {ThreadPool()}, ThreadPool::PostTask(FROM_HERE,
BindLambdaForTesting([&]() { count += 1024; })); BindLambdaForTesting([&]() { count += 1024; }));
ThreadTaskRunnerHandle::Get()->PostTask( ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE, BindLambdaForTesting([&]() { count += 2048; })); FROM_HERE, BindLambdaForTesting([&]() { count += 2048; }));
PlatformThread::Sleep(TimeDelta::FromMilliseconds(1)); PlatformThread::Sleep(TimeDelta::FromMilliseconds(1));
...@@ -832,8 +842,8 @@ TEST_F(TaskEnvironmentTest, MultiThreadedMockTimeAndThreadPoolQueuedMode) { ...@@ -832,8 +842,8 @@ TEST_F(TaskEnvironmentTest, MultiThreadedMockTimeAndThreadPoolQueuedMode) {
// and com_init_util.h's assertions are happy in unit tests). // and com_init_util.h's assertions are happy in unit tests).
TEST_F(TaskEnvironmentTest, ThreadPoolPoolAllowsMTA) { TEST_F(TaskEnvironmentTest, ThreadPoolPoolAllowsMTA) {
TaskEnvironment task_environment; TaskEnvironment task_environment;
PostTask(FROM_HERE, ThreadPool::PostTask(FROM_HERE, BindOnce(&win::AssertComApartmentType,
BindOnce(&win::AssertComApartmentType, win::ComApartmentType::MTA)); win::ComApartmentType::MTA));
task_environment.RunUntilIdle(); task_environment.RunUntilIdle();
} }
#endif // defined(OS_WIN) #endif // defined(OS_WIN)
...@@ -1160,7 +1170,7 @@ TEST_F(TaskEnvironmentTest, SingleThread) { ...@@ -1160,7 +1170,7 @@ TEST_F(TaskEnvironmentTest, SingleThread) {
RunLoop().RunUntilIdle(); RunLoop().RunUntilIdle();
EXPECT_TRUE(ran); EXPECT_TRUE(ran);
EXPECT_DCHECK_DEATH(PostTask(FROM_HERE, {ThreadPool()}, DoNothing())); EXPECT_DCHECK_DEATH(ThreadPool::PostTask(FROM_HERE, {}, DoNothing()));
} }
// Verify that traits other than ThreadingMode can be applied to // Verify that traits other than ThreadingMode can be applied to
...@@ -1215,9 +1225,9 @@ void InitializeCOMOnWorker( ...@@ -1215,9 +1225,9 @@ void InitializeCOMOnWorker(
TaskEnvironment::ThreadPoolCOMEnvironment com_environment, TaskEnvironment::ThreadPoolCOMEnvironment com_environment,
ApartmentType apartment_type) { ApartmentType apartment_type) {
TaskEnvironment task_environment(com_environment); TaskEnvironment task_environment(com_environment);
PostTask(FROM_HERE, BindOnce(apartment_type == ApartmentType::kSTA ThreadPool::PostTask(FROM_HERE, BindOnce(apartment_type == ApartmentType::kSTA
? &InitializeSTAApartment ? &InitializeSTAApartment
: &InitializeMTAApartment)); : &InitializeMTAApartment));
task_environment.RunUntilIdle(); task_environment.RunUntilIdle();
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment