m_startTime = getCurrentUTCTime();
}
-FunctionCallProfile::~FunctionCallProfile()
-{
- deleteAllValues(m_children);
-}
-
-
void FunctionCallProfile::willExecute()
{
m_startTime = getCurrentUTCTime();
}
}
-void FunctionCallProfile::addChild(FunctionCallProfile* child)
+void FunctionCallProfile::addChild(PassRefPtr<FunctionCallProfile> prpChild)
{
- if (!child)
- return;
+ ASSERT(prpChild);
+ RefPtr<FunctionCallProfile> child = prpChild;
for (StackIterator currentChild = m_children.begin(); currentChild != m_children.end(); ++currentChild) {
if ((*currentChild)->functionName() == child->functionName())
return;
}
- m_children.append(child);
+ m_children.append(child.release());
}
FunctionCallProfile* FunctionCallProfile::findChild(const UString& name)
{
for (StackIterator currentChild = m_children.begin(); currentChild != m_children.end(); ++currentChild) {
if ((*currentChild)->functionName() == name)
- return *currentChild;
+ return (*currentChild).get();
}
return 0;
for (int i = 0; i < indentLevel; ++i)
printf(" ");
- printf("%.0fms %s\n", m_timeSum, m_functionName.UTF8String().c_str());
+ printf("%.3fms %s\n", m_timeSum, m_functionName.UTF8String().c_str());
} else
printf("%s\n", m_functionName.UTF8String().c_str());
}
// print the profiled data in a format that matches the tool sample's output.
-double FunctionCallProfile::printDataSampleStyle(int indentLevel) const
+double FunctionCallProfile::printDataSampleStyle(int indentLevel, FunctionCallHashCount& countedFunctions) const
{
printf(" ");
// Print function names
+ const char* name = m_functionName.UTF8String().c_str();
+ double sampleCount = m_timeSum * 1000;
if (indentLevel) {
for (int i = 0; i < indentLevel; ++i)
printf(" ");
- // We've previously asserted that m_timeSum will always be >= 1
- printf("%.0f %s\n", m_timeSum ? m_timeSum : 1, m_functionName.UTF8String().c_str());
+ countedFunctions.add(m_functionName.rep());
+
+ printf("%.0f %s\n", sampleCount ? sampleCount : 1, name);
} else
- printf("%s\n", m_functionName.UTF8String().c_str());
+ printf("%s\n", name);
++indentLevel;
// Print children's names and information
- double sumOfChildrensTimes = 0.0;
+ double sumOfChildrensCount = 0.0;
for (StackIterator currentChild = m_children.begin(); currentChild != m_children.end(); ++currentChild)
- sumOfChildrensTimes += (*currentChild)->printDataSampleStyle(indentLevel);
+ sumOfChildrensCount += (*currentChild)->printDataSampleStyle(indentLevel, countedFunctions);
- // Print remainder of time to match sample's output
- if (sumOfChildrensTimes < m_timeSum) {
+ sumOfChildrensCount *= 1000; //
+ // Print remainder of samples to match sample's output
+ if (sumOfChildrensCount < sampleCount) {
printf(" ");
while (indentLevel--)
printf(" ");
- printf("%f %s\n", m_timeSum - sumOfChildrensTimes, m_functionName.UTF8String().c_str());
+ printf("%.0f %s\n", sampleCount - sumOfChildrensCount, m_functionName.UTF8String().c_str());
}
return m_timeSum;