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

Unified Diff: base/task_scheduler/task_tracker_unittest.cc

Issue 1911023002: TaskScheduler: Add TaskRunnerHandle support to TaskScheduler tasks (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@c1_1876363004_STTR
Patch Set: rebase and more test logic in TestTaskFactory to cover SchedulerThreadPoolImpl changes Created 4 years, 8 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: base/task_scheduler/task_tracker_unittest.cc
diff --git a/base/task_scheduler/task_tracker_unittest.cc b/base/task_scheduler/task_tracker_unittest.cc
index c5e0c034c02618d47258d6b9907b063f9ec09349..3ce60b6893f1720bd71251263f0ccc889fe437a5 100644
--- a/base/task_scheduler/task_tracker_unittest.cc
+++ b/base/task_scheduler/task_tracker_unittest.cc
@@ -10,11 +10,18 @@
#include "base/logging.h"
#include "base/macros.h"
#include "base/memory/ptr_util.h"
+#include "base/memory/ref_counted.h"
+#include "base/sequenced_task_runner.h"
+#include "base/single_thread_task_runner.h"
#include "base/synchronization/waitable_event.h"
+#include "base/task_runner.h"
fdoray 2016/04/27 18:11:21 not used?
gab 2016/04/27 20:21:40 Done.
#include "base/task_scheduler/task.h"
#include "base/task_scheduler/task_traits.h"
#include "base/task_scheduler/test_utils.h"
+#include "base/test/test_simple_task_runner.h"
+#include "base/thread_task_runner_handle.h"
#include "base/threading/platform_thread.h"
+#include "base/threading/sequenced_task_runner_handle.h"
#include "base/threading/simple_thread.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -49,7 +56,7 @@ class ThreadCallingShutdown : public SimpleThread {
// Runs a task asynchronously.
class ThreadRunningTask : public SimpleThread {
public:
- explicit ThreadRunningTask(TaskTracker* tracker, const Task* task)
+ ThreadRunningTask(TaskTracker* tracker, const Task* task)
: SimpleThread("ThreadRunningTask"), tracker_(tracker), task_(task) {}
private:
@@ -283,6 +290,86 @@ TEST_P(TaskSchedulerTaskTrackerTest, WillPostAfterShutdown) {
}
}
+void RunTaskRunnerHandleVerificationTask(TaskTracker* tracker,
+ const Task* verify_task) {
+ // Pretend |verify_task| is posted to respect TaskTracker's contract.
+ EXPECT_TRUE(tracker->WillPostTask(verify_task));
+
+ // Confirm that the test conditions are right (no TaskRunnerHandles set
+ // already).
+ EXPECT_FALSE(ThreadTaskRunnerHandle::IsSet());
+ EXPECT_FALSE(SequencedTaskRunnerHandle::IsSet());
+
+ tracker->RunTask(verify_task);
+
+ // TaskRunnerHandle state is reset outside of task's scope.
+ EXPECT_FALSE(ThreadTaskRunnerHandle::IsSet());
+ EXPECT_FALSE(SequencedTaskRunnerHandle::IsSet());
+}
+
+void VerifyNoTaskRunnerHandle() {
+ EXPECT_FALSE(ThreadTaskRunnerHandle::IsSet());
+ EXPECT_FALSE(SequencedTaskRunnerHandle::IsSet());
+}
+
+TEST_P(TaskSchedulerTaskTrackerTest, TaskRunnerHandleIsNotSetOnParallel) {
+ // Create a task that will verify that TaskRunnerHandles are not set in its
+ // scope per no TaskRunner ref being set to it.
+ std::unique_ptr<Task> verify_task(
+ new Task(FROM_HERE, Bind(&VerifyNoTaskRunnerHandle),
+ TaskTraits().WithShutdownBehavior(GetParam()), TimeDelta()));
+
+ RunTaskRunnerHandleVerificationTask(&tracker_, verify_task.get());
+}
+
+void VerifySequencedTaskRunnerHandle(
+ const SequencedTaskRunner* expected_task_runner) {
+ EXPECT_FALSE(ThreadTaskRunnerHandle::IsSet());
+ EXPECT_TRUE(SequencedTaskRunnerHandle::IsSet());
+ EXPECT_EQ(expected_task_runner, SequencedTaskRunnerHandle::Get());
+}
+
+TEST_P(TaskSchedulerTaskTrackerTest,
+ SequencedTaskRunnerHandleIsSetOnSequenced) {
+ scoped_refptr<SequencedTaskRunner> test_task_runner(new TestSimpleTaskRunner);
+
+ // Create a task that will verify that SequencedTaskRunnerHandle is properly
+ // set to |test_task_runner| in its scope per |sequenced_task_runner_ref|
+ // being set to it.
+ std::unique_ptr<Task> verify_task(
+ new Task(FROM_HERE, Bind(&VerifySequencedTaskRunnerHandle,
+ base::Unretained(test_task_runner.get())),
+ TaskTraits().WithShutdownBehavior(GetParam()), TimeDelta()));
+ verify_task->sequenced_task_runner_ref = test_task_runner;
+
+ RunTaskRunnerHandleVerificationTask(&tracker_, verify_task.get());
+}
+
+void VerifyThreadTaskRunnerHandle(
+ const SingleThreadTaskRunner* expected_task_runner) {
+ EXPECT_TRUE(ThreadTaskRunnerHandle::IsSet());
+ // SequencedTaskRunnerHandle inherits ThreadTaskRunnerHandle for thread.
+ EXPECT_TRUE(SequencedTaskRunnerHandle::IsSet());
+ EXPECT_EQ(expected_task_runner, ThreadTaskRunnerHandle::Get());
+}
+
+TEST_P(TaskSchedulerTaskTrackerTest,
+ ThreadTaskRunnerHandleIsSetOnSingleThreaded) {
+ scoped_refptr<SingleThreadTaskRunner> test_task_runner(
+ new TestSimpleTaskRunner);
+
+ // Create a task that will verify that ThreadTaskRunnerHandle is properly set
+ // to |test_task_runner| in its scope per |single_thread_task_runner_ref|
+ // being set on it.
+ std::unique_ptr<Task> verify_task(
+ new Task(FROM_HERE, Bind(&VerifyThreadTaskRunnerHandle,
+ base::Unretained(test_task_runner.get())),
+ TaskTraits().WithShutdownBehavior(GetParam()), TimeDelta()));
+ verify_task->single_thread_task_runner_ref = test_task_runner;
+
+ RunTaskRunnerHandleVerificationTask(&tracker_, verify_task.get());
+}
+
INSTANTIATE_TEST_CASE_P(
ContinueOnShutdown,
TaskSchedulerTaskTrackerTest,

Powered by Google App Engine
This is Rietveld 408576698