This source file includes following definitions.
- title
- idleTime
- startTime
- endTime
- buildInspectorObjectFor
- buildInspectorObjectForHead
- buildInspectorObjectForSamples
#include "config.h"
#include "core/inspector/ScriptProfile.h"
#include "bindings/v8/V8Binding.h"
#include <v8-profiler.h>
#include "wtf/PassRefPtr.h"
#include "wtf/RefPtr.h"
namespace WebCore {
ScriptProfile::~ScriptProfile()
{
m_profile->Delete();
}
String ScriptProfile::title() const
{
v8::HandleScope scope(v8::Isolate::GetCurrent());
return toCoreString(m_profile->GetTitle());
}
double ScriptProfile::idleTime() const
{
return m_idleTime;
}
double ScriptProfile::startTime() const
{
return static_cast<double>(m_profile->GetStartTime()) / 1000000;
}
double ScriptProfile::endTime() const
{
return static_cast<double>(m_profile->GetEndTime()) / 1000000;
}
static PassRefPtr<TypeBuilder::Profiler::CPUProfileNode> buildInspectorObjectFor(const v8::CpuProfileNode* node)
{
v8::HandleScope handleScope(v8::Isolate::GetCurrent());
RefPtr<TypeBuilder::Array<TypeBuilder::Profiler::CPUProfileNode> > children = TypeBuilder::Array<TypeBuilder::Profiler::CPUProfileNode>::create();
const int childrenCount = node->GetChildrenCount();
for (int i = 0; i < childrenCount; i++) {
const v8::CpuProfileNode* child = node->GetChild(i);
children->addItem(buildInspectorObjectFor(child));
}
RefPtr<TypeBuilder::Profiler::CPUProfileNode> result = TypeBuilder::Profiler::CPUProfileNode::create()
.setFunctionName(toCoreString(node->GetFunctionName()))
.setScriptId(String::number(node->GetScriptId()))
.setUrl(toCoreString(node->GetScriptResourceName()))
.setLineNumber(node->GetLineNumber())
.setColumnNumber(node->GetColumnNumber())
.setHitCount(node->GetHitCount())
.setCallUID(node->GetCallUid())
.setChildren(children.release())
.setDeoptReason(node->GetBailoutReason());
result->setId(node->GetNodeId());
return result.release();
}
PassRefPtr<TypeBuilder::Profiler::CPUProfileNode> ScriptProfile::buildInspectorObjectForHead() const
{
return buildInspectorObjectFor(m_profile->GetTopDownRoot());
}
PassRefPtr<TypeBuilder::Array<int> > ScriptProfile::buildInspectorObjectForSamples() const
{
RefPtr<TypeBuilder::Array<int> > array = TypeBuilder::Array<int>::create();
int count = m_profile->GetSamplesCount();
for (int i = 0; i < count; i++)
array->addItem(m_profile->GetSample(i)->GetNodeId());
return array.release();
}
}