Index: Source/core/inspector/ScriptProfile.cpp |
diff --git a/Source/core/inspector/ScriptProfile.cpp b/Source/core/inspector/ScriptProfile.cpp |
index e835b01121c0b3a0674f58813e6f8bff186ba6a6..8b7b1216fcfe51f42a5a257ecc0ccd07ef65221e 100644 |
--- a/Source/core/inspector/ScriptProfile.cpp |
+++ b/Source/core/inspector/ScriptProfile.cpp |
@@ -64,6 +64,26 @@ double ScriptProfile::endTime() const |
return static_cast<double>(m_profile->GetEndTime()) / 1000000; |
} |
+static RefPtr<TypeBuilder::Array<TypeBuilder::Profiler::LineTick> > buildInspectorObjectForLineTicks(const v8::CpuProfileNode* node) |
+{ |
+ RefPtr<TypeBuilder::Array<TypeBuilder::Profiler::LineTick> > array = TypeBuilder::Array<TypeBuilder::Profiler::LineTick>::create(); |
+ unsigned lineCount = node->GetHitLineCount(); |
+ if (lineCount) { |
apavlov
2014/11/13 09:08:30
We prefer early bail-outs (this saves indentation
Pan
2014/11/17 01:14:22
Done.
|
+ Vector<v8::CpuProfileNode::LineTick> entries(lineCount); |
+ bool res = node->GetLineTicks(&entries[0], lineCount); |
apavlov
2014/11/13 09:08:30
This can be inlined into the conditional.
Pan
2014/11/17 01:14:22
Done.
|
+ if (res) { |
+ for (unsigned i = 0; i < lineCount; i++) { |
+ RefPtr<TypeBuilder::Profiler::LineTick> line = TypeBuilder::Profiler::LineTick::create() |
+ .setLine(entries[i].line) |
+ .setTicks(entries[i].hit_count); |
+ array->addItem(line); |
apavlov
2014/11/13 09:08:30
line.release()
Pan
2014/11/17 01:14:22
Done.
|
+ line.release(); |
apavlov
2014/11/13 09:08:30
Remove this line, as it makes no sense this way. l
Pan
2014/11/17 01:14:22
Done.
|
+ } |
+ } |
+ } |
+ return array; |
+} |
+ |
static PassRefPtr<TypeBuilder::Profiler::CPUProfileNode> buildInspectorObjectFor(const v8::CpuProfileNode* node) |
{ |
v8::HandleScope handleScope(v8::Isolate::GetCurrent()); |
@@ -75,6 +95,8 @@ static PassRefPtr<TypeBuilder::Profiler::CPUProfileNode> buildInspectorObjectFor |
children->addItem(buildInspectorObjectFor(child)); |
} |
+ RefPtr<TypeBuilder::Array<TypeBuilder::Profiler::LineTick> > lineTicks = buildInspectorObjectForLineTicks(node); |
+ |
RefPtr<TypeBuilder::Profiler::CPUProfileNode> result = TypeBuilder::Profiler::CPUProfileNode::create() |
.setFunctionName(toCoreString(node->GetFunctionName())) |
.setScriptId(String::number(node->GetScriptId())) |
@@ -84,6 +106,7 @@ static PassRefPtr<TypeBuilder::Profiler::CPUProfileNode> buildInspectorObjectFor |
.setHitCount(node->GetHitCount()) |
.setCallUID(node->GetCallUid()) |
.setChildren(children.release()) |
+ .setLineTicks(lineTicks.release()) |
.setDeoptReason(node->GetBailoutReason()) |
.setId(node->GetNodeId()); |
return result.release(); |