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 575 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
586 if (max_blocking_tasks_after_shutdown_ <= 0) { | 586 if (max_blocking_tasks_after_shutdown_ <= 0) { |
587 DLOG(WARNING) << "BLOCK_SHUTDOWN task disallowed"; | 587 DLOG(WARNING) << "BLOCK_SHUTDOWN task disallowed"; |
588 return false; | 588 return false; |
589 } | 589 } |
590 max_blocking_tasks_after_shutdown_ -= 1; | 590 max_blocking_tasks_after_shutdown_ -= 1; |
591 } | 591 } |
592 | 592 |
593 // The trace_id is used for identifying the task in about:tracing. | 593 // The trace_id is used for identifying the task in about:tracing. |
594 sequenced.trace_id = trace_id_++; | 594 sequenced.trace_id = trace_id_++; |
595 | 595 |
596 TRACE_EVENT_FLOW_BEGIN0(TRACE_DISABLED_BY_DEFAULT("toplevel.flow"), | 596 TRACE_EVENT_FLOW_BEGIN0("task", "SequencedWorkerPool::PostTask", |
597 "SequencedWorkerPool::PostTask", | |
598 TRACE_ID_MANGLE(GetTaskTraceID(sequenced, static_cast<void*>(this)))); | 597 TRACE_ID_MANGLE(GetTaskTraceID(sequenced, static_cast<void*>(this)))); |
599 | 598 |
600 sequenced.sequence_task_number = LockedGetNextSequenceTaskNumber(); | 599 sequenced.sequence_task_number = LockedGetNextSequenceTaskNumber(); |
601 | 600 |
602 // Now that we have the lock, apply the named token rules. | 601 // Now that we have the lock, apply the named token rules. |
603 if (optional_token_name) | 602 if (optional_token_name) |
604 sequenced.sequence_token_id = LockedGetNamedTokenID(*optional_token_name); | 603 sequenced.sequence_token_id = LockedGetNamedTokenID(*optional_token_name); |
605 | 604 |
606 pending_tasks_.insert(sequenced); | 605 pending_tasks_.insert(sequenced); |
607 if (shutdown_behavior == BLOCK_SHUTDOWN) | 606 if (shutdown_behavior == BLOCK_SHUTDOWN) |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
720 | 719 |
721 HandleCleanup(); | 720 HandleCleanup(); |
722 | 721 |
723 // See GetWork for what delete_these_outside_lock is doing. | 722 // See GetWork for what delete_these_outside_lock is doing. |
724 SequencedTask task; | 723 SequencedTask task; |
725 TimeDelta wait_time; | 724 TimeDelta wait_time; |
726 std::vector<Closure> delete_these_outside_lock; | 725 std::vector<Closure> delete_these_outside_lock; |
727 GetWorkStatus status = | 726 GetWorkStatus status = |
728 GetWork(&task, &wait_time, &delete_these_outside_lock); | 727 GetWork(&task, &wait_time, &delete_these_outside_lock); |
729 if (status == GET_WORK_FOUND) { | 728 if (status == GET_WORK_FOUND) { |
730 TRACE_EVENT_FLOW_END0(TRACE_DISABLED_BY_DEFAULT("toplevel.flow"), | 729 TRACE_EVENT_FLOW_END0("task", "SequencedWorkerPool::PostTask", |
731 "SequencedWorkerPool::PostTask", | |
732 TRACE_ID_MANGLE(GetTaskTraceID(task, static_cast<void*>(this)))); | 730 TRACE_ID_MANGLE(GetTaskTraceID(task, static_cast<void*>(this)))); |
733 TRACE_EVENT2("toplevel", "SequencedWorkerPool::ThreadLoop", | 731 TRACE_EVENT2("task", "SequencedWorkerPool::ThreadLoop", |
734 "src_file", task.posted_from.file_name(), | 732 "src_file", task.posted_from.file_name(), |
735 "src_func", task.posted_from.function_name()); | 733 "src_func", task.posted_from.function_name()); |
736 int new_thread_id = WillRunWorkerTask(task); | 734 int new_thread_id = WillRunWorkerTask(task); |
737 { | 735 { |
738 AutoUnlock unlock(lock_); | 736 AutoUnlock unlock(lock_); |
739 // There may be more work available, so wake up another | 737 // There may be more work available, so wake up another |
740 // worker thread. (Technically not required, since we | 738 // worker thread. (Technically not required, since we |
741 // already get a signal for each new task, but it doesn't | 739 // already get a signal for each new task, but it doesn't |
742 // hurt.) | 740 // hurt.) |
743 SignalHasWork(); | 741 SignalHasWork(); |
(...skipping 536 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1280 void SequencedWorkerPool::Shutdown(int max_new_blocking_tasks_after_shutdown) { | 1278 void SequencedWorkerPool::Shutdown(int max_new_blocking_tasks_after_shutdown) { |
1281 DCHECK(constructor_message_loop_->BelongsToCurrentThread()); | 1279 DCHECK(constructor_message_loop_->BelongsToCurrentThread()); |
1282 inner_->Shutdown(max_new_blocking_tasks_after_shutdown); | 1280 inner_->Shutdown(max_new_blocking_tasks_after_shutdown); |
1283 } | 1281 } |
1284 | 1282 |
1285 bool SequencedWorkerPool::IsShutdownInProgress() { | 1283 bool SequencedWorkerPool::IsShutdownInProgress() { |
1286 return inner_->IsShutdownInProgress(); | 1284 return inner_->IsShutdownInProgress(); |
1287 } | 1285 } |
1288 | 1286 |
1289 } // namespace base | 1287 } // namespace base |
OLD | NEW |