Mercurial > spidermonkey-playground
diff memory_profiler.cpp @ 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 | 8750e9ecf3af |
children | 1aba1b7a0a2c |
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);