Mercurial > spidermonkey-playground
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) {