diff options
Diffstat (limited to 'WebCore/bindings/v8/ScriptProfile.cpp')
-rw-r--r-- | WebCore/bindings/v8/ScriptProfile.cpp | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/WebCore/bindings/v8/ScriptProfile.cpp b/WebCore/bindings/v8/ScriptProfile.cpp index 3b71d5f..32e0066 100644 --- a/WebCore/bindings/v8/ScriptProfile.cpp +++ b/WebCore/bindings/v8/ScriptProfile.cpp @@ -29,12 +29,13 @@ */ #include "config.h" - #include "ScriptProfile.h" +#include "InspectorValues.h" #include "V8Binding.h" - #include <v8-profiler.h> +#include <wtf/PassRefPtr.h> +#include <wtf/RefPtr.h> namespace WebCore { @@ -54,4 +55,32 @@ PassRefPtr<ScriptProfileNode> ScriptProfile::head() const return ScriptProfileNode::create(m_profile->GetTopDownRoot()); } +static PassRefPtr<InspectorObject> buildInspectorObjectFor(const v8::CpuProfileNode* node) +{ + v8::HandleScope handleScope; + RefPtr<InspectorObject> result = InspectorObject::create(); + result->setString("functionName", toWebCoreString(node->GetFunctionName())); + result->setString("url", toWebCoreString(node->GetScriptResourceName())); + result->setNumber("lineNumber", node->GetLineNumber()); + result->setNumber("totalTime", node->GetTotalTime()); + result->setNumber("selfTime", node->GetSelfTime()); + result->setNumber("numberOfCalls", 0); + result->setBool("visible", true); + result->setNumber("callUID", node->GetCallUid()); + + RefPtr<InspectorArray> children = InspectorArray::create(); + const int childrenCount = node->GetChildrenCount(); + for (int i = 0; i < childrenCount; i++) { + const v8::CpuProfileNode* child = node->GetChild(i); + children->push(buildInspectorObjectFor(child)); + } + result->set("children", children); + return result; +} + +PassRefPtr<InspectorObject> ScriptProfile::buildInspectorObjectForHead() const +{ + return buildInspectorObjectFor(m_profile->GetTopDownRoot()); +} + } // namespace WebCore |