New issue
Advanced search Search tips

Issue 768436 link

Starred by 3 users

Issue metadata

Status: Fixed
Owner:
Closed: May 2018
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Fuchsia
Pri: 2
Type: Bug

Blocking:
issue 706592
issue 738275



Sign in to add a comment

TaskSchedulerWorkerPoolBlockingTest.MaximumWorkersTest failed in base_unittests

Project Member Reported by scottmg@chromium.org, Sep 25 2017

Issue description

[00052.196] 03532.03559> [ RUN      ] TaskSchedulerWorkerPoolBlockingTest.MaximumWorkersTest
[00052.196] 03532.03559> ../../base/task_scheduler/scheduler_worker_pool_impl_unittest.cc:1434: Failure
[00052.196] 03532.03559>       Expected: worker_pool_->GetWorkerCapacityForTesting()
[00052.196] 03532.03559>       Which is: 17
[00052.197] 03532.03559> To be equal to: kNumWorkersInWorkerPool + kNumExtraTasks
[00052.197] 03532.03559>       Which is: 14
[00052.197] 03532.03559> [  FAILED  ] TaskSchedulerWorkerPoolBlockingTest.MaximumWorkersTest (6279 ms)

https://build.chromium.org/p/chromium.fyi/builders/Fuchsia/builds/9656
 
Summary: TaskSchedulerWorkerPoolBlockingTest.MaximumWorkersTest failed in base_unittests (was: TaskSchedulerWorkerPoolBlockingTest.MaximumWorkersTest failed in content_unittests)
https://build.chromium.org/p/chromium.fyi/builders/Fuchsia%20%28dbg%29/builds/15991

[00125.004] 03911.03954> [ RUN      ] TaskSchedulerWorkerPoolBlockingTest.MaximumWorkersTest
[00125.004] 03911.03954> ../../base/task_scheduler/scheduler_worker_pool_impl_unittest.cc:1530: Failure
[00125.004] 03911.03954> Expected equality of these values:
[00125.004] 03911.03954>   worker_pool_->GetWorkerCapacityForTesting()
[00125.005] 03911.03954>     Which is: 17
[00125.005] 03911.03954>   kNumWorkersInWorkerPool + kNumExtraTasks
[00125.005] 03911.03954>     Which is: 14
[00125.006] 03911.03954> [  FAILED  ] TaskSchedulerWorkerPoolBlockingTest.MaximumWorkersTest (5212 ms)
[00125.006] 03911.03954> [1634/2896] TaskSchedulerWorkerPoolBlockingTest.MaximumWorkersTest (5212 ms)
This looks probably the same as  bug 792310 .
Project Member

Comment 3 by bugdroid1@chromium.org, Feb 7 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/e31677326baffe050afd6750c6c1f79b33eaa375

commit e31677326baffe050afd6750c6c1f79b33eaa375
Author: Scott Graham <scottmg@chromium.org>
Date: Wed Feb 07 21:54:16 2018

fuchsia: Disable TaskSchedulerWorkerPoolBlockingTest.MaximumWorkersTest

Most recently
https://build.chromium.org/p/chromium.fyi/builders/Fuchsia%20%28dbg%29/builds/15991

