Chromium Code Reviews| Index: content/renderer/scheduler/task_queue_manager.cc |
| diff --git a/content/renderer/scheduler/task_queue_manager.cc b/content/renderer/scheduler/task_queue_manager.cc |
| index 112a37ca33c120b61319a12d587106335badfaf0..0c3fcf58a4f91350f8f968b8e98fea23c1848eb9 100644 |
| --- a/content/renderer/scheduler/task_queue_manager.cc |
| +++ b/content/renderer/scheduler/task_queue_manager.cc |
| @@ -69,7 +69,7 @@ class TaskQueue : public base::SingleThreadTaskRunner { |
| void PumpQueueLocked(); |
| void EnqueueTaskLocked(const base::PendingTask& pending_task); |
| - void TraceWorkQueueSize() const; |
| + void TraceQueueSize(bool is_locked) const; |
| static void QueueAsValueInto(const base::TaskQueue& queue, |
| base::trace_event::TracedValue* state); |
| static void TaskAsValueInto(const base::PendingTask& task, |
| @@ -155,7 +155,7 @@ bool TaskQueue::UpdateWorkQueue(base::TimeTicks* next_pending_delayed_task) { |
| if (!auto_pump_ || incoming_queue_.empty()) |
| return false; |
| work_queue_.Swap(&incoming_queue_); |
| - TraceWorkQueueSize(); |
| + TraceQueueSize(true); |
| return true; |
| } |
| } |
| @@ -163,15 +163,24 @@ bool TaskQueue::UpdateWorkQueue(base::TimeTicks* next_pending_delayed_task) { |
| base::PendingTask TaskQueue::TakeTaskFromWorkQueue() { |
| base::PendingTask pending_task = work_queue_.front(); |
| work_queue_.pop(); |
| - TraceWorkQueueSize(); |
| + TraceQueueSize(false); |
| return pending_task; |
| } |
| -void TaskQueue::TraceWorkQueueSize() const { |
| - if (!name_) |
| +void TaskQueue::TraceQueueSize(bool is_locked) const { |
| + bool is_tracing; |
| + TRACE_EVENT_CATEGORY_GROUP_ENABLED( |
| + TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), &is_tracing); |
| + if (!is_tracing || !name_) |
| return; |
| + if (!is_locked) |
|
alex clarke (OOO till 29th)
2015/02/25 12:37:51
Did you consider using lock_.Try() here?
alex clarke (OOO till 29th)
2015/02/25 12:38:51
Ah you can't do that on the same thread.
|
| + lock_.Acquire(); |
| + else |
| + lock_.AssertAcquired(); |
| TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), name_, |
| - work_queue_.size()); |
| + incoming_queue_.size() + work_queue_.size()); |
| + if (!is_locked) |
| + lock_.Release(); |
| } |
| void TaskQueue::EnqueueTask(const base::PendingTask& pending_task) { |
| @@ -197,6 +206,7 @@ void TaskQueue::EnqueueTaskLocked(const base::PendingTask& pending_task) { |
| // before getting here. |
| incoming_queue_.back().delayed_run_time = base::TimeTicks(); |
| } |
| + TraceQueueSize(true); |
| } |
| void TaskQueue::SetAutoPump(bool auto_pump) { |