Index: Source/platform/scheduler/Scheduler.cpp |
diff --git a/Source/platform/scheduler/Scheduler.cpp b/Source/platform/scheduler/Scheduler.cpp |
index fb331ac6e3766aad23db042059ad0c43b549bb18..e66c49b351a996e9a6b39a9b1bc9312a56048b3e 100644 |
--- a/Source/platform/scheduler/Scheduler.cpp |
+++ b/Source/platform/scheduler/Scheduler.cpp |
@@ -73,8 +73,8 @@ public: |
class Scheduler::MainThreadPendingTaskRunner : public WebThread::Task { |
public: |
MainThreadPendingTaskRunner( |
- const Scheduler::Task& task, const TraceLocation& location) |
- : m_task(task, location) |
+ const Scheduler::Task& task, const TraceLocation& location, const char* traceName, int flowTraceID) |
+ : m_task(task, location, traceName, flowTraceID) |
{ |
ASSERT(Scheduler::shared()); |
} |
@@ -90,7 +90,7 @@ public: |
m_task.run(); |
} |
- Scheduler::TracedTask m_task; |
+ TracedTask m_task; |
}; |
Scheduler* Scheduler::s_sharedScheduler = nullptr; |
@@ -115,6 +115,9 @@ Scheduler::Scheduler() |
: m_sharedTimerFunction(nullptr) |
, m_mainThread(blink::Platform::current()->currentThread()) |
, m_highPriorityTaskCount(0) |
+ // Flow trace ID begins as the 'this' pointer to help ensure different scheduler |
+ // instances don't generate identical IDs |
+ , m_nextFlowTraceID(static_cast<int>(reinterpret_cast<intptr_t>(this))) |
, m_highPriorityTaskRunnerPosted(false) |
{ |
} |
@@ -126,31 +129,39 @@ Scheduler::~Scheduler() |
} |
} |
+int Scheduler::generateFlowTraceID() |
+{ |
+ return atomicIncrement(&m_nextFlowTraceID); |
+} |
+ |
void Scheduler::scheduleIdleTask(const TraceLocation& location, const IdleTask& idleTask) |
{ |
// TODO: send a real allottedTime here. |
m_mainThread->postTask(new MainThreadIdleTaskAdapter(idleTask, 0, location)); |
} |
+void Scheduler::postHighPriorityTaskInternal(const TraceLocation& location, const Task& task, const char* traceName) |
+{ |
+ Locker<Mutex> lock(m_pendingTasksMutex); |
+ |
+ m_pendingHighPriorityTasks.append(TracedTask(task, location, traceName, generateFlowTraceID())); |
eseidel
2014/09/02 16:19:25
Unfortunate we always generate these trace ids. a
picksi1
2014/09/03 16:32:57
I've moved ID generation into TracedTasks and only
|
+ atomicIncrement(&m_highPriorityTaskCount); |
+ maybePostMainThreadPendingHighPriorityTaskRunner(); |
+} |
+ |
void Scheduler::postTask(const TraceLocation& location, const Task& task) |
{ |
- m_mainThread->postTask(new MainThreadPendingTaskRunner(task, location)); |
+ m_mainThread->postTask(new MainThreadPendingTaskRunner(task, location, "Scheduler::MainThreadTask", generateFlowTraceID())); |
} |
void Scheduler::postInputTask(const TraceLocation& location, const Task& task) |
{ |
- Locker<Mutex> lock(m_pendingTasksMutex); |
- m_pendingHighPriorityTasks.append(TracedTask(task, location)); |
- atomicIncrement(&m_highPriorityTaskCount); |
- maybePostMainThreadPendingHighPriorityTaskRunner(); |
+ postHighPriorityTaskInternal(location, task, "Scheduler::InputTask"); |
} |
void Scheduler::postCompositorTask(const TraceLocation& location, const Task& task) |
{ |
- Locker<Mutex> lock(m_pendingTasksMutex); |
- m_pendingHighPriorityTasks.append(TracedTask(task, location)); |
- atomicIncrement(&m_highPriorityTaskCount); |
- maybePostMainThreadPendingHighPriorityTaskRunner(); |
+ postHighPriorityTaskInternal(location, task, "Scheduler::CompositorTask"); |
} |
void Scheduler::maybePostMainThreadPendingHighPriorityTaskRunner() |
@@ -256,12 +267,4 @@ bool Scheduler::hasPendingHighPriorityWork() const |
return acquireLoad(&m_highPriorityTaskCount) != 0; |
} |
-void Scheduler::TracedTask::run() |
-{ |
- TRACE_EVENT2("blink", "TracedTask::run", |
- "src_file", m_location.fileName(), |
- "src_func", m_location.functionName()); |
- m_task(); |
-} |
- |
} // namespace blink |