Bug 1089514, Patch 1: Some traced tasks/runnables have record of dispatch, but no records of execution, r=thinker.

---
 tools/profiler/TracedTaskCommon.cpp |   19 +++++--------------
 tools/profiler/TracedTaskCommon.h   |   12 ++++++++----
 xpcom/threads/TimerThread.cpp       |    2 ++
 xpcom/threads/nsTimerImpl.cpp       |    3 +++
 xpcom/threads/nsTimerImpl.h         |    2 +-
 5 files changed, 19 insertions(+), 19 deletions(-)
This commit is contained in:
Gina Yeh 2014-11-04 17:42:03 +08:00
parent 1ac9040f4a
commit 5b9fc5f42c
5 changed files with 19 additions and 19 deletions

View File

@ -107,13 +107,6 @@ FakeTracedTask::FakeTracedTask(int* aVptr)
LogVirtualTablePtr(mTaskId, mSourceEventId, aVptr);
}
FakeTracedTask::FakeTracedTask(const FakeTracedTask& aTask)
{
mTaskId = aTask.mTaskId;
mSourceEventId = aTask.mSourceEventId;
mSourceEventType = aTask.mSourceEventType;
}
void
FakeTracedTask::BeginFakeTracedTask()
{
@ -129,19 +122,17 @@ FakeTracedTask::EndFakeTracedTask()
}
AutoRunFakeTracedTask::AutoRunFakeTracedTask(FakeTracedTask* aFakeTracedTask)
: mInitialized(false)
: mFakeTracedTask(aFakeTracedTask)
{
if (aFakeTracedTask) {
mInitialized = true;
mFakeTracedTask = *aFakeTracedTask;
mFakeTracedTask.BeginFakeTracedTask();
if (mFakeTracedTask) {
mFakeTracedTask->BeginFakeTracedTask();
}
}
AutoRunFakeTracedTask::~AutoRunFakeTracedTask()
{
if (mInitialized) {
mFakeTracedTask.EndFakeTracedTask();
if (mFakeTracedTask) {
mFakeTracedTask->EndFakeTracedTask();
}
}

View File

@ -75,11 +75,16 @@ private:
class FakeTracedTask : public TracedTaskCommon
{
public:
FakeTracedTask() : TracedTaskCommon() {}
NS_INLINE_DECL_REFCOUNTING(FakeTracedTask)
FakeTracedTask(int* aVptr);
FakeTracedTask(const FakeTracedTask& aTask);
void BeginFakeTracedTask();
void EndFakeTracedTask();
private:
// No copy allowed.
FakeTracedTask() MOZ_DELETE;
FakeTracedTask(const FakeTracedTask& aTask) MOZ_DELETE;
FakeTracedTask& operator=(const FakeTracedTask& aTask) MOZ_DELETE;
};
class AutoRunFakeTracedTask
@ -88,8 +93,7 @@ public:
AutoRunFakeTracedTask(FakeTracedTask* aFakeTracedTask);
~AutoRunFakeTracedTask();
private:
FakeTracedTask mFakeTracedTask;
bool mInitialized;
nsRefPtr<FakeTracedTask> mFakeTracedTask;
};
} // namespace tasktracer

View File

@ -460,6 +460,8 @@ TimerThread::AddTimerInternal(nsTimerImpl* aTimer)
NS_ADDREF(aTimer);
#ifdef MOZ_TASK_TRACER
// Create a FakeTracedTask, and dispatch it here. This is the start point of
// the latency.
aTimer->DispatchTracedTask();
#endif

View File

@ -560,6 +560,9 @@ nsTimerImpl::Fire()
js::ProfileEntry::Category::OTHER);
#ifdef MOZ_TASK_TRACER
// mTracedTask is an instance of FakeTracedTask created by
// DispatchTracedTask(). AutoRunFakeTracedTask logs the begin/end time of the
// timer/FakeTracedTask instance in ctor/dtor.
mozilla::tasktracer::AutoRunFakeTracedTask runTracedTask(mTracedTask);
#endif

View File

@ -152,7 +152,7 @@ private:
TimeStamp mTimeout;
#ifdef MOZ_TASK_TRACER
nsAutoPtr<mozilla::tasktracer::FakeTracedTask> mTracedTask;
nsRefPtr<mozilla::tasktracer::FakeTracedTask> mTracedTask;
#endif
#ifdef DEBUG_TIMERS