Expose the ProfileNode functionName sorting functions on
[WebKit-https.git] / WebCore / page / JavaScriptProfileNode.cpp
index 4dae4f5..a6b0cf3 100644 (file)
@@ -125,7 +125,7 @@ static JSValueRef getChildren(JSContextRef ctx, JSObjectRef thisObject, JSString
         return JSValueMakeUndefined(ctx);
 
     ProfileNode* profileNode = static_cast<ProfileNode*>(JSObjectGetPrivate(thisObject));
-    const Deque<RefPtr<ProfileNode> >& children = profileNode->children();
+    const Vector<RefPtr<ProfileNode> >& children = profileNode->children();
 
     JSObjectRef global = JSContextGetGlobalObject(ctx);
 
@@ -153,7 +153,7 @@ static JSValueRef getChildren(JSContextRef ctx, JSObjectRef thisObject, JSString
     if (exception && *exception)
         return JSValueMakeUndefined(ctx);
 
-    for (Deque<RefPtr<ProfileNode> >::const_iterator it = children.begin(); it != children.end(); ++it) {
+    for (Vector<RefPtr<ProfileNode> >::const_iterator it = children.begin(); it != children.end(); ++it) {
         JSValueRef arg0 = toRef(toJS(toJS(ctx), (*it).get() ));
         JSObjectCallAsFunction(ctx, pushFunction, result, 1, &arg0, exception);
         if (exception && *exception)
@@ -163,6 +163,94 @@ static JSValueRef getChildren(JSContextRef ctx, JSObjectRef thisObject, JSString
     return result;
 }
 
+static JSValueRef sortTotalTimeDescending(JSContextRef ctx, JSObjectRef /*function*/, JSObjectRef thisObject, size_t /*argumentCount*/, const JSValueRef[] /*arguments*/, JSValueRef* /*exception*/)
+{
+    if (!JSValueIsObjectOfClass(ctx, thisObject, ProfileNodeClass()))
+        return JSValueMakeUndefined(ctx);
+
+    ProfileNode* profileNode = static_cast<ProfileNode*>(JSObjectGetPrivate(thisObject));
+    profileNode->sortTotalTimeDescending();
+
+    return JSValueMakeUndefined(ctx);
+}
+
+static JSValueRef sortTotalTimeAscending(JSContextRef ctx, JSObjectRef /*function*/, JSObjectRef thisObject, size_t /*argumentCount*/, const JSValueRef[] /*arguments*/, JSValueRef* /*exception*/)
+{
+    if (!JSValueIsObjectOfClass(ctx, thisObject, ProfileNodeClass()))
+        return JSValueMakeUndefined(ctx);
+
+    ProfileNode* profileNode = static_cast<ProfileNode*>(JSObjectGetPrivate(thisObject));
+    profileNode->sortTotalTimeAscending();
+
+    return JSValueMakeUndefined(ctx);
+}
+
+static JSValueRef sortSelfTimeDescending(JSContextRef ctx, JSObjectRef /*function*/, JSObjectRef thisObject, size_t /*argumentCount*/, const JSValueRef[] /*arguments*/, JSValueRef* /*exception*/)
+{
+    if (!JSValueIsObjectOfClass(ctx, thisObject, ProfileNodeClass()))
+        return JSValueMakeUndefined(ctx);
+
+    ProfileNode* profileNode = static_cast<ProfileNode*>(JSObjectGetPrivate(thisObject));
+    profileNode->sortSelfTimeDescending();
+
+    return JSValueMakeUndefined(ctx);
+}
+
+static JSValueRef sortSelfTimeAscending(JSContextRef ctx, JSObjectRef /*function*/, JSObjectRef thisObject, size_t /*argumentCount*/, const JSValueRef[] /*arguments*/, JSValueRef* /*exception*/)
+{
+    if (!JSValueIsObjectOfClass(ctx, thisObject, ProfileNodeClass()))
+        return JSValueMakeUndefined(ctx);
+
+    ProfileNode* profileNode = static_cast<ProfileNode*>(JSObjectGetPrivate(thisObject));
+    profileNode->sortSelfTimeAscending();
+
+    return JSValueMakeUndefined(ctx);
+}
+
+static JSValueRef sortCallsDescending(JSContextRef ctx, JSObjectRef /*function*/, JSObjectRef thisObject, size_t /*argumentCount*/, const JSValueRef[] /*arguments*/, JSValueRef* /*exception*/)
+{
+    if (!JSValueIsObjectOfClass(ctx, thisObject, ProfileNodeClass()))
+        return JSValueMakeUndefined(ctx);
+
+    ProfileNode* profileNode = static_cast<ProfileNode*>(JSObjectGetPrivate(thisObject));
+    profileNode->sortCallsDescending();
+
+    return JSValueMakeUndefined(ctx);
+}
+
+static JSValueRef sortCallsAscending(JSContextRef ctx, JSObjectRef /*function*/, JSObjectRef thisObject, size_t /*argumentCount*/, const JSValueRef[] /*arguments*/, JSValueRef* /*exception*/)
+{
+    if (!JSValueIsObjectOfClass(ctx, thisObject, ProfileNodeClass()))
+        return JSValueMakeUndefined(ctx);
+
+    ProfileNode* profileNode = static_cast<ProfileNode*>(JSObjectGetPrivate(thisObject));
+    profileNode->sortCallsAscending();
+
+    return JSValueMakeUndefined(ctx);
+}
+
+static JSValueRef sortFunctionNameDescending(JSContextRef ctx, JSObjectRef /*function*/, JSObjectRef thisObject, size_t /*argumentCount*/, const JSValueRef[] /*arguments*/, JSValueRef* /*exception*/)
+{
+    if (!JSValueIsObjectOfClass(ctx, thisObject, ProfileNodeClass()))
+        return JSValueMakeUndefined(ctx);
+
+    ProfileNode* profileNode = static_cast<ProfileNode*>(JSObjectGetPrivate(thisObject));
+    profileNode->sortFunctionNameDescending();
+
+    return JSValueMakeUndefined(ctx);
+}
+
+static JSValueRef sortFunctionNameAscending(JSContextRef ctx, JSObjectRef /*function*/, JSObjectRef thisObject, size_t /*argumentCount*/, const JSValueRef[] /*arguments*/, JSValueRef* /*exception*/)
+{
+    if (!JSValueIsObjectOfClass(ctx, thisObject, ProfileNodeClass()))
+        return JSValueMakeUndefined(ctx);
+
+    ProfileNode* profileNode = static_cast<ProfileNode*>(JSObjectGetPrivate(thisObject));
+    profileNode->sortFunctionNameAscending();
+
+    return JSValueMakeUndefined(ctx);
+}
+
 static void finalize(JSObjectRef object)
 {
     ProfileNode* profileNode = static_cast<ProfileNode*>(JSObjectGetPrivate(object));
@@ -183,8 +271,20 @@ JSClassRef ProfileNodeClass()
         { 0, 0, 0, 0 }
     };
 
+    static JSStaticFunction staticFunctions[] = {
+        { "sortTotalTimeDescending", sortTotalTimeDescending, kJSPropertyAttributeNone },
+        { "sortTotalTimeAscending", sortTotalTimeAscending, kJSPropertyAttributeNone },
+        { "sortSelfTimeDescending", sortSelfTimeDescending, kJSPropertyAttributeNone },
+        { "sortSelfTimeAscending", sortSelfTimeAscending, kJSPropertyAttributeNone },
+        { "sortCallsDescending", sortCallsDescending, kJSPropertyAttributeNone },
+        { "sortCallsAscending", sortCallsAscending, kJSPropertyAttributeNone },
+        { "sortFunctionNameDescending", sortFunctionNameDescending, kJSPropertyAttributeNone },
+        { "sortFunctionNameAscending", sortFunctionNameAscending, kJSPropertyAttributeNone },
+        { 0, 0, 0 }
+    };
+
     static JSClassDefinition classDefinition = {
-        0, kJSClassAttributeNone, "ProfileNode", 0, staticValues, 0,
+        0, kJSClassAttributeNone, "ProfileNode", 0, staticValues, staticFunctions,
         0, finalize, 0, 0, 0, 0, 0, 0, 0, 0, 0
     };
 
@@ -206,7 +306,6 @@ JSValue* toJS(ExecState* exec, ProfileNode* ProfileNode)
     ProfileNodeWrapper = toJS(JSObjectMake(toRef(exec), ProfileNodeClass(), static_cast<void*>(ProfileNode)));
     ProfileNodeCache().set(ProfileNode, ProfileNodeWrapper);
     return ProfileNodeWrapper;
-
 }