OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <algorithm> | 5 #include <algorithm> |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
9 #include "base/memory/ref_counted.h" | 9 #include "base/memory/ref_counted.h" |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
(...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
503 // triggered. This is a regression test for http://crbug.com/117469. | 503 // triggered. This is a regression test for http://crbug.com/117469. |
504 TEST_F(SequencedWorkerPoolTest, SpuriousWorkSignal) { | 504 TEST_F(SequencedWorkerPoolTest, SpuriousWorkSignal) { |
505 EnsureAllWorkersCreated(); | 505 EnsureAllWorkersCreated(); |
506 int old_has_work_call_count = has_work_call_count(); | 506 int old_has_work_call_count = has_work_call_count(); |
507 pool()->SignalHasWorkForTesting(); | 507 pool()->SignalHasWorkForTesting(); |
508 // This is inherently racy, but can only produce false positives. | 508 // This is inherently racy, but can only produce false positives. |
509 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(100)); | 509 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(100)); |
510 EXPECT_EQ(old_has_work_call_count + 1, has_work_call_count()); | 510 EXPECT_EQ(old_has_work_call_count + 1, has_work_call_count()); |
511 } | 511 } |
512 | 512 |
513 static void IsRunningOnCurrentThreadTask( | |
akalin
2012/03/28 20:24:09
nit: no static needed since you're already in anon
michaeln
2012/03/30 22:35:28
Done.
| |
514 SequencedWorkerPool::SequenceToken test_positive_token, | |
515 SequencedWorkerPool::SequenceToken test_negative_token, | |
516 SequencedWorkerPool* pool, | |
akalin
2012/03/28 20:24:09
any particular reason this takes a raw pointer ins
michaeln
2012/03/30 22:35:28
I updated the base::Bind callsites to not use Unre
| |
517 SequencedWorkerPool* unused_pool) { | |
518 EXPECT_TRUE(pool->RunsTasksOnCurrentThread()); | |
519 EXPECT_TRUE(pool->IsRunningSequenceOnCurrentThread(test_positive_token)); | |
520 EXPECT_FALSE(pool->IsRunningSequenceOnCurrentThread(test_negative_token)); | |
521 EXPECT_FALSE(unused_pool->RunsTasksOnCurrentThread()); | |
522 EXPECT_FALSE( | |
523 unused_pool->IsRunningSequenceOnCurrentThread(test_positive_token)); | |
524 EXPECT_FALSE( | |
525 unused_pool->IsRunningSequenceOnCurrentThread(test_negative_token)); | |
526 } | |
527 | |
528 TEST_F(SequencedWorkerPoolTest, IsRunningOnCurrentThread) { | |
akalin
2012/03/28 20:24:09
add test-level comment explaining what the test is
michaeln
2012/03/30 22:35:28
Done.
| |
529 SequencedWorkerPool::SequenceToken token1 = pool()->GetSequenceToken(); | |
530 SequencedWorkerPool::SequenceToken token2 = pool()->GetSequenceToken(); | |
531 SequencedWorkerPool::SequenceToken unsequenced_token; | |
532 | |
533 scoped_refptr<SequencedWorkerPool> unused_pool = | |
534 new SequencedWorkerPool(2, "unused_pool"); | |
535 EXPECT_TRUE(token1.Equals(unused_pool->GetSequenceToken())); | |
536 EXPECT_TRUE(token2.Equals(unused_pool->GetSequenceToken())); | |
537 | |
538 EXPECT_FALSE(pool()->RunsTasksOnCurrentThread()); | |
539 EXPECT_FALSE(pool()->IsRunningSequenceOnCurrentThread(token1)); | |
540 EXPECT_FALSE(pool()->IsRunningSequenceOnCurrentThread(token2)); | |
541 EXPECT_FALSE(pool()->IsRunningSequenceOnCurrentThread(unsequenced_token)); | |
542 EXPECT_FALSE(unused_pool->RunsTasksOnCurrentThread()); | |
543 EXPECT_FALSE(unused_pool->IsRunningSequenceOnCurrentThread(token1)); | |
544 EXPECT_FALSE(unused_pool->IsRunningSequenceOnCurrentThread(token2)); | |
545 EXPECT_FALSE( | |
546 unused_pool->IsRunningSequenceOnCurrentThread(unsequenced_token)); | |
547 | |
548 pool()->PostSequencedWorkerTask( | |
549 token1, FROM_HERE, | |
550 base::Bind(&IsRunningOnCurrentThreadTask, | |
551 token1, token2, | |
552 base::Unretained(pool().get()), | |
553 base::Unretained(unused_pool.get()))); | |
554 pool()->PostSequencedWorkerTask( | |
555 token2, FROM_HERE, | |
556 base::Bind(&IsRunningOnCurrentThreadTask, | |
557 token2, unsequenced_token, | |
558 base::Unretained(pool().get()), | |
559 base::Unretained(unused_pool.get()))); | |
560 pool()->PostWorkerTask( | |
561 FROM_HERE, | |
562 base::Bind(&IsRunningOnCurrentThreadTask, | |
563 unsequenced_token, token1, | |
564 base::Unretained(pool().get()), | |
565 base::Unretained(unused_pool.get()))); | |
566 pool()->Shutdown(); | |
567 unused_pool->Shutdown(); | |
568 } | |
569 | |
513 class SequencedWorkerPoolTaskRunnerTestDelegate { | 570 class SequencedWorkerPoolTaskRunnerTestDelegate { |
514 public: | 571 public: |
515 SequencedWorkerPoolTaskRunnerTestDelegate() {} | 572 SequencedWorkerPoolTaskRunnerTestDelegate() {} |
516 | 573 |
517 ~SequencedWorkerPoolTaskRunnerTestDelegate() {} | 574 ~SequencedWorkerPoolTaskRunnerTestDelegate() {} |
518 | 575 |
519 void StartTaskRunner() { | 576 void StartTaskRunner() { |
520 pool_owner_.reset( | 577 pool_owner_.reset( |
521 new SequencedWorkerPoolOwner(10, "SequencedWorkerPoolTaskRunnerTest")); | 578 new SequencedWorkerPoolOwner(10, "SequencedWorkerPoolTaskRunnerTest")); |
522 } | 579 } |
(...skipping 19 matching lines...) Expand all Loading... | |
542 scoped_ptr<SequencedWorkerPoolOwner> pool_owner_; | 599 scoped_ptr<SequencedWorkerPoolOwner> pool_owner_; |
543 }; | 600 }; |
544 | 601 |
545 INSTANTIATE_TYPED_TEST_CASE_P( | 602 INSTANTIATE_TYPED_TEST_CASE_P( |
546 SequencedWorkerPool, TaskRunnerTest, | 603 SequencedWorkerPool, TaskRunnerTest, |
547 SequencedWorkerPoolTaskRunnerTestDelegate); | 604 SequencedWorkerPoolTaskRunnerTestDelegate); |
548 | 605 |
549 } // namespace | 606 } // namespace |
550 | 607 |
551 } // namespace base | 608 } // namespace base |
OLD | NEW |