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 "base/threading/sequenced_worker_pool.h" | 5 #include "base/threading/sequenced_worker_pool.h" |
6 | 6 |
7 #include <list> | 7 #include <list> |
8 #include <map> | 8 #include <map> |
9 #include <set> | 9 #include <set> |
10 #include <utility> | 10 #include <utility> |
(...skipping 601 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
612 if (max_blocking_tasks_after_shutdown_ <= 0) { | 612 if (max_blocking_tasks_after_shutdown_ <= 0) { |
613 DLOG(WARNING) << "BLOCK_SHUTDOWN task disallowed"; | 613 DLOG(WARNING) << "BLOCK_SHUTDOWN task disallowed"; |
614 return false; | 614 return false; |
615 } | 615 } |
616 max_blocking_tasks_after_shutdown_ -= 1; | 616 max_blocking_tasks_after_shutdown_ -= 1; |
617 } | 617 } |
618 | 618 |
619 // The trace_id is used for identifying the task in about:tracing. | 619 // The trace_id is used for identifying the task in about:tracing. |
620 sequenced.trace_id = trace_id_++; | 620 sequenced.trace_id = trace_id_++; |
621 | 621 |
| 622 TRACE_EVENT_WITH_FLOW0( |
| 623 "toplevel", "SequencedWorkerPool::Inner::PostTask", |
| 624 TRACE_ID_MANGLE(GetTaskTraceID(sequenced, static_cast<void*>(this))), |
| 625 TRACE_EVENT_FLAG_FLOW_OUT); |
622 TRACE_EVENT_FLOW_BEGIN0(TRACE_DISABLED_BY_DEFAULT("toplevel.flow"), | 626 TRACE_EVENT_FLOW_BEGIN0(TRACE_DISABLED_BY_DEFAULT("toplevel.flow"), |
623 "SequencedWorkerPool::PostTask", | 627 "SequencedWorkerPool::PostTask", |
624 TRACE_ID_MANGLE(GetTaskTraceID(sequenced, static_cast<void*>(this)))); | 628 TRACE_ID_MANGLE(GetTaskTraceID(sequenced, static_cast<void*>(this)))); |
625 | 629 |
626 sequenced.sequence_task_number = LockedGetNextSequenceTaskNumber(); | 630 sequenced.sequence_task_number = LockedGetNextSequenceTaskNumber(); |
627 | 631 |
628 // Now that we have the lock, apply the named token rules. | 632 // Now that we have the lock, apply the named token rules. |
629 if (optional_token_name) | 633 if (optional_token_name) |
630 sequenced.sequence_token_id = LockedGetNamedTokenID(*optional_token_name); | 634 sequenced.sequence_token_id = LockedGetNamedTokenID(*optional_token_name); |
631 | 635 |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
747 | 751 |
748 HandleCleanup(); | 752 HandleCleanup(); |
749 | 753 |
750 // See GetWork for what delete_these_outside_lock is doing. | 754 // See GetWork for what delete_these_outside_lock is doing. |
751 SequencedTask task; | 755 SequencedTask task; |
752 TimeDelta wait_time; | 756 TimeDelta wait_time; |
753 std::vector<Closure> delete_these_outside_lock; | 757 std::vector<Closure> delete_these_outside_lock; |
754 GetWorkStatus status = | 758 GetWorkStatus status = |
755 GetWork(&task, &wait_time, &delete_these_outside_lock); | 759 GetWork(&task, &wait_time, &delete_these_outside_lock); |
756 if (status == GET_WORK_FOUND) { | 760 if (status == GET_WORK_FOUND) { |
| 761 TRACE_EVENT_WITH_FLOW2( |
| 762 "toplevel", "SequencedWorkerPool::ThreadLoop", |
| 763 TRACE_ID_MANGLE(GetTaskTraceID(task, static_cast<void*>(this))), |
| 764 TRACE_EVENT_FLAG_FLOW_IN, "src_file", task.posted_from.file_name(), |
| 765 "src_func", task.posted_from.function_name()); |
757 TRACE_EVENT_FLOW_END0(TRACE_DISABLED_BY_DEFAULT("toplevel.flow"), | 766 TRACE_EVENT_FLOW_END0(TRACE_DISABLED_BY_DEFAULT("toplevel.flow"), |
758 "SequencedWorkerPool::PostTask", | 767 "SequencedWorkerPool::PostTask", |
759 TRACE_ID_MANGLE(GetTaskTraceID(task, static_cast<void*>(this)))); | 768 TRACE_ID_MANGLE(GetTaskTraceID(task, static_cast<void*>(this)))); |
760 TRACE_EVENT2("toplevel", "SequencedWorkerPool::ThreadLoop", | |
761 "src_file", task.posted_from.file_name(), | |
762 "src_func", task.posted_from.function_name()); | |
763 int new_thread_id = WillRunWorkerTask(task); | 769 int new_thread_id = WillRunWorkerTask(task); |
764 { | 770 { |
765 AutoUnlock unlock(lock_); | 771 AutoUnlock unlock(lock_); |
766 // There may be more work available, so wake up another | 772 // There may be more work available, so wake up another |
767 // worker thread. (Technically not required, since we | 773 // worker thread. (Technically not required, since we |
768 // already get a signal for each new task, but it doesn't | 774 // already get a signal for each new task, but it doesn't |
769 // hurt.) | 775 // hurt.) |
770 SignalHasWork(); | 776 SignalHasWork(); |
771 delete_these_outside_lock.clear(); | 777 delete_these_outside_lock.clear(); |
772 | 778 |
(...skipping 525 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1298 void SequencedWorkerPool::Shutdown(int max_new_blocking_tasks_after_shutdown) { | 1304 void SequencedWorkerPool::Shutdown(int max_new_blocking_tasks_after_shutdown) { |
1299 DCHECK(constructor_task_runner_->BelongsToCurrentThread()); | 1305 DCHECK(constructor_task_runner_->BelongsToCurrentThread()); |
1300 inner_->Shutdown(max_new_blocking_tasks_after_shutdown); | 1306 inner_->Shutdown(max_new_blocking_tasks_after_shutdown); |
1301 } | 1307 } |
1302 | 1308 |
1303 bool SequencedWorkerPool::IsShutdownInProgress() { | 1309 bool SequencedWorkerPool::IsShutdownInProgress() { |
1304 return inner_->IsShutdownInProgress(); | 1310 return inner_->IsShutdownInProgress(); |
1305 } | 1311 } |
1306 | 1312 |
1307 } // namespace base | 1313 } // namespace base |
OLD | NEW |