summaryrefslogtreecommitdiffstats
path: root/WebCore/bindings/v8/ScriptProfile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/bindings/v8/ScriptProfile.cpp')
-rw-r--r--WebCore/bindings/v8/ScriptProfile.cpp33
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