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

Side by Side Diff: base/task_scheduler/task_tracker_unittest.cc

Issue 2076153002: [TaskScheduler] Support TaskRunnerHandles from parallel tasks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@mix_c_Ab
Patch Set: Created 4 years, 6 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 unified diff | Download patch
« no previous file with comments | « base/task_scheduler/task_tracker.cc ('k') | base/task_scheduler/test_task_factory.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/task_scheduler/task_tracker.h" 5 #include "base/task_scheduler/task_tracker.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/macros.h" 11 #include "base/macros.h"
12 #include "base/memory/ptr_util.h" 12 #include "base/memory/ptr_util.h"
13 #include "base/memory/ref_counted.h" 13 #include "base/memory/ref_counted.h"
14 #include "base/sequenced_task_runner.h" 14 #include "base/sequenced_task_runner.h"
15 #include "base/single_thread_task_runner.h" 15 #include "base/single_thread_task_runner.h"
16 #include "base/synchronization/waitable_event.h" 16 #include "base/synchronization/waitable_event.h"
17 #include "base/task_scheduler/task.h" 17 #include "base/task_scheduler/task.h"
18 #include "base/task_scheduler/task_traits.h" 18 #include "base/task_scheduler/task_traits.h"
19 #include "base/task_scheduler/test_utils.h" 19 #include "base/task_scheduler/test_utils.h"
20 #include "base/test/test_simple_task_runner.h" 20 #include "base/test/test_simple_task_runner.h"
21 #include "base/threading/platform_thread.h" 21 #include "base/threading/platform_thread.h"
22 #include "base/threading/sequenced_task_runner_handle.h"
23 #include "base/threading/simple_thread.h" 22 #include "base/threading/simple_thread.h"
23 #include "base/threading/task_runner_handle.h"
24 #include "base/threading/thread_restrictions.h" 24 #include "base/threading/thread_restrictions.h"
25 #include "base/threading/thread_task_runner_handle.h"
26 #include "testing/gtest/include/gtest/gtest.h" 25 #include "testing/gtest/include/gtest/gtest.h"
27 26
28 namespace base { 27 namespace base {
29 namespace internal { 28 namespace internal {
30 29
31 namespace { 30 namespace {
32 31
33 // Calls TaskTracker::Shutdown() asynchronously. 32 // Calls TaskTracker::Shutdown() asynchronously.
34 class ThreadCallingShutdown : public SimpleThread { 33 class ThreadCallingShutdown : public SimpleThread {
35 public: 34 public:
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 } 328 }
330 } 329 }
331 330
332 static void RunTaskRunnerHandleVerificationTask(TaskTracker* tracker, 331 static void RunTaskRunnerHandleVerificationTask(TaskTracker* tracker,
333 const Task* verify_task) { 332 const Task* verify_task) {
334 // Pretend |verify_task| is posted to respect TaskTracker's contract. 333 // Pretend |verify_task| is posted to respect TaskTracker's contract.
335 EXPECT_TRUE(tracker->WillPostTask(verify_task)); 334 EXPECT_TRUE(tracker->WillPostTask(verify_task));
336 335
337 // Confirm that the test conditions are right (no TaskRunnerHandles set 336 // Confirm that the test conditions are right (no TaskRunnerHandles set
338 // already). 337 // already).
339 EXPECT_FALSE(ThreadTaskRunnerHandle::IsSet()); 338 EXPECT_FALSE(TaskRunnerHandle::HasSingleThreadTaskScope());
340 EXPECT_FALSE(SequencedTaskRunnerHandle::IsSet()); 339 EXPECT_FALSE(TaskRunnerHandle::HasSequencedTaskScope());
341 340
342 tracker->RunTask(verify_task); 341 tracker->RunTask(verify_task);
343 342
344 // TaskRunnerHandle state is reset outside of task's scope. 343 // TaskRunnerHandle state is reset outside of task's scope.
345 EXPECT_FALSE(ThreadTaskRunnerHandle::IsSet()); 344 EXPECT_FALSE(TaskRunnerHandle::HasSingleThreadTaskScope());
346 EXPECT_FALSE(SequencedTaskRunnerHandle::IsSet()); 345 EXPECT_FALSE(TaskRunnerHandle::HasSequencedTaskScope());
347 } 346 }
348 347
349 static void VerifyNoTaskRunnerHandle() { 348 static void VerifyNoTaskRunnerHandle() {
350 EXPECT_FALSE(ThreadTaskRunnerHandle::IsSet()); 349 EXPECT_FALSE(TaskRunnerHandle::HasSingleThreadTaskScope());
351 EXPECT_FALSE(SequencedTaskRunnerHandle::IsSet()); 350 EXPECT_FALSE(TaskRunnerHandle::HasSequencedTaskScope());
352 } 351 }
353 352
354 TEST_P(TaskSchedulerTaskTrackerTest, TaskRunnerHandleIsNotSetOnParallel) { 353 TEST_P(TaskSchedulerTaskTrackerTest, TaskRunnerHandleIsNotSetOnParallel) {
355 // Create a task that will verify that TaskRunnerHandles are not set in its 354 // Create a task that will verify that TaskRunnerHandles are not set in its
356 // scope per no TaskRunner ref being set to it. 355 // scope per no TaskRunner ref being set to it.
357 std::unique_ptr<Task> verify_task( 356 std::unique_ptr<Task> verify_task(
358 new Task(FROM_HERE, Bind(&VerifyNoTaskRunnerHandle), 357 new Task(FROM_HERE, Bind(&VerifyNoTaskRunnerHandle),
359 TaskTraits().WithShutdownBehavior(GetParam()), TimeDelta())); 358 TaskTraits().WithShutdownBehavior(GetParam()), TimeDelta()));
360 359
361 RunTaskRunnerHandleVerificationTask(&tracker_, verify_task.get()); 360 RunTaskRunnerHandleVerificationTask(&tracker_, verify_task.get());
362 } 361 }
363 362
364 static void VerifySequencedTaskRunnerHandle( 363 static void VerifySequencedTaskScope(
365 const SequencedTaskRunner* expected_task_runner) { 364 const SequencedTaskRunner* expected_task_runner) {
366 EXPECT_FALSE(ThreadTaskRunnerHandle::IsSet()); 365 EXPECT_FALSE(TaskRunnerHandle::HasSingleThreadTaskScope());
367 EXPECT_TRUE(SequencedTaskRunnerHandle::IsSet()); 366 EXPECT_TRUE(TaskRunnerHandle::HasSequencedTaskScope());
368 EXPECT_EQ(expected_task_runner, SequencedTaskRunnerHandle::Get()); 367 EXPECT_EQ(expected_task_runner, TaskRunnerHandle::GetSequenced());
369 } 368 }
370 369
371 TEST_P(TaskSchedulerTaskTrackerTest, 370 TEST_P(TaskSchedulerTaskTrackerTest, SequencedTaskScopeIsSetOnSequenced) {
372 SequencedTaskRunnerHandleIsSetOnSequenced) {
373 scoped_refptr<SequencedTaskRunner> test_task_runner(new TestSimpleTaskRunner); 371 scoped_refptr<SequencedTaskRunner> test_task_runner(new TestSimpleTaskRunner);
374 372
375 // Create a task that will verify that SequencedTaskRunnerHandle is properly 373 // Create a task that will verify that SequencedTaskScope is properly
376 // set to |test_task_runner| in its scope per |sequenced_task_runner_ref| 374 // set to |test_task_runner| in its scope per |sequenced_task_runner_ref|
377 // being set to it. 375 // being set to it.
378 std::unique_ptr<Task> verify_task( 376 std::unique_ptr<Task> verify_task(new Task(
379 new Task(FROM_HERE, Bind(&VerifySequencedTaskRunnerHandle, 377 FROM_HERE,
380 base::Unretained(test_task_runner.get())), 378 Bind(&VerifySequencedTaskScope, base::Unretained(test_task_runner.get())),
381 TaskTraits().WithShutdownBehavior(GetParam()), TimeDelta())); 379 TaskTraits().WithShutdownBehavior(GetParam()), TimeDelta()));
382 verify_task->sequenced_task_runner_ref = test_task_runner; 380 verify_task->sequenced_task_runner_ref = test_task_runner;
383 381
384 RunTaskRunnerHandleVerificationTask(&tracker_, verify_task.get()); 382 RunTaskRunnerHandleVerificationTask(&tracker_, verify_task.get());
385 } 383 }
386 384
387 static void VerifyThreadTaskRunnerHandle( 385 static void VerifySingleThreadTaskScope(
388 const SingleThreadTaskRunner* expected_task_runner) { 386 const SingleThreadTaskRunner* expected_task_runner) {
389 EXPECT_TRUE(ThreadTaskRunnerHandle::IsSet()); 387 EXPECT_TRUE(TaskRunnerHandle::HasSingleThreadTaskScope());
390 // SequencedTaskRunnerHandle inherits ThreadTaskRunnerHandle for thread. 388 EXPECT_TRUE(TaskRunnerHandle::HasSequencedTaskScope());
391 EXPECT_TRUE(SequencedTaskRunnerHandle::IsSet()); 389 EXPECT_EQ(expected_task_runner, TaskRunnerHandle::GetSingleThreaded());
392 EXPECT_EQ(expected_task_runner, ThreadTaskRunnerHandle::Get());
393 } 390 }
394 391
395 TEST_P(TaskSchedulerTaskTrackerTest, 392 TEST_P(TaskSchedulerTaskTrackerTest, SingleThreadTaskScope) {
396 ThreadTaskRunnerHandleIsSetOnSingleThreaded) {
397 scoped_refptr<SingleThreadTaskRunner> test_task_runner( 393 scoped_refptr<SingleThreadTaskRunner> test_task_runner(
398 new TestSimpleTaskRunner); 394 new TestSimpleTaskRunner);
399 395
400 // Create a task that will verify that ThreadTaskRunnerHandle is properly set 396 // Create a task that will verify that SingleThreadTaskScope is properly set
401 // to |test_task_runner| in its scope per |single_thread_task_runner_ref| 397 // to |test_task_runner| in its scope per |single_thread_task_runner_ref|
402 // being set on it. 398 // being set on it.
403 std::unique_ptr<Task> verify_task( 399 std::unique_ptr<Task> verify_task(
404 new Task(FROM_HERE, Bind(&VerifyThreadTaskRunnerHandle, 400 new Task(FROM_HERE, Bind(&VerifySingleThreadTaskScope,
405 base::Unretained(test_task_runner.get())), 401 base::Unretained(test_task_runner.get())),
406 TaskTraits().WithShutdownBehavior(GetParam()), TimeDelta())); 402 TaskTraits().WithShutdownBehavior(GetParam()), TimeDelta()));
407 verify_task->single_thread_task_runner_ref = test_task_runner; 403 verify_task->single_thread_task_runner_ref = test_task_runner;
408 404
409 RunTaskRunnerHandleVerificationTask(&tracker_, verify_task.get()); 405 RunTaskRunnerHandleVerificationTask(&tracker_, verify_task.get());
410 } 406 }
411 407
412 INSTANTIATE_TEST_CASE_P( 408 INSTANTIATE_TEST_CASE_P(
413 ContinueOnShutdown, 409 ContinueOnShutdown,
414 TaskSchedulerTaskTrackerTest, 410 TaskSchedulerTaskTrackerTest,
415 ::testing::Values(TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN)); 411 ::testing::Values(TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN));
416 INSTANTIATE_TEST_CASE_P( 412 INSTANTIATE_TEST_CASE_P(
417 SkipOnShutdown, 413 SkipOnShutdown,
418 TaskSchedulerTaskTrackerTest, 414 TaskSchedulerTaskTrackerTest,
419 ::testing::Values(TaskShutdownBehavior::SKIP_ON_SHUTDOWN)); 415 ::testing::Values(TaskShutdownBehavior::SKIP_ON_SHUTDOWN));
420 INSTANTIATE_TEST_CASE_P( 416 INSTANTIATE_TEST_CASE_P(
421 BlockShutdown, 417 BlockShutdown,
422 TaskSchedulerTaskTrackerTest, 418 TaskSchedulerTaskTrackerTest,
423 ::testing::Values(TaskShutdownBehavior::BLOCK_SHUTDOWN)); 419 ::testing::Values(TaskShutdownBehavior::BLOCK_SHUTDOWN));
424 420
425 } // namespace internal 421 } // namespace internal
426 } // namespace base 422 } // namespace base
OLDNEW
« no previous file with comments | « base/task_scheduler/task_tracker.cc ('k') | base/task_scheduler/test_task_factory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698