Created
March 28, 2010 09:14
-
-
Save zoka/346667 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/src/node.cc b/src/node.cc | |
index 452c111..9395814 100644 | |
--- a/src/node.cc | |
+++ b/src/node.cc | |
@@ -1062,6 +1062,47 @@ static Handle<Value> CheckBreak(const Arguments& args) { | |
return Undefined(); | |
} | |
+ // monotonic time stamp recorded when Node app was started | |
+static double startup_time; | |
+ | |
+#ifdef __APPLE__ | |
+ | |
+#include <mach/mach_time.h> | |
+ | |
+static double monotonic_msec() { | |
+ | |
+ static mach_timebase_info_data_t clock_gettime_inf; | |
+ uint64_t now, nano; | |
+ | |
+ now = mach_absolute_time(); | |
+ | |
+ if (0 == clock_gettime_inf.denom) | |
+ mach_timebase_info(&clock_gettime_inf); | |
+ | |
+ nano = now * clock_gettime_inf.numer / clock_gettime_inf.denom; | |
+ return (double) nano * 1e-6; | |
+} | |
+ | |
+#else | |
+ | |
+static double monotonic_msec() { | |
+ | |
+ timespec ts; | |
+ | |
+ clock_gettime(CLOCK_MONOTONIC, &ts); | |
+ return (double) ts.tv_sec * 1e3 + (double) ts.tv_nsec * 1e-6; | |
+} | |
+ | |
+#endif | |
+ | |
+static Handle<Value> Uptime(const Arguments& args) { | |
+ HandleScope scope; | |
+ | |
+ Local <Number> ret = Number::New(monotonic_msec() - startup_time); | |
+ return scope.Close(ret); | |
+} | |
+ | |
+ | |
Persistent<Object> binding_cache; | |
static Handle<Value> Binding(const Arguments& args) { | |
@@ -1295,6 +1336,7 @@ static void Load(int argc, char *argv[]) { | |
NODE_SET_METHOD(process, "kill", Kill); | |
NODE_SET_METHOD(process, "memoryUsage", MemoryUsage); | |
NODE_SET_METHOD(process, "checkBreak", CheckBreak); | |
+ NODE_SET_METHOD(process, "uptime", Uptime); | |
NODE_SET_METHOD(process, "binding", Binding); | |
@@ -1341,6 +1383,9 @@ static void Load(int argc, char *argv[]) { | |
Local<Value> args[1] = { Local<Value>::New(process) }; | |
+ // record startup_time | |
+ startup_time = monotonic_msec(); | |
+ | |
f->Call(global, 1, args); | |
#ifndef NDEBUG |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <time.h> | |
#include <stdio.h> | |
#include <unistd.h> | |
// compile on OS X: g++ -o uptime_test uptime_test.cc | |
// compile Linux: g++ -o uptime_test uptime_test.cc -lrt | |
#ifdef __APPLE__ | |
#include <mach/mach_time.h> | |
static double monotonic_msec() { | |
static mach_timebase_info_data_t clock_gettime_inf; | |
uint64_t now, nano; | |
now = mach_absolute_time(); | |
if (0 == clock_gettime_inf.denom) | |
mach_timebase_info(&clock_gettime_inf); | |
nano = now * clock_gettime_inf.numer / clock_gettime_inf.denom; | |
return (double) nano * 1e-6; | |
} | |
#else | |
static double monotonic_msec() { | |
timespec ts; | |
clock_gettime(CLOCK_MONOTONIC, &ts); | |
return (double) ts.tv_sec * 1e3 + (double) ts.tv_nsec * 1e-6; | |
} | |
#endif | |
static double startup_time; | |
static int unique_deltas; | |
static double Uptime() { | |
return monotonic_msec() - startup_time; | |
} | |
int main() { | |
int i; | |
static int deltas[100000]; | |
double f,s; | |
int d; | |
startup_time = monotonic_msec(); | |
for (i = 0; i < 1000000; i++) | |
{ | |
f = Uptime(); | |
s = Uptime(); | |
d = (int) ((s-f)*1e6); | |
if (d < 100000) | |
deltas[d]++; | |
else | |
printf("Huge diff: %d nsec !!!\n", d); | |
} | |
printf("Consecutive Uptime() statistics\n"); | |
printf("for 1000000 invocations:\n"); | |
for (i = 0; i < 100000; i++) | |
if (deltas[i]) { | |
printf("%6d nsec ... %6d times\n", i, deltas[i]); | |
unique_deltas++; | |
} | |
printf("Unique deltas: %d\n", unique_deltas); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Consecutive Uptime() statistics | |
for 1000000 invocations: | |
71 nsec ... 95 times | |
72 nsec ... 1109 times | |
73 nsec ... 75519 times | |
74 nsec ... 320060 times | |
75 nsec ... 517135 times | |
76 nsec ... 11677 times | |
77 nsec ... 55327 times | |
78 nsec ... 18234 times | |
79 nsec ... 557 times | |
80 nsec ... 12 times | |
81 nsec ... 74 times | |
82 nsec ... 4 times | |
83 nsec ... 10 times | |
84 nsec ... 11 times | |
86 nsec ... 10 times | |
87 nsec ... 1 times | |
88 nsec ... 1 times | |
90 nsec ... 3 times | |
92 nsec ... 5 times | |
93 nsec ... 4 times | |
95 nsec ... 12 times | |
96 nsec ... 3 times | |
97 nsec ... 1 times | |
98 nsec ... 1 times | |
99 nsec ... 25 times | |
100 nsec ... 2 times | |
101 nsec ... 4 times | |
102 nsec ... 7 times | |
103 nsec ... 1 times | |
104 nsec ... 14 times | |
105 nsec ... 3 times | |
106 nsec ... 1 times | |
107 nsec ... 1 times | |
108 nsec ... 8 times | |
110 nsec ... 4 times | |
111 nsec ... 6 times | |
113 nsec ... 1 times | |
117 nsec ... 5 times | |
119 nsec ... 2 times | |
120 nsec ... 1 times | |
122 nsec ... 4 times | |
124 nsec ... 2 times | |
125 nsec ... 2 times | |
126 nsec ... 3 times | |
128 nsec ... 1 times | |
129 nsec ... 1 times | |
130 nsec ... 1 times | |
131 nsec ... 1 times | |
135 nsec ... 1 times | |
138 nsec ... 1 times | |
141 nsec ... 1 times | |
144 nsec ... 2 times | |
149 nsec ... 1 times | |
155 nsec ... 1 times | |
158 nsec ... 1 times | |
162 nsec ... 1 times | |
165 nsec ... 1 times | |
170 nsec ... 1 times | |
176 nsec ... 1 times | |
189 nsec ... 1 times | |
198 nsec ... 1 times | |
216 nsec ... 1 times | |
272 nsec ... 1 times | |
1754 nsec ... 1 times | |
1763 nsec ... 1 times | |
1793 nsec ... 1 times | |
2121 nsec ... 1 times | |
2148 nsec ... 1 times | |
2207 nsec ... 1 times | |
2322 nsec ... 1 times | |
2499 nsec ... 1 times | |
2813 nsec ... 1 times | |
2832 nsec ... 1 times | |
2833 nsec ... 1 times | |
2876 nsec ... 1 times | |
3042 nsec ... 1 times | |
3087 nsec ... 1 times | |
5589 nsec ... 1 times | |
8790 nsec ... 1 times | |
9109 nsec ... 1 times | |
9133 nsec ... 1 times | |
21636 nsec ... 1 times | |
Unique deltas: 82 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// uptime_test.js | |
var sys=require('sys'); | |
sys.puts("Node init time: "+ process.uptime() + " msec"); | |
var i; | |
var n = 1000000; | |
var m = 100000; | |
var unique_deltas = 0; | |
var deltas = new Array(m); | |
deltas.length = m; | |
for (i = 0; i < m; i++) | |
deltas[i] = 0; | |
for (i = 0; i < n; i++) { | |
var f,s,d; | |
f = process.uptime(); | |
s = process.uptime(); | |
d = Math.round((s-f)*1e6); | |
if (d > m) | |
sys.puts ( " d is too large: "+ d); | |
else { | |
deltas[d]++; | |
} | |
} | |
for (i = 0; i < n; i++) { | |
if (deltas[i] > 0) | |
{ | |
unique_deltas++; | |
sys.puts(i+" nsec "+deltas[i] + " times"); | |
} | |
} | |
sys.puts("unique deltas: "+ unique_deltas); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Node init time: 16.17586800456047 msec | |
152 nsec 2 times | |
153 nsec 8 times | |
156 nsec 273892 times | |
157 nsec 4944 times | |
158 nsec 36749 times | |
159 nsec 379888 times | |
160 nsec 44716 times | |
162 nsec 75382 times | |
163 nsec 1455 times | |
164 nsec 1394 times | |
165 nsec 14601 times | |
166 nsec 1780 times | |
168 nsec 3415 times | |
169 nsec 76 times | |
170 nsec 1245 times | |
171 nsec 13225 times | |
172 nsec 1552 times | |
174 nsec 9640 times | |
175 nsec 220 times | |
176 nsec 208 times | |
177 nsec 2002 times | |
178 nsec 216 times | |
180 nsec 15079 times | |
181 nsec 319 times | |
182 nsec 3274 times | |
183 nsec 34623 times | |
184 nsec 4059 times | |
186 nsec 6949 times | |
187 nsec 161 times | |
188 nsec 342 times | |
189 nsec 3606 times | |
190 nsec 401 times | |
192 nsec 1039 times | |
193 nsec 26 times | |
194 nsec 53 times | |
195 nsec 527 times | |
196 nsec 72 times | |
198 nsec 450 times | |
199 nsec 8 times | |
200 nsec 17 times | |
201 nsec 208 times | |
202 nsec 25 times | |
204 nsec 339 times | |
205 nsec 15 times | |
206 nsec 412 times | |
207 nsec 4677 times | |
208 nsec 530 times | |
210 nsec 22111 times | |
211 nsec 582 times | |
212 nsec 726 times | |
213 nsec 7644 times | |
214 nsec 897 times | |
216 nsec 8629 times | |
217 nsec 191 times | |
218 nsec 192 times | |
219 nsec 2122 times | |
220 nsec 257 times | |
222 nsec 709 times | |
223 nsec 19 times | |
224 nsec 10 times | |
225 nsec 133 times | |
226 nsec 17 times | |
228 nsec 80 times | |
229 nsec 2 times | |
230 nsec 30 times | |
231 nsec 278 times | |
232 nsec 31 times | |
234 nsec 2129 times | |
235 nsec 58 times | |
236 nsec 82 times | |
237 nsec 838 times | |
238 nsec 95 times | |
240 nsec 1364 times | |
241 nsec 42 times | |
242 nsec 42 times | |
243 nsec 464 times | |
244 nsec 75 times | |
246 nsec 189 times | |
247 nsec 3 times | |
248 nsec 6 times | |
249 nsec 88 times | |
250 nsec 11 times | |
252 nsec 75 times | |
253 nsec 4 times | |
254 nsec 8 times | |
255 nsec 56 times | |
256 nsec 4 times | |
258 nsec 47 times | |
259 nsec 2 times | |
260 nsec 4 times | |
261 nsec 28 times | |
262 nsec 3 times | |
264 nsec 28 times | |
266 nsec 37 times | |
267 nsec 440 times | |
268 nsec 48 times | |
270 nsec 1829 times | |
271 nsec 48 times | |
272 nsec 87 times | |
273 nsec 918 times | |
274 nsec 119 times | |
276 nsec 199 times | |
277 nsec 7 times | |
278 nsec 16 times | |
279 nsec 156 times | |
280 nsec 30 times | |
282 nsec 49 times | |
284 nsec 5 times | |
285 nsec 61 times | |
286 nsec 10 times | |
288 nsec 38 times | |
290 nsec 4 times | |
291 nsec 48 times | |
292 nsec 4 times | |
294 nsec 46 times | |
295 nsec 1 times | |
296 nsec 12 times | |
297 nsec 147 times | |
298 nsec 20 times | |
300 nsec 204 times | |
301 nsec 15 times | |
302 nsec 3 times | |
303 nsec 35 times | |
304 nsec 3 times | |
306 nsec 20 times | |
308 nsec 1 times | |
309 nsec 10 times | |
312 nsec 6 times | |
314 nsec 2 times | |
315 nsec 18 times | |
316 nsec 4 times | |
318 nsec 21 times | |
321 nsec 16 times | |
322 nsec 3 times | |
324 nsec 215 times | |
325 nsec 6 times | |
326 nsec 25 times | |
327 nsec 282 times | |
328 nsec 36 times | |
330 nsec 138 times | |
331 nsec 6 times | |
333 nsec 26 times | |
334 nsec 3 times | |
336 nsec 4 times | |
339 nsec 1 times | |
342 nsec 1 times | |
345 nsec 1 times | |
351 nsec 1 times | |
354 nsec 13 times | |
355 nsec 1 times | |
356 nsec 2 times | |
357 nsec 22 times | |
358 nsec 6 times | |
360 nsec 13 times | |
361 nsec 1 times | |
366 nsec 1 times | |
375 nsec 1 times | |
396 nsec 1 times | |
399 nsec 2 times | |
420 nsec 2 times | |
426 nsec 1 times | |
432 nsec 1 times | |
528 nsec 1 times | |
568 nsec 1 times | |
582 nsec 1 times | |
1500 nsec 1 times | |
1582 nsec 1 times | |
1602 nsec 2 times | |
1603 nsec 1 times | |
1617 nsec 1 times | |
1623 nsec 1 times | |
1654 nsec 1 times | |
1701 nsec 1 times | |
1710 nsec 1 times | |
1716 nsec 1 times | |
1731 nsec 1 times | |
1734 nsec 1 times | |
1737 nsec 1 times | |
1752 nsec 1 times | |
1773 nsec 1 times | |
1809 nsec 1 times | |
1813 nsec 1 times | |
1839 nsec 1 times | |
1840 nsec 1 times | |
1902 nsec 1 times | |
1945 nsec 1 times | |
2106 nsec 1 times | |
2151 nsec 2 times | |
2193 nsec 1 times | |
2220 nsec 1 times | |
2248 nsec 1 times | |
2253 nsec 1 times | |
2262 nsec 1 times | |
2451 nsec 1 times | |
2457 nsec 1 times | |
2473 nsec 1 times | |
2479 nsec 1 times | |
2514 nsec 1 times | |
2634 nsec 1 times | |
2643 nsec 1 times | |
2695 nsec 1 times | |
2796 nsec 1 times | |
2797 nsec 1 times | |
2856 nsec 1 times | |
2914 nsec 1 times | |
2970 nsec 1 times | |
3009 nsec 1 times | |
3294 nsec 1 times | |
3508 nsec 1 times | |
3544 nsec 1 times | |
3594 nsec 1 times | |
3687 nsec 1 times | |
3723 nsec 1 times | |
3729 nsec 1 times | |
3732 nsec 1 times | |
3741 nsec 1 times | |
3751 nsec 1 times | |
3753 nsec 1 times | |
3756 nsec 1 times | |
3760 nsec 1 times | |
3784 nsec 1 times | |
3786 nsec 2 times | |
3798 nsec 1 times | |
3813 nsec 1 times | |
3817 nsec 1 times | |
3841 nsec 1 times | |
3843 nsec 1 times | |
3846 nsec 1 times | |
3850 nsec 2 times | |
3853 nsec 1 times | |
3858 nsec 1 times | |
3865 nsec 1 times | |
3871 nsec 2 times | |
3877 nsec 1 times | |
3894 nsec 1 times | |
3897 nsec 1 times | |
3904 nsec 1 times | |
3924 nsec 1 times | |
3937 nsec 1 times | |
3939 nsec 3 times | |
3945 nsec 1 times | |
3951 nsec 1 times | |
3954 nsec 1 times | |
3961 nsec 1 times | |
3964 nsec 2 times | |
3973 nsec 1 times | |
3984 nsec 1 times | |
3987 nsec 1 times | |
3988 nsec 1 times | |
3993 nsec 1 times | |
3994 nsec 1 times | |
3999 nsec 2 times | |
4005 nsec 1 times | |
4017 nsec 1 times | |
4032 nsec 1 times | |
4051 nsec 1 times | |
4054 nsec 1 times | |
4062 nsec 1 times | |
4063 nsec 1 times | |
4066 nsec 2 times | |
4068 nsec 1 times | |
4071 nsec 1 times | |
4074 nsec 1 times | |
4092 nsec 1 times | |
4095 nsec 1 times | |
4123 nsec 1 times | |
4126 nsec 2 times | |
4134 nsec 1 times | |
4143 nsec 1 times | |
4152 nsec 1 times | |
4153 nsec 1 times | |
4155 nsec 1 times | |
4168 nsec 1 times | |
4173 nsec 1 times | |
4194 nsec 1 times | |
4198 nsec 1 times | |
4207 nsec 1 times | |
4227 nsec 1 times | |
4255 nsec 1 times | |
4267 nsec 1 times | |
4303 nsec 1 times | |
4345 nsec 1 times | |
4353 nsec 1 times | |
4372 nsec 1 times | |
4386 nsec 1 times | |
4402 nsec 1 times | |
4407 nsec 1 times | |
4428 nsec 1 times | |
4432 nsec 1 times | |
4495 nsec 1 times | |
4506 nsec 1 times | |
4509 nsec 1 times | |
4519 nsec 1 times | |
4525 nsec 1 times | |
4582 nsec 1 times | |
4597 nsec 1 times | |
4599 nsec 1 times | |
4606 nsec 1 times | |
4633 nsec 1 times | |
4717 nsec 1 times | |
4726 nsec 1 times | |
4728 nsec 1 times | |
4753 nsec 1 times | |
4780 nsec 1 times | |
4794 nsec 2 times | |
4818 nsec 1 times | |
4836 nsec 1 times | |
4839 nsec 1 times | |
4843 nsec 1 times | |
4875 nsec 1 times | |
4882 nsec 1 times | |
4894 nsec 1 times | |
4899 nsec 1 times | |
4933 nsec 1 times | |
4959 nsec 1 times | |
4968 nsec 1 times | |
4992 nsec 1 times | |
5032 nsec 1 times | |
5071 nsec 1 times | |
5103 nsec 1 times | |
5115 nsec 1 times | |
5193 nsec 1 times | |
5209 nsec 1 times | |
5248 nsec 1 times | |
5329 nsec 1 times | |
5355 nsec 1 times | |
5359 nsec 1 times | |
5379 nsec 1 times | |
5385 nsec 1 times | |
5583 nsec 1 times | |
5881 nsec 1 times | |
6511 nsec 1 times | |
6912 nsec 1 times | |
7336 nsec 1 times | |
7362 nsec 1 times | |
7744 nsec 1 times | |
8004 nsec 1 times | |
8464 nsec 1 times | |
8493 nsec 1 times | |
8926 nsec 1 times | |
9184 nsec 1 times | |
9415 nsec 1 times | |
9493 nsec 1 times | |
10151 nsec 1 times | |
10279 nsec 1 times | |
10610 nsec 1 times | |
10654 nsec 1 times | |
10828 nsec 1 times | |
12005 nsec 1 times | |
12013 nsec 1 times | |
12260 nsec 1 times | |
12797 nsec 1 times | |
12908 nsec 1 times | |
13646 nsec 1 times | |
14068 nsec 1 times | |
17324 nsec 1 times | |
19217 nsec 1 times | |
19775 nsec 1 times | |
23241 nsec 1 times | |
27720 nsec 1 times | |
32071 nsec 1 times | |
33592 nsec 1 times | |
33799 nsec 1 times | |
33802 nsec 1 times | |
34138 nsec 1 times | |
34168 nsec 1 times | |
34396 nsec 1 times | |
34699 nsec 1 times | |
35893 nsec 1 times | |
37184 nsec 1 times | |
46614 nsec 1 times | |
53134 nsec 1 times | |
unique deltas: 372 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment