summaryrefslogtreecommitdiffstats
path: root/content/renderer/scheduler
diff options
context:
space:
mode:
authorskyostil <skyostil@chromium.org>2015-02-25 05:46:42 -0800
committerCommit bot <commit-bot@chromium.org>2015-02-25 13:47:34 +0000
commit294c455b12087569af1d3a8b94c95e3ae80ad718 (patch)
treeb551f916c2957d6e6a79f46296b0df862b09bdc4 /content/renderer/scheduler
parentbb9a196b882764b9984ae1b924683361fb00ea09 (diff)
downloadchromium_src-294c455b12087569af1d3a8b94c95e3ae80ad718.zip
chromium_src-294c455b12087569af1d3a8b94c95e3ae80ad718.tar.gz
chromium_src-294c455b12087569af1d3a8b94c95e3ae80ad718.tar.bz2
scheduler: Trace queue size at post time
Trace the task queue size when a task gets posted into it in addition to when we reload the work queue. This makes it easier to see when tasks are posted from a trace. Review URL: https://codereview.chromium.org/954833005 Cr-Commit-Position: refs/heads/master@{#318038}
Diffstat (limited to 'content/renderer/scheduler')
-rw-r--r--content/renderer/scheduler/task_queue_manager.cc22
1 files changed, 16 insertions, 6 deletions
diff --git a/content/renderer/scheduler/task_queue_manager.cc b/content/renderer/scheduler/task_queue_manager.cc
index 90f89fe..d66a930 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) {