TBR: wez@chromium.org
Bug:  768436 ,  792310 
Change-Id: I836a3e918bf67a0780d781bea1b64fa750f75ef3
Reviewed-on: https://chromium-review.googlesource.com/907531
Commit-Queue: Scott Graham <scottmg@chromium.org>
Reviewed-by: Scott Graham <scottmg@chromium.org>
Cr-Commit-Position: refs/heads/master@{#535157}
[modify] https://crrev.com/e31677326baffe050afd6750c6c1f79b33eaa375/testing/buildbot/filters/fuchsia.base_unittests.filter

Comment 4 by w...@chromium.org, Feb 9 2018

Owner: fdoray@chromium.org
Status: Assigned (was: Unconfirmed)
Not sure why we would end up with the worker capacity _exceeding_ the value expected by the test - any ideas, fdoray@?

Comment 5 by w...@chromium.org, Feb 13 2018

Failed again in Fuchsia Debug at https://ci.chromium.org/buildbot/chromium.fyi/Fuchsia%20%28dbg%29/16189 with:

[00568.470] 03920.04338> [3:1891413573:0213/194022.725407:568470394:ERROR:test_launcher.cc(404)] Dumping threads in process 37325
[00568.488] 71168.71194> Backtrace of threads of process 37325: base_unittests__exec
[00568.489] 71168.71194> arch: x86_64
[00568.489] 71168.71194> 8 thread(s)
...

[00568.494] 71168.71194> <== Thread initial-thread[37367] ==>
...
#01: pc 0x7282389cd696 sp 0x2616bf811e88 (<vDSO>,0x6696)
#02: pc 0x7282389cd4dc sp 0x2616bf811e90 (<vDSO>,0x64dc)
#03: pc 0x6031f4c3022f sp 0x2616bf811ea0 (libc.so,0x4622f)
#04: base::PlatformThread::Sleep(base::TimeDelta) at ??:?
#05: base::internal::TaskSchedulerWorkerPoolBlockingTest::ExpectWorkerCapacityIncreasesTo(unsigned long) at ??:?
#06: base::internal::TaskSchedulerWorkerPoolBlockingTest_ThreadBlockedUnblocked_Test::TestBody() at ??:?
#07: void testing::internal::InvokeHelper<void, std::__1::tuple<> >::InvokeMethod<base::RunLoop, void (base::RunLoop::*)()>(base::RunLoop*, void (base::RunLoop::*)(), std::__1::tuple<> const&) at ??:?
#08: void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) at ??:?
#09: testing::Test::Run() at ??:?
#10: testing::TestInfo::Run() at ??:?
#11: testing::TestCase::Run() at ??:?
#12: testing::internal::UnitTestImpl::RunAllTests() at ??:?
#13: bool testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) at ??:?
#14: bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) at ??:?
#15: testing::UnitTest::Run() at ??:?
#16: RUN_ALL_TESTS() at ??:?
#17: base::TestSuite::Run() at ??:?
#18: void base::internal::FunctorTraits<void (base::WaitableEvent::*)(), void>::Invoke<base::WaitableEvent*>(void (base::WaitableEvent::*)(), base::WaitableEvent*&&) at ??:?
#19: void base::internal::InvokeHelper<false, void>::MakeItSo<void (base::WaitableEvent::*)(), base::WaitableEvent*>(void (base::WaitableEvent::*&&)(), base::WaitableEvent*&&) at ??:?
#20: void base::internal::Invoker<base::internal::BindState<void (base::WaitableEvent::*)(), base::internal::UnretainedWrapper<base::WaitableEvent> >, void ()>::RunImpl<void (base::WaitableEvent::*)(), std::__1::tuple<base::internal::UnretainedWrapper<base::WaitableEvent> >, 0ul>(void (base::WaitableEvent::*&&)(), std::__1::tuple<base::internal::UnretainedWrapper<base::WaitableEvent> >&&, std::__1::integer_sequence<unsigned long, 0ul>) at ??:?
#21: base::internal::Invoker<base::internal::BindState<void (base::WaitableEvent::*)(), base::internal::UnretainedWrapper<base::WaitableEvent> >, void ()>::Run(base::internal::BindStateBase*) at ??:?
#22: base::RepeatingCallback<void ()>::Run() const & at ??:?
#23: base::(anonymous namespace)::LaunchUnitTestsInternal(base::RepeatingCallback<int ()> const&, unsigned long, int, bool, base::RepeatingCallback<void ()> const&) at ??:?
#24: base::LaunchUnitTests(int, char**, base::RepeatingCallback<int ()> const&) at ??:?
#25: main at ??:?
#26: pc 0x6031f4c0510e sp 0x2616bf812fe0 (libc.so,0x1b10e)
#27: pc 0 sp 0x2616bf813000

[00568.516] 71168.71194> <== Thread TaskSchedulerServiceThread[40241] ==>
...
#01: pc 0x7282389cd85b sp 0x652fc5843438 (<vDSO>,0x685b)
#02: pc 0x7282389cd579 sp 0x652fc5843440 (<vDSO>,0x6579)
#03: pc 0x6031f4c2e511 sp 0x652fc5843460 (libc.so,0x44511)
#04: pc 0x6031f4c01f48 sp 0x652fc58434a0 (libc.so,0x17f48)
#05: base::ConditionVariable::Wait() at ??:?
#06: base::WaitableEvent::TimedWaitUntil(base::TimeTicks const&) at ??:?
#07: base::WaitableEvent::Wait() at ??:?
#08: base::MessagePumpDefault::Run(base::MessagePump::Delegate*) at ??:?
#09: base::MessageLoop::Run(bool) at ??:?
#10: base::RunLoop::Run() at ??:?
#11: base::Thread::Run(base::RunLoop*) at ??:?
#12: base::Thread::ThreadMain() at ??:?
#13: base::(anonymous namespace)::ThreadFunc(void*) at ??:?
#14: pc 0x6031f4c02876 sp 0x652fc5844fe0 (libc.so,0x18876)
#15: pc 0x6031f4c786c9 sp 0x652fc5844ff0 (libc.so,0x8e6c9)
#16: pc 0 sp 0x652fc5845000

[00568.535] 71168.71194> <== Thread TaskSchedulerAWorker[40263] ==>
...
#01: pc 0x7282389cd85b sp 0x5f7e33a0c6d8 (<vDSO>,0x685b)
#02: pc 0x7282389cd579 sp 0x5f7e33a0c6e0 (<vDSO>,0x6579)
#03: pc 0x6031f4c2e511 sp 0x5f7e33a0c700 (libc.so,0x44511)
#04: pc 0x6031f4c01f48 sp 0x5f7e33a0c740 (libc.so,0x17f48)
#05: base::ConditionVariable::Wait() at ??:?
#06: base::WaitableEvent::TimedWaitUntil(base::TimeTicks const&) at ??:?
#07: base::WaitableEvent::Wait() at ??:?
#08: base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}::operator()(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&) const at ??:?
#09: void base::internal::FunctorTraits<base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}, void>::Invoke<{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}, base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType>({lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}&&, base::RepeatingCallback<void ()>*&&, base::WaitableEvent*&&, base::internal::(anonymous namespace)::NestedBlockingType&&) at ??:?
#10: void base::internal::InvokeHelper<false, void>::MakeItSo<base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}, base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType>(base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}&&, base::RepeatingCallback<void ()>*&&, base::WaitableEvent*&&, base::internal::(anonymous namespace)::NestedBlockingType&&) at ??:?
#11: void base::internal::Invoker<base::internal::BindState<base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}, base::internal::UnretainedWrapper<base::RepeatingCallback<void ()> >, base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}<base::WaitableEvent>, base::internal::(anonymous namespace)::NestedBlockingType>, void ()>::RunImpl<{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}, std::__1::tuple<base::internal::UnretainedWrapper, base::internal::UnretainedWrapper<base::RepeatingCallback<void ()> >, base::internal::(anonymous namespace)::NestedBlockingType>, 0ul, 1ul, 2ul>({lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}&&, std::__1::tuple<base::internal::UnretainedWrapper, base::internal::UnretainedWrapper<base::RepeatingCallback<void ()> >, base::internal::(anonymous namespace)::NestedBlockingType>&&, base::internal::Invoker<base::internal::BindState<base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}, base::internal::UnretainedWrapper<base::RepeatingCallback<void ()> >, base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}<base::WaitableEvent>, base::internal::(anonymous namespace)::NestedBlockingType>, void ()>::RunImpl::integer_sequence<unsigned long, 0ul, 1ul, 2ul>) at ??:?
#12: base::internal::Invoker<base::internal::BindState<base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}, base::internal::UnretainedWrapper<base::RepeatingCallback<void ()> >, base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}<base::WaitableEvent>, base::internal::(anonymous namespace)::NestedBlockingType>, void ()>::RunOnce(base::internal::BindStateBase*) at ??:?
#13: base::OnceCallback<void ()>::Run() && at ??:?
#14: base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*) at ??:?
#15: base::internal::TaskTracker::RunOrSkipTask(base::internal::Task, base::internal::Sequence*, bool) at ??:?
#16: base::internal::TaskTracker::RunNextTask(scoped_refptr<base::internal::Sequence>, base::internal::CanScheduleSequenceObserver*) at ??:?
#17: base::internal::SchedulerWorker::Thread::ThreadMain() at ??:?
#18: base::(anonymous namespace)::ThreadFunc(void*) at ??:?
#19: pc 0x6031f4c02876 sp 0x5f7e33a0dfe0 (libc.so,0x18876)
#20: pc 0x6031f4c786c9 sp 0x5f7e33a0dff0 (libc.so,0x8e6c9)
#21: pc 0 sp 0x5f7e33a0e000

[00568.552] 71168.71194> <== Thread TaskSchedulerAWorker[40279] ==>
...
#01: pc 0x7282389cd85b sp 0x3181d88436d8 (<vDSO>,0x685b)
#02: pc 0x7282389cd579 sp 0x3181d88436e0 (<vDSO>,0x6579)
#03: pc 0x6031f4c2e511 sp 0x3181d8843700 (libc.so,0x44511)
#04: pc 0x6031f4c01f48 sp 0x3181d8843740 (libc.so,0x17f48)
#05: base::ConditionVariable::Wait() at ??:?
#06: base::WaitableEvent::TimedWaitUntil(base::TimeTicks const&) at ??:?
#07: base::WaitableEvent::Wait() at ??:?
#08: base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}::operator()(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&) const at ??:?
#09: void base::internal::FunctorTraits<base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}, void>::Invoke<{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}, base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType>({lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}&&, base::RepeatingCallback<void ()>*&&, base::WaitableEvent*&&, base::internal::(anonymous namespace)::NestedBlockingType&&) at ??:?
#10: void base::internal::InvokeHelper<false, void>::MakeItSo<base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}, base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType>(base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}&&, base::RepeatingCallback<void ()>*&&, base::WaitableEvent*&&, base::internal::(anonymous namespace)::NestedBlockingType&&) at ??:?
#11: void base::internal::Invoker<base::internal::BindState<base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}, base::internal::UnretainedWrapper<base::RepeatingCallback<void ()> >, base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}<base::WaitableEvent>, base::internal::(anonymous namespace)::NestedBlockingType>, void ()>::RunImpl<{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}, std::__1::tuple<base::internal::UnretainedWrapper, base::internal::UnretainedWrapper<base::RepeatingCallback<void ()> >, base::internal::(anonymous namespace)::NestedBlockingType>, 0ul, 1ul, 2ul>({lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}&&, std::__1::tuple<base::internal::UnretainedWrapper, base::internal::UnretainedWrapper<base::RepeatingCallback<void ()> >, base::internal::(anonymous namespace)::NestedBlockingType>&&, base::internal::Invoker<base::internal::BindState<base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}, base::internal::UnretainedWrapper<base::RepeatingCallback<void ()> >, base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}<base::WaitableEvent>, base::internal::(anonymous namespace)::NestedBlockingType>, void ()>::RunImpl::integer_sequence<unsigned long, 0ul, 1ul, 2ul>) at ??:?
#12: base::internal::Invoker<base::internal::BindState<base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}, base::internal::UnretainedWrapper<base::RepeatingCallback<void ()> >, base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}<base::WaitableEvent>, base::internal::(anonymous namespace)::NestedBlockingType>, void ()>::RunOnce(base::internal::BindStateBase*) at ??:?
#13: base::OnceCallback<void ()>::Run() && at ??:?
#14: base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*) at ??:?
#15: base::internal::TaskTracker::RunOrSkipTask(base::internal::Task, base::internal::Sequence*, bool) at ??:?
#16: base::internal::TaskTracker::RunNextTask(scoped_refptr<base::internal::Sequence>, base::internal::CanScheduleSequenceObserver*) at ??:?
#17: base::internal::SchedulerWorker::Thread::ThreadMain() at ??:?
#18: base::(anonymous namespace)::ThreadFunc(void*) at ??:?
#19: pc 0x6031f4c02876 sp 0x3181d8844fe0 (libc.so,0x18876)
#20: pc 0x6031f4c786c9 sp 0x3181d8844ff0 (libc.so,0x8e6c9)
#21: pc 0 sp 0x3181d8845000

[00568.566] 71168.71194> <== Thread TaskSchedulerAWorker[40286] ==>
...
#01: pc 0x7282389cd85b sp 0x342b49ebe6d8 (<vDSO>,0x685b)
#02: pc 0x7282389cd579 sp 0x342b49ebe6e0 (<vDSO>,0x6579)
#03: pc 0x6031f4c2e511 sp 0x342b49ebe700 (libc.so,0x44511)
#04: pc 0x6031f4c01f48 sp 0x342b49ebe740 (libc.so,0x17f48)
#05: base::ConditionVariable::Wait() at ??:?
#06: base::WaitableEvent::TimedWaitUntil(base::TimeTicks const&) at ??:?
#07: base::WaitableEvent::Wait() at ??:?
#08: base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}::operator()(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&) const at ??:?
#09: void base::internal::FunctorTraits<base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}, void>::Invoke<{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}, base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType>({lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}&&, base::RepeatingCallback<void ()>*&&, base::WaitableEvent*&&, base::internal::(anonymous namespace)::NestedBlockingType&&) at ??:?
#10: void base::internal::InvokeHelper<false, void>::MakeItSo<base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}, base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType>(base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}&&, base::RepeatingCallback<void ()>*&&, base::WaitableEvent*&&, base::internal::(anonymous namespace)::NestedBlockingType&&) at ??:?
#11: void base::internal::Invoker<base::internal::BindState<base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}, base::internal::UnretainedWrapper<base::RepeatingCallback<void ()> >, base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}<base::WaitableEvent>, base::internal::(anonymous namespace)::NestedBlockingType>, void ()>::RunImpl<{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}, std::__1::tuple<base::internal::UnretainedWrapper, base::internal::UnretainedWrapper<base::RepeatingCallback<void ()> >, base::internal::(anonymous namespace)::NestedBlockingType>, 0ul, 1ul, 2ul>({lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}&&, std::__1::tuple<base::internal::UnretainedWrapper, base::internal::UnretainedWrapper<base::RepeatingCallback<void ()> >, base::internal::(anonymous namespace)::NestedBlockingType>&&, base::internal::Invoker<base::internal::BindState<base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}, base::internal::UnretainedWrapper<base::RepeatingCallback<void ()> >, base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}<base::WaitableEvent>, base::internal::(anonymous namespace)::NestedBlockingType>, void ()>::RunImpl::integer_sequence<unsigned long, 0ul, 1ul, 2ul>) at ??:?
#12: base::internal::Invoker<base::internal::BindState<base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}, base::internal::UnretainedWrapper<base::RepeatingCallback<void ()> >, base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}<base::WaitableEvent>, base::internal::(anonymous namespace)::NestedBlockingType>, void ()>::RunOnce(base::internal::BindStateBase*) at ??:?
#13: base::OnceCallback<void ()>::Run() && at ??:?
#14: base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*) at ??:?
#15: base::internal::TaskTracker::RunOrSkipTask(base::internal::Task, base::internal::Sequence*, bool) at ??:?
#16: base::internal::TaskTracker::RunNextTask(scoped_refptr<base::internal::Sequence>, base::internal::CanScheduleSequenceObserver*) at ??:?
#17: base::internal::SchedulerWorker::Thread::ThreadMain() at ??:?
#18: base::(anonymous namespace)::ThreadFunc(void*) at ??:?
#19: pc 0x6031f4c02876 sp 0x342b49ebffe0 (libc.so,0x18876)
#20: pc 0x6031f4c786c9 sp 0x342b49ebfff0 (libc.so,0x8e6c9)
#21: pc 0 sp 0x342b49ec0000

[00568.584] 71168.71194> <== Thread TaskSchedulerAWorker[40293] ==>
...
#01: pc 0x7282389cd85b sp 0x77a4a54cf4a8 (<vDSO>,0x685b)
#02: pc 0x7282389cd579 sp 0x77a4a54cf4b0 (<vDSO>,0x6579)
#03: pc 0x6031f4c2e511 sp 0x77a4a54cf4d0 (libc.so,0x44511)
#04: pc 0x6031f4c01f48 sp 0x77a4a54cf510 (libc.so,0x17f48)
#05: base::ConditionVariable::Wait() at ??:?
#06: base::WaitableEvent::TimedWaitUntil(base::TimeTicks const&) at ??:?
#07: base::WaitableEvent::Wait() at ??:?
#08: base::internal::SchedulerWorker::Delegate::WaitForWork(base::WaitableEvent*) at ??:?
#09: base::internal::SchedulerWorker::Thread::ThreadMain() at ??:?
#10: base::(anonymous namespace)::ThreadFunc(void*) at ??:?
#11: pc 0x6031f4c02876 sp 0x77a4a54cffe0 (libc.so,0x18876)
#12: pc 0x6031f4c786c9 sp 0x77a4a54cfff0 (libc.so,0x8e6c9)
#13: pc 0 sp 0x77a4a54d0000

[00568.600] 71168.71194> <== Thread TaskSchedulerAWorker[40351] ==>
...
#01: pc 0x7282389cd85b sp 0x4e4ba0b7b6d8 (<vDSO>,0x685b)
#02: pc 0x7282389cd579 sp 0x4e4ba0b7b6e0 (<vDSO>,0x6579)
#03: pc 0x6031f4c2e511 sp 0x4e4ba0b7b700 (libc.so,0x44511)
#04: pc 0x6031f4c01f48 sp 0x4e4ba0b7b740 (libc.so,0x17f48)
#05: base::ConditionVariable::Wait() at ??:?
#06: base::WaitableEvent::TimedWaitUntil(base::TimeTicks const&) at ??:?
#07: base::WaitableEvent::Wait() at ??:?
#08: base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}::operator()(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&) const at ??:?
#09: void base::internal::FunctorTraits<base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}, void>::Invoke<{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}, base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType>({lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}&&, base::RepeatingCallback<void ()>*&&, base::WaitableEvent*&&, base::internal::(anonymous namespace)::NestedBlockingType&&) at ??:?
#10: void base::internal::InvokeHelper<false, void>::MakeItSo<base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}, base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType>(base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}&&, base::RepeatingCallback<void ()>*&&, base::WaitableEvent*&&, base::internal::(anonymous namespace)::NestedBlockingType&&) at ??:?
#11: void base::internal::Invoker<base::internal::BindState<base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}, base::internal::UnretainedWrapper<base::RepeatingCallback<void ()> >, base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}<base::WaitableEvent>, base::internal::(anonymous namespace)::NestedBlockingType>, void ()>::RunImpl<{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}, std::__1::tuple<base::internal::UnretainedWrapper, base::internal::UnretainedWrapper<base::RepeatingCallback<void ()> >, base::internal::(anonymous namespace)::NestedBlockingType>, 0ul, 1ul, 2ul>({lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}&&, std::__1::tuple<base::internal::UnretainedWrapper, base::internal::UnretainedWrapper<base::RepeatingCallback<void ()> >, base::internal::(anonymous namespace)::NestedBlockingType>&&, base::internal::Invoker<base::internal::BindState<base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}, base::internal::UnretainedWrapper<base::RepeatingCallback<void ()> >, base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}<base::WaitableEvent>, base::internal::(anonymous namespace)::NestedBlockingType>, void ()>::RunImpl::integer_sequence<unsigned long, 0ul, 1ul, 2ul>) at ??:?
#12: base::internal::Invoker<base::internal::BindState<base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}, base::internal::UnretainedWrapper<base::RepeatingCallback<void ()> >, base::internal::TaskSchedulerWorkerPoolBlockingTest::SaturateWithBlockingTasks(base::internal::(anonymous namespace)::NestedBlockingType const&)::{lambda(base::RepeatingCallback<void ()>*, base::WaitableEvent*, base::internal::(anonymous namespace)::NestedBlockingType const&)#1}<base::WaitableEvent>, base::internal::(anonymous namespace)::NestedBlockingType>, void ()>::RunOnce(base::internal::BindStateBase*) at ??:?
#13: base::OnceCallback<void ()>::Run() && at ??:?
#14: base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*) at ??:?
#15: base::internal::TaskTracker::RunOrSkipTask(base::internal::Task, base::internal::Sequence*, bool) at ??:?
#16: base::internal::TaskTracker::RunNextTask(scoped_refptr<base::internal::Sequence>, base::internal::CanScheduleSequenceObserver*) at ??:?
#17: base::internal::SchedulerWorker::Thread::ThreadMain() at ??:?
#18: base::(anonymous namespace)::ThreadFunc(void*) at ??:?
#19: pc 0x6031f4c02876 sp 0x4e4ba0b7cfe0 (libc.so,0x18876)
#20: pc 0x6031f4c786c9 sp 0x4e4ba0b7cff0 (libc.so,0x8e6c9)
#21: pc 0 sp 0x4e4ba0b7d000

[00568.617] 71168.71194> <== Thread TaskSchedulerAWorker[40363] ==>
...
#01: pc 0x7282389cd85b sp 0x1a7d861c4a8 (<vDSO>,0x685b)
#02: pc 0x7282389cd579 sp 0x1a7d861c4b0 (<vDSO>,0x6579)
#03: pc 0x6031f4c2e511 sp 0x1a7d861c4d0 (libc.so,0x44511)
#04: pc 0x6031f4c01f48 sp 0x1a7d861c510 (libc.so,0x17f48)
#05: base::ConditionVariable::Wait() at ??:?
#06: base::WaitableEvent::TimedWaitUntil(base::TimeTicks const&) at ??:?
#07: base::WaitableEvent::Wait() at ??:?
#08: base::internal::SchedulerWorker::Delegate::WaitForWork(base::WaitableEvent*) at ??:?
#09: base::internal::SchedulerWorker::Thread::ThreadMain() at ??:?
#10: base::(anonymous namespace)::ThreadFunc(void*) at ??:?
#11: pc 0x6031f4c02876 sp 0x1a7d861cfe0 (libc.so,0x18876)
#12: pc 0x6031f4c786c9 sp 0x1a7d861cff0 (libc.so,0x8e6c9)
#13: pc 0 sp 0x1a7d861d000

...
[00568.743] 03920.03967> [2926/2930] TaskSchedulerWorkerPoolBlockingTest.ThreadBlockedUnblocked/MAY_BLOCK (TIMED OUT)

Comment 6 by w...@chromium.org, Feb 22 2018

Failed again under Fuchsia/x64/Debug in https://ci.chromium.org/buildbot/chromium.fyi/Fuchsia%20(dbg)/16506 with test TaskSchedulerWorkerPoolBlockingTest.WorkersIdleWhenOverCapacity/MAY_BLOCK
Project Member

Comment 7 by bugdroid1@chromium.org, Feb 22 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/92a8cd0fa676e90318fca3b78871477dc0448e61

commit 92a8cd0fa676e90318fca3b78871477dc0448e61
Author: Wez <wez@chromium.org>
Date: Thu Feb 22 17:07:42 2018

Filter all TaskSchedulerWorkerPoolBlockingTests which wait on capacity.

Several of these tests wait until the worker pool's capacity reaches an
expected value, which appears not to be a deterministic operation, and
fails often on the Fuchsia bots.

Also adds a filter for a flaking Mojo system unit-test.

Bug:  768436 ,  792310 ,  814596 
Change-Id: If453b3cda30747c995871fbeae6cb23830f02a88
Reviewed-on: https://chromium-review.googlesource.com/930476
Reviewed-by: Scott Graham <scottmg@chromium.org>
Commit-Queue: Wez <wez@chromium.org>
Cr-Commit-Position: refs/heads/master@{#538463}
[modify] https://crrev.com/92a8cd0fa676e90318fca3b78871477dc0448e61/testing/buildbot/filters/fuchsia.base_unittests.filter
[modify] https://crrev.com/92a8cd0fa676e90318fca3b78871477dc0448e61/testing/buildbot/filters/fuchsia.mojo_system_unittests.filter

Comment 8 by gab@chromium.org, Apr 12 2018

@fdoray: could the issues with capacity tests be due to  issue 757897 ?

Comment 9 by gab@chromium.org, Apr 27 2018

Cc: fdoray@chromium.org
 Issue 768116  has been merged into this issue.

Comment 10 by gab@chromium.org, Apr 27 2018

Labels: -Pri-3 Pri-2
Status: Started (was: Assigned)
Francois and I just sat down and figured this one out.

Turns out base is hosing itself here..! WaitableEvent::Wait() has a ScopedBlockingCall::MAY_BLOCK which means that all of these tests using WaitableEvent for synchronization can also result in increasing the pool's capacity if the test is slow enough (e.g. on Fuchsia+QEMU) for the MAY_BLOCK timeout to trigger..!

We already have ScopedClearBlockingObserverForTesting to solve this in other tests but forgot to apply it to these tests. Maybe we need a more robust solution..?
Project Member

Comment 11 by bugdroid1@chromium.org, Apr 30 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/cfcfba6675d0dc1d3cce898a039fed92d8fe17ad

commit cfcfba6675d0dc1d3cce898a039fed92d8fe17ad
Author: Francois Doray <fdoray@chromium.org>
Date: Mon Apr 30 13:18:18 2018

[TaskScheduler] Clear blocking observer when using WaitableEvent in tests.

When a task posted to TaskScheduler waits on a WaitableEvent, the
pool capacity is automatically incremented after a short delay
(https://cs.chromium.org/chromium/src/base/synchronization/waitable_event_win.cc?l=72&rcl=c60b0bcd6830c32c30128867e55a53f27642df5f and
https://cs.chromium.org/chromium/src/base/synchronization/waitable_event_posix.cc?l=166&rcl=c60b0bcd6830c32c30128867e55a53f27642df5f and
https://cs.chromium.org/chromium/src/base/synchronization/waitable_event_mac.cc?l=115&rcl=c60b0bcd6830c32c30128867e55a53f27642df5f).

This is desirable in production (if a task blocks for a long time,
another thread is created and the number of tasks that are using
the CPU stays constant).

However, it is undesirable when a WaitableEvent is used in
TaskScheduler tests, because it leads to hard to predict changes
of pool capacity.

This CL adds a ScopedClearBlockingObserverForTesting annotation to
all WaitableEvent::Wait that happen in code that tests
SchedulerWorkerPoolImpl, to avoid these hard to predict changes
of pool capacity.

The annotation is not needed when the WaitableEvent::Wait doesn't
happen on a thread managed by SchedulerWorkerPoolImpl, because that
already has no effect on pool capacity.

Bug:  768436 
Change-Id: Ie166ca55f914d89c5dd0fe6dad9ae1533e0f6c29
Reviewed-on: https://chromium-review.googlesource.com/1033533
Reviewed-by: Gabriel Charette <gab@chromium.org>
Commit-Queue: François Doray <fdoray@chromium.org>
Cr-Commit-Position: refs/heads/master@{#554732}
[modify] https://crrev.com/cfcfba6675d0dc1d3cce898a039fed92d8fe17ad/base/task_scheduler/scheduler_worker_pool_impl_unittest.cc
[modify] https://crrev.com/cfcfba6675d0dc1d3cce898a039fed92d8fe17ad/base/task_scheduler/test_task_factory.cc
[modify] https://crrev.com/cfcfba6675d0dc1d3cce898a039fed92d8fe17ad/base/task_scheduler/test_task_factory.h

Project Member

Comment 12 by bugdroid1@chromium.org, May 2 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/4ce50aa89014267e7589941571976204c6928991

commit 4ce50aa89014267e7589941571976204c6928991
Author: Francois Doray <fdoray@chromium.org>
Date: Wed May 02 15:21:47 2018

TaskScheduler: Enable TaskSchedulerWorkerPoolBlockingTest.* on fuchsia.

Flakyness was fixed by https://chromium-review.googlesource.com/1033533

Bug:  768436 ,  792310 
Change-Id: I8720a1ae503d096419bcc368c3629bcaa6679e74
Reviewed-on: https://chromium-review.googlesource.com/1039767
Reviewed-by: François Doray <fdoray@chromium.org>
Reviewed-by: Gabriel Charette <gab@chromium.org>
Reviewed-by: Wez <wez@chromium.org>
Commit-Queue: François Doray <fdoray@chromium.org>
Cr-Commit-Position: refs/heads/master@{#555393}
[modify] https://crrev.com/4ce50aa89014267e7589941571976204c6928991/testing/buildbot/filters/fuchsia.base_unittests.filter

Comment 13 by w...@chromium.org, May 3 2018

Status: Fixed (was: Started)

Sign in to add a comment