changeset 54:c451579bf83c

Built out more of the /objects/ method.
author Atul Varma <varmaa@toolness.com>
date Wed, 24 Jun 2009 18:15:03 -0700
parents 2b22291fa09a
children 1aba1b7a0a2c
files memory_profiler.cpp memory_profiler_server.js
diffstat 2 files changed, 36 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/memory_profiler.cpp	Wed Jun 24 17:53:58 2009 -0700
+++ b/memory_profiler.cpp	Wed Jun 24 18:15:03 2009 -0700
@@ -106,6 +106,32 @@
   return JS_MAP_GCROOT_NEXT;
 }
 
+static JSBool getObjInfo(JSContext *cx, JSObject *obj, uintN argc,
+                         jsval *argv, jsval *rval)
+{
+  uint32 id;
+
+  if (!JS_ConvertArguments(cx, argc, argv, "u", &id))
+    return JS_FALSE;
+
+  JSDHashEntryStub *entry = (JSDHashEntryStub *)
+    JS_DHashTableOperate(&tracingState.visited,
+                         (void *) id,
+                         JS_DHASH_LOOKUP);
+  if (entry == NULL) {
+    JS_ReportOutOfMemory(cx);
+    return JS_FALSE;
+  }
+
+  if (JS_DHASH_ENTRY_IS_BUSY((JSDHashEntryHdr *)entry)) {
+    JSObject *info = JS_NewObject(cx, NULL, NULL, NULL);
+    *rval = OBJECT_TO_JSVAL(info);
+  } else
+    *rval = JSVAL_NULL;
+
+  return JS_TRUE;
+}
+
 static JSBool getGCRoots(JSContext *cx, JSObject *obj, uintN argc,
                          jsval *argv, jsval *rval)
 {
@@ -129,6 +155,7 @@
   JS_FS("print",          print,              1, 0, 0),
   JS_FS("ServerSocket",   createServerSocket, 0, 0, 0),
   JS_FS("getGCRoots",     getGCRoots,         0, 0, 0),
+  JS_FS("getObjectInfo",  getObjInfo,         1, 0, 0),
   JS_FS_END
 };
 
@@ -148,8 +175,6 @@
   tracingState.tracer.callback = traceCallback;
   JS_TraceRuntime(&tracingState.tracer);
 
-  JS_DHashTableFinish(&tracingState.visited);
-
   if (!tracingState.result)
     return JS_FALSE;
 
@@ -207,6 +232,7 @@
   }
 
   /* Cleanup. */
+  JS_DHashTableFinish(&tracingState.visited);
   JS_DestroyContext(serverCx);
   JS_DestroyRuntime(serverRuntime);
 
--- a/memory_profiler_server.js	Wed Jun 24 17:53:58 2009 -0700
+++ b/memory_profiler_server.js	Wed Jun 24 18:15:03 2009 -0700
@@ -48,10 +48,16 @@
     if (path == "/stop")
       toSend = "Stopping server now!";
 
-    var objNum = path.match(/^\/objects\/(.+)$/);
+    var objNum = path.match(/^\/objects\/(\d+)$/);
     if (objNum) {
       objNum = objNum[1];
-      toSend = "TODO: Put object information here.";
+      var objInfo = getObjectInfo(objNum);
+      if (objInfo) {
+        toSend = JSON.stringify(objInfo);
+      } else {
+        code = "404 Not Found";
+        toSend = "Object " + objNum + " does not exist.";
+      }
     }
 
     if (!toSend) {