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 90f89fe3b0eaf2f564eeeed3df3f2f3917a289b4..d66a9306e26246b781f6fe3e6b324e70f7392c4f 100644 |
--- a/content/renderer/scheduler/task_queue_manager.cc |
+++ b/content/renderer/scheduler/task_queue_manager.cc |
@@ -77,7 +77,7 @@ class TaskQueue : public base::SingleThreadTaskRunner { |
TaskQueueManager::WorkQueueUpdateEventType event_type); |
void EnqueueTaskLocked(const base::PendingTask& pending_task); |
- void TraceWorkQueueSize() const; |
+ void TraceQueueSize(bool is_locked) const; |
static const char* PumpPolicyToString( |
TaskQueueManager::PumpPolicy pump_policy); |
static void QueueAsValueInto(const base::TaskQueue& queue, |
@@ -181,7 +181,7 @@ bool TaskQueue::UpdateWorkQueue( |
if (!ShouldAutoPumpQueueLocked(event_type)) |
return false; |
work_queue_.Swap(&incoming_queue_); |
- TraceWorkQueueSize(); |
+ TraceQueueSize(true); |
return true; |
} |
} |
@@ -189,15 +189,24 @@ bool TaskQueue::UpdateWorkQueue( |
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) |
+ 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) { |
@@ -224,6 +233,7 @@ void TaskQueue::EnqueueTaskLocked(const base::PendingTask& pending_task) { |
// before getting here. |
incoming_queue_.back().delayed_run_time = base::TimeTicks(); |
} |
+ TraceQueueSize(true); |
} |
void TaskQueue::SetPumpPolicy(TaskQueueManager::PumpPolicy pump_policy) { |