Mercurial > spidermonkey-playground
annotate memory_profiler_server.js @ 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 | 4910bc49a182 |
rev | line source |
---|---|
50
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
1 var socket = new ServerSocket(); |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
2 |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
3 var PORT = 8080; |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
4 |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
5 socket.bind("127.0.0.1", PORT); |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
6 socket.listen(); |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
7 |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
8 var NEWLINE = "\r\n"; |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
9 var DOUBLE_NEWLINE = NEWLINE + NEWLINE; |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
10 |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
11 function getHeaders(conn) { |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
12 var headers = ""; |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
13 while (1) { |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
14 var character = conn.recv(1); |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
15 if (character == null) |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
16 return null; |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
17 headers += character; |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
18 if (headers.indexOf(DOUBLE_NEWLINE) != -1) |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
19 return headers; |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
20 } |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
21 } |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
22 |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
23 print("Waiting for requests on port " + PORT + "."); |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
24 |
52
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
25 function processRequest(socket) { |
50
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
26 var conn = socket.accept(); |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
27 |
52
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
28 try { |
50
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
29 var requestHeaders = getHeaders(conn); |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
30 if (requestHeaders == null) |
52
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
31 return true; |
50
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
32 var requestLines = requestHeaders.split("\r\n"); |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
33 print(requestLines[0]); |
52
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
34 var reqParts = requestLines[0].split(" "); |
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
35 var method = reqParts[0]; |
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
36 var path = reqParts[1]; |
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
37 |
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
38 var code = "200 OK"; |
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
39 var toSend; |
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
40 |
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
41 // TODO: We'd like to set the MIME type of JSON data to application/json, |
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
42 // but Firefox doesn't let us browse a webserver this way, which is |
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
43 // annoying, so we're just leaving it at text/plain for now. |
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
44 |
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
45 if (path == "/gc-roots") |
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
46 toSend = JSON.stringify(getGCRoots()); |
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
47 |
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
48 if (path == "/stop") |
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
49 toSend = "Stopping server now!"; |
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
50 |
54
c451579bf83c
Built out more of the /objects/ method.
Atul Varma <varmaa@toolness.com>
parents:
53
diff
changeset
|
51 var objNum = path.match(/^\/objects\/(\d+)$/); |
53
2b22291fa09a
added a stub for an /objects/(number) RESTful API method.
Atul Varma <varmaa@toolness.com>
parents:
52
diff
changeset
|
52 if (objNum) { |
2b22291fa09a
added a stub for an /objects/(number) RESTful API method.
Atul Varma <varmaa@toolness.com>
parents:
52
diff
changeset
|
53 objNum = objNum[1]; |
54
c451579bf83c
Built out more of the /objects/ method.
Atul Varma <varmaa@toolness.com>
parents:
53
diff
changeset
|
54 var objInfo = getObjectInfo(objNum); |
c451579bf83c
Built out more of the /objects/ method.
Atul Varma <varmaa@toolness.com>
parents:
53
diff
changeset
|
55 if (objInfo) { |
c451579bf83c
Built out more of the /objects/ method.
Atul Varma <varmaa@toolness.com>
parents:
53
diff
changeset
|
56 toSend = JSON.stringify(objInfo); |
c451579bf83c
Built out more of the /objects/ method.
Atul Varma <varmaa@toolness.com>
parents:
53
diff
changeset
|
57 } else { |
c451579bf83c
Built out more of the /objects/ method.
Atul Varma <varmaa@toolness.com>
parents:
53
diff
changeset
|
58 code = "404 Not Found"; |
c451579bf83c
Built out more of the /objects/ method.
Atul Varma <varmaa@toolness.com>
parents:
53
diff
changeset
|
59 toSend = "Object " + objNum + " does not exist."; |
c451579bf83c
Built out more of the /objects/ method.
Atul Varma <varmaa@toolness.com>
parents:
53
diff
changeset
|
60 } |
53
2b22291fa09a
added a stub for an /objects/(number) RESTful API method.
Atul Varma <varmaa@toolness.com>
parents:
52
diff
changeset
|
61 } |
2b22291fa09a
added a stub for an /objects/(number) RESTful API method.
Atul Varma <varmaa@toolness.com>
parents:
52
diff
changeset
|
62 |
52
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
63 if (!toSend) { |
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
64 code = "404 Not Found"; |
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
65 toSend = "Not found, yo."; |
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
66 } |
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
67 |
50
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
68 //print("headers: " + uneval(requestHeaders)); |
52
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
69 var headerLines = ["HTTP/1.0 " + code, |
50
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
70 "Content-Type: text/plain", |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
71 "Connection: close", |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
72 "Content-Length: " + toSend.length]; |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
73 var headers = headerLines.join("\r\n"); |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
74 var response = headers + DOUBLE_NEWLINE + toSend; |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
75 //print("response: " + uneval(response)); |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
76 conn.send(response); |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
77 conn.close(); |
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
78 //print("response sent."); |
52
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
79 } catch (e) { |
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
80 print(e.toString()); |
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
81 try { conn.close(); } catch (e) {} |
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
82 } |
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
83 if (path == "/stop") |
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
84 return false; |
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
85 return true; |
50
853f80bd3b4b
Added tentative profileMemory() server, which suspends the current JS runtime, creates a new one and runs a web server in it.
Atul Varma <varmaa@toolness.com>
parents:
diff
changeset
|
86 } |
52
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
87 |
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
88 while (processRequest(socket)) {} |
a10cb805b5ab
Added RESTful methods for memory tracking.
Atul Varma <varmaa@toolness.com>
parents:
51
diff
changeset
|
89 socket.close(); |