diff options
author | Christian Grothoff <christian@grothoff.org> | 2013-08-11 21:21:56 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2013-08-11 21:21:56 +0000 |
commit | 3d7fefedc9ba60bd8e8448efe8b628446d958536 (patch) | |
tree | 61ce41a52cd6e7232cead77818ef265993b2427e /src/util/time.c | |
parent | 4a0398474db197abed243a123fb971fbeeffab4b (diff) | |
download | gnunet-3d7fefedc9ba60bd8e8448efe8b628446d958536.tar.gz gnunet-3d7fefedc9ba60bd8e8448efe8b628446d958536.zip |
changing time measurement from milliseconds to microseconds
Diffstat (limited to 'src/util/time.c')
-rw-r--r-- | src/util/time.c | 111 |
1 files changed, 61 insertions, 50 deletions
diff --git a/src/util/time.c b/src/util/time.c index 825b7f8ca..5e9a01b09 100644 --- a/src/util/time.c +++ b/src/util/time.c | |||
@@ -1,10 +1,10 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of GNUnet. | 2 | This file is part of GNUnet. |
3 | (C) 2001, 2002, 2006, 2009 Christian Grothoff (and other contributing authors) | 3 | (C) 2001-2013 Christian Grothoff (and other contributing authors) |
4 | 4 | ||
5 | GNUnet is free software; you can redistribute it and/or modify | 5 | GNUnet is free software; you can redistribute it and/or modify |
6 | it under the terms of the GNU General Public License as published | 6 | it under the terms of the GNU General Public License as published |
7 | by the Free Software Foundation; either version 2, or (at your | 7 | by the Free Software Foundation; either version 3, or (at your |
8 | option) any later version. | 8 | option) any later version. |
9 | 9 | ||
10 | GNUnet is distributed in the hope that it will be useful, but | 10 | GNUnet is distributed in the hope that it will be useful, but |
@@ -70,9 +70,9 @@ GNUNET_TIME_absolute_get () | |||
70 | struct timeval tv; | 70 | struct timeval tv; |
71 | 71 | ||
72 | GETTIMEOFDAY (&tv, NULL); | 72 | GETTIMEOFDAY (&tv, NULL); |
73 | ret.abs_value = | 73 | ret.abs_value_us = |
74 | (uint64_t) (((uint64_t) tv.tv_sec * 1000LL) + | 74 | (uint64_t) (((uint64_t) tv.tv_sec * 1000LL * 1000LL) + |
75 | ((uint64_t) tv.tv_usec / 1000LL)) + timestamp_offset; | 75 | ((uint64_t) tv.tv_usec)) + timestamp_offset; |
76 | return ret; | 76 | return ret; |
77 | } | 77 | } |
78 | 78 | ||
@@ -102,7 +102,7 @@ GNUNET_TIME_absolute_get_zero_ () | |||
102 | 102 | ||
103 | 103 | ||
104 | /** | 104 | /** |
105 | * Return relative time of 1ms. | 105 | * Return relative time of 1us. |
106 | */ | 106 | */ |
107 | struct GNUNET_TIME_Relative | 107 | struct GNUNET_TIME_Relative |
108 | GNUNET_TIME_relative_get_unit_ () | 108 | GNUNET_TIME_relative_get_unit_ () |
@@ -113,12 +113,23 @@ GNUNET_TIME_relative_get_unit_ () | |||
113 | 113 | ||
114 | 114 | ||
115 | /** | 115 | /** |
116 | * Return relative time of 1ms. | ||
117 | */ | ||
118 | struct GNUNET_TIME_Relative | ||
119 | GNUNET_TIME_relative_get_millisecond_ () | ||
120 | { | ||
121 | static struct GNUNET_TIME_Relative one = { 1000 }; | ||
122 | return one; | ||
123 | } | ||
124 | |||
125 | |||
126 | /** | ||
116 | * Return relative time of 1s. | 127 | * Return relative time of 1s. |
117 | */ | 128 | */ |
118 | struct GNUNET_TIME_Relative | 129 | struct GNUNET_TIME_Relative |
119 | GNUNET_TIME_relative_get_second_ () | 130 | GNUNET_TIME_relative_get_second_ () |
120 | { | 131 | { |
121 | static struct GNUNET_TIME_Relative one = { 1000 }; | 132 | static struct GNUNET_TIME_Relative one = { 1000 * 1000LL }; |
122 | return one; | 133 | return one; |
123 | } | 134 | } |
124 | 135 | ||
@@ -129,7 +140,7 @@ GNUNET_TIME_relative_get_second_ () | |||
129 | struct GNUNET_TIME_Relative | 140 | struct GNUNET_TIME_Relative |
130 | GNUNET_TIME_relative_get_minute_ () | 141 | GNUNET_TIME_relative_get_minute_ () |
131 | { | 142 | { |
132 | static struct GNUNET_TIME_Relative one = { 60 * 1000 }; | 143 | static struct GNUNET_TIME_Relative one = { 60 * 1000 * 1000LL }; |
133 | return one; | 144 | return one; |
134 | } | 145 | } |
135 | 146 | ||
@@ -140,7 +151,7 @@ GNUNET_TIME_relative_get_minute_ () | |||
140 | struct GNUNET_TIME_Relative | 151 | struct GNUNET_TIME_Relative |
141 | GNUNET_TIME_relative_get_hour_ () | 152 | GNUNET_TIME_relative_get_hour_ () |
142 | { | 153 | { |
143 | static struct GNUNET_TIME_Relative one = { 60 * 60 * 1000 }; | 154 | static struct GNUNET_TIME_Relative one = { 60 * 60 * 1000 * 1000LL }; |
144 | return one; | 155 | return one; |
145 | } | 156 | } |
146 | 157 | ||
@@ -176,16 +187,16 @@ GNUNET_TIME_relative_to_absolute (struct GNUNET_TIME_Relative rel) | |||
176 | { | 187 | { |
177 | struct GNUNET_TIME_Absolute ret; | 188 | struct GNUNET_TIME_Absolute ret; |
178 | 189 | ||
179 | if (rel.rel_value == UINT64_MAX) | 190 | if (rel.rel_value_us == UINT64_MAX) |
180 | return GNUNET_TIME_UNIT_FOREVER_ABS; | 191 | return GNUNET_TIME_UNIT_FOREVER_ABS; |
181 | struct GNUNET_TIME_Absolute now = GNUNET_TIME_absolute_get (); | 192 | struct GNUNET_TIME_Absolute now = GNUNET_TIME_absolute_get (); |
182 | 193 | ||
183 | if (rel.rel_value + now.abs_value < rel.rel_value) | 194 | if (rel.rel_value_us + now.abs_value_us < rel.rel_value_us) |
184 | { | 195 | { |
185 | GNUNET_break (0); /* overflow... */ | 196 | GNUNET_break (0); /* overflow... */ |
186 | return GNUNET_TIME_UNIT_FOREVER_ABS; | 197 | return GNUNET_TIME_UNIT_FOREVER_ABS; |
187 | } | 198 | } |
188 | ret.abs_value = rel.rel_value + now.abs_value; | 199 | ret.abs_value_us = rel.rel_value_us + now.abs_value_us; |
189 | return ret; | 200 | return ret; |
190 | } | 201 | } |
191 | 202 | ||
@@ -201,7 +212,7 @@ struct GNUNET_TIME_Relative | |||
201 | GNUNET_TIME_relative_min (struct GNUNET_TIME_Relative t1, | 212 | GNUNET_TIME_relative_min (struct GNUNET_TIME_Relative t1, |
202 | struct GNUNET_TIME_Relative t2) | 213 | struct GNUNET_TIME_Relative t2) |
203 | { | 214 | { |
204 | return (t1.rel_value < t2.rel_value) ? t1 : t2; | 215 | return (t1.rel_value_us < t2.rel_value_us) ? t1 : t2; |
205 | } | 216 | } |
206 | 217 | ||
207 | 218 | ||
@@ -216,7 +227,7 @@ struct GNUNET_TIME_Relative | |||
216 | GNUNET_TIME_relative_max (struct GNUNET_TIME_Relative t1, | 227 | GNUNET_TIME_relative_max (struct GNUNET_TIME_Relative t1, |
217 | struct GNUNET_TIME_Relative t2) | 228 | struct GNUNET_TIME_Relative t2) |
218 | { | 229 | { |
219 | return (t1.rel_value > t2.rel_value) ? t1 : t2; | 230 | return (t1.rel_value_us > t2.rel_value_us) ? t1 : t2; |
220 | } | 231 | } |
221 | 232 | ||
222 | 233 | ||
@@ -232,7 +243,7 @@ struct GNUNET_TIME_Absolute | |||
232 | GNUNET_TIME_absolute_min (struct GNUNET_TIME_Absolute t1, | 243 | GNUNET_TIME_absolute_min (struct GNUNET_TIME_Absolute t1, |
233 | struct GNUNET_TIME_Absolute t2) | 244 | struct GNUNET_TIME_Absolute t2) |
234 | { | 245 | { |
235 | return (t1.abs_value < t2.abs_value) ? t1 : t2; | 246 | return (t1.abs_value_us < t2.abs_value_us) ? t1 : t2; |
236 | } | 247 | } |
237 | 248 | ||
238 | 249 | ||
@@ -247,7 +258,7 @@ struct GNUNET_TIME_Absolute | |||
247 | GNUNET_TIME_absolute_max (struct GNUNET_TIME_Absolute t1, | 258 | GNUNET_TIME_absolute_max (struct GNUNET_TIME_Absolute t1, |
248 | struct GNUNET_TIME_Absolute t2) | 259 | struct GNUNET_TIME_Absolute t2) |
249 | { | 260 | { |
250 | return (t1.abs_value > t2.abs_value) ? t1 : t2; | 261 | return (t1.abs_value_us > t2.abs_value_us) ? t1 : t2; |
251 | } | 262 | } |
252 | 263 | ||
253 | 264 | ||
@@ -262,13 +273,13 @@ GNUNET_TIME_absolute_get_remaining (struct GNUNET_TIME_Absolute future) | |||
262 | { | 273 | { |
263 | struct GNUNET_TIME_Relative ret; | 274 | struct GNUNET_TIME_Relative ret; |
264 | 275 | ||
265 | if (future.abs_value == UINT64_MAX) | 276 | if (future.abs_value_us == UINT64_MAX) |
266 | return GNUNET_TIME_UNIT_FOREVER_REL; | 277 | return GNUNET_TIME_UNIT_FOREVER_REL; |
267 | struct GNUNET_TIME_Absolute now = GNUNET_TIME_absolute_get (); | 278 | struct GNUNET_TIME_Absolute now = GNUNET_TIME_absolute_get (); |
268 | 279 | ||
269 | if (now.abs_value > future.abs_value) | 280 | if (now.abs_value_us > future.abs_value_us) |
270 | return GNUNET_TIME_UNIT_ZERO; | 281 | return GNUNET_TIME_UNIT_ZERO; |
271 | ret.rel_value = future.abs_value - now.abs_value; | 282 | ret.rel_value_us = future.abs_value_us - now.abs_value_us; |
272 | return ret; | 283 | return ret; |
273 | } | 284 | } |
274 | 285 | ||
@@ -285,11 +296,11 @@ GNUNET_TIME_absolute_get_difference (struct GNUNET_TIME_Absolute start, | |||
285 | { | 296 | { |
286 | struct GNUNET_TIME_Relative ret; | 297 | struct GNUNET_TIME_Relative ret; |
287 | 298 | ||
288 | if (end.abs_value == UINT64_MAX) | 299 | if (end.abs_value_us == UINT64_MAX) |
289 | return GNUNET_TIME_UNIT_FOREVER_REL; | 300 | return GNUNET_TIME_UNIT_FOREVER_REL; |
290 | if (end.abs_value < start.abs_value) | 301 | if (end.abs_value_us < start.abs_value_us) |
291 | return GNUNET_TIME_UNIT_ZERO; | 302 | return GNUNET_TIME_UNIT_ZERO; |
292 | ret.rel_value = end.abs_value - start.abs_value; | 303 | ret.rel_value_us = end.abs_value_us - start.abs_value_us; |
293 | return ret; | 304 | return ret; |
294 | } | 305 | } |
295 | 306 | ||
@@ -306,10 +317,10 @@ GNUNET_TIME_absolute_get_duration (struct GNUNET_TIME_Absolute whence) | |||
306 | struct GNUNET_TIME_Relative ret; | 317 | struct GNUNET_TIME_Relative ret; |
307 | 318 | ||
308 | now = GNUNET_TIME_absolute_get (); | 319 | now = GNUNET_TIME_absolute_get (); |
309 | GNUNET_assert (whence.abs_value != UINT64_MAX); | 320 | GNUNET_assert (whence.abs_value_us != UINT64_MAX); |
310 | if (whence.abs_value > now.abs_value) | 321 | if (whence.abs_value_us > now.abs_value_us) |
311 | return GNUNET_TIME_UNIT_ZERO; | 322 | return GNUNET_TIME_UNIT_ZERO; |
312 | ret.rel_value = now.abs_value - whence.abs_value; | 323 | ret.rel_value_us = now.abs_value_us - whence.abs_value_us; |
313 | return ret; | 324 | return ret; |
314 | } | 325 | } |
315 | 326 | ||
@@ -326,14 +337,14 @@ GNUNET_TIME_absolute_add (struct GNUNET_TIME_Absolute start, | |||
326 | { | 337 | { |
327 | struct GNUNET_TIME_Absolute ret; | 338 | struct GNUNET_TIME_Absolute ret; |
328 | 339 | ||
329 | if ((start.abs_value == UINT64_MAX) || (duration.rel_value == UINT64_MAX)) | 340 | if ((start.abs_value_us == UINT64_MAX) || (duration.rel_value_us == UINT64_MAX)) |
330 | return GNUNET_TIME_UNIT_FOREVER_ABS; | 341 | return GNUNET_TIME_UNIT_FOREVER_ABS; |
331 | if (start.abs_value + duration.rel_value < start.abs_value) | 342 | if (start.abs_value_us + duration.rel_value_us < start.abs_value_us) |
332 | { | 343 | { |
333 | GNUNET_break (0); | 344 | GNUNET_break (0); |
334 | return GNUNET_TIME_UNIT_FOREVER_ABS; | 345 | return GNUNET_TIME_UNIT_FOREVER_ABS; |
335 | } | 346 | } |
336 | ret.abs_value = start.abs_value + duration.rel_value; | 347 | ret.abs_value_us = start.abs_value_us + duration.rel_value_us; |
337 | return ret; | 348 | return ret; |
338 | } | 349 | } |
339 | 350 | ||
@@ -352,11 +363,11 @@ GNUNET_TIME_absolute_subtract (struct GNUNET_TIME_Absolute start, | |||
352 | { | 363 | { |
353 | struct GNUNET_TIME_Absolute ret; | 364 | struct GNUNET_TIME_Absolute ret; |
354 | 365 | ||
355 | if (start.abs_value <= duration.rel_value) | 366 | if (start.abs_value_us <= duration.rel_value_us) |
356 | return GNUNET_TIME_UNIT_ZERO_ABS; | 367 | return GNUNET_TIME_UNIT_ZERO_ABS; |
357 | if (start.abs_value == GNUNET_TIME_UNIT_FOREVER_ABS.abs_value) | 368 | if (start.abs_value_us == GNUNET_TIME_UNIT_FOREVER_ABS.abs_value_us) |
358 | return GNUNET_TIME_UNIT_FOREVER_ABS; | 369 | return GNUNET_TIME_UNIT_FOREVER_ABS; |
359 | ret.abs_value = start.abs_value - duration.rel_value; | 370 | ret.abs_value_us = start.abs_value_us - duration.rel_value_us; |
360 | return ret; | 371 | return ret; |
361 | } | 372 | } |
362 | 373 | ||
@@ -372,10 +383,10 @@ GNUNET_TIME_relative_multiply (struct GNUNET_TIME_Relative rel, | |||
372 | { | 383 | { |
373 | struct GNUNET_TIME_Relative ret; | 384 | struct GNUNET_TIME_Relative ret; |
374 | 385 | ||
375 | if (factor == 0) | 386 | if (0 == factor) |
376 | return GNUNET_TIME_UNIT_ZERO; | 387 | return GNUNET_TIME_UNIT_ZERO; |
377 | ret.rel_value = rel.rel_value * (unsigned long long) factor; | 388 | ret.rel_value_us = rel.rel_value_us * (unsigned long long) factor; |
378 | if (ret.rel_value / factor != rel.rel_value) | 389 | if (ret.rel_value_us / factor != rel.rel_value_us) |
379 | { | 390 | { |
380 | GNUNET_break (0); | 391 | GNUNET_break (0); |
381 | return GNUNET_TIME_UNIT_FOREVER_REL; | 392 | return GNUNET_TIME_UNIT_FOREVER_REL; |
@@ -397,10 +408,10 @@ GNUNET_TIME_relative_divide (struct GNUNET_TIME_Relative rel, | |||
397 | { | 408 | { |
398 | struct GNUNET_TIME_Relative ret; | 409 | struct GNUNET_TIME_Relative ret; |
399 | 410 | ||
400 | if ((factor == 0) || | 411 | if ((0 == factor) || |
401 | (rel.rel_value == GNUNET_TIME_UNIT_FOREVER_REL.rel_value)) | 412 | (rel.rel_value_us == GNUNET_TIME_UNIT_FOREVER_REL.rel_value_us)) |
402 | return GNUNET_TIME_UNIT_FOREVER_REL; | 413 | return GNUNET_TIME_UNIT_FOREVER_REL; |
403 | ret.rel_value = rel.rel_value / (unsigned long long) factor; | 414 | ret.rel_value_us = rel.rel_value_us / (unsigned long long) factor; |
404 | return ret; | 415 | return ret; |
405 | } | 416 | } |
406 | 417 | ||
@@ -426,11 +437,11 @@ GNUNET_TIME_calculate_eta (struct GNUNET_TIME_Absolute start, uint64_t finished, | |||
426 | GNUNET_break (finished <= total); | 437 | GNUNET_break (finished <= total); |
427 | if (finished >= total) | 438 | if (finished >= total) |
428 | return GNUNET_TIME_UNIT_ZERO; | 439 | return GNUNET_TIME_UNIT_ZERO; |
429 | if (finished == 0) | 440 | if (0 == finished) |
430 | return GNUNET_TIME_UNIT_FOREVER_REL; | 441 | return GNUNET_TIME_UNIT_FOREVER_REL; |
431 | dur = GNUNET_TIME_absolute_get_duration (start); | 442 | dur = GNUNET_TIME_absolute_get_duration (start); |
432 | exp = ((double) dur.rel_value) * ((double) total) / ((double) finished); | 443 | exp = ((double) dur.rel_value_us) * ((double) total) / ((double) finished); |
433 | ret.rel_value = ((uint64_t) exp) - dur.rel_value; | 444 | ret.rel_value_us = ((uint64_t) exp) - dur.rel_value_us; |
434 | return ret; | 445 | return ret; |
435 | } | 446 | } |
436 | 447 | ||
@@ -448,14 +459,14 @@ GNUNET_TIME_relative_add (struct GNUNET_TIME_Relative a1, | |||
448 | { | 459 | { |
449 | struct GNUNET_TIME_Relative ret; | 460 | struct GNUNET_TIME_Relative ret; |
450 | 461 | ||
451 | if ((a1.rel_value == UINT64_MAX) || (a2.rel_value == UINT64_MAX)) | 462 | if ((a1.rel_value_us == UINT64_MAX) || (a2.rel_value_us == UINT64_MAX)) |
452 | return GNUNET_TIME_UNIT_FOREVER_REL; | 463 | return GNUNET_TIME_UNIT_FOREVER_REL; |
453 | if (a1.rel_value + a2.rel_value < a1.rel_value) | 464 | if (a1.rel_value_us + a2.rel_value_us < a1.rel_value_us) |
454 | { | 465 | { |
455 | GNUNET_break (0); | 466 | GNUNET_break (0); |
456 | return GNUNET_TIME_UNIT_FOREVER_REL; | 467 | return GNUNET_TIME_UNIT_FOREVER_REL; |
457 | } | 468 | } |
458 | ret.rel_value = a1.rel_value + a2.rel_value; | 469 | ret.rel_value_us = a1.rel_value_us + a2.rel_value_us; |
459 | return ret; | 470 | return ret; |
460 | } | 471 | } |
461 | 472 | ||
@@ -473,11 +484,11 @@ GNUNET_TIME_relative_subtract (struct GNUNET_TIME_Relative a1, | |||
473 | { | 484 | { |
474 | struct GNUNET_TIME_Relative ret; | 485 | struct GNUNET_TIME_Relative ret; |
475 | 486 | ||
476 | if (a2.rel_value >= a1.rel_value) | 487 | if (a2.rel_value_us >= a1.rel_value_us) |
477 | return GNUNET_TIME_UNIT_ZERO; | 488 | return GNUNET_TIME_UNIT_ZERO; |
478 | if (a1.rel_value == UINT64_MAX) | 489 | if (a1.rel_value_us == UINT64_MAX) |
479 | return GNUNET_TIME_UNIT_FOREVER_REL; | 490 | return GNUNET_TIME_UNIT_FOREVER_REL; |
480 | ret.rel_value = a1.rel_value - a2.rel_value; | 491 | ret.rel_value_us = a1.rel_value_us - a2.rel_value_us; |
481 | return ret; | 492 | return ret; |
482 | } | 493 | } |
483 | 494 | ||
@@ -493,7 +504,7 @@ GNUNET_TIME_relative_hton (struct GNUNET_TIME_Relative a) | |||
493 | { | 504 | { |
494 | struct GNUNET_TIME_RelativeNBO ret; | 505 | struct GNUNET_TIME_RelativeNBO ret; |
495 | 506 | ||
496 | ret.rel_value__ = GNUNET_htonll (a.rel_value); | 507 | ret.rel_value_us__ = GNUNET_htonll (a.rel_value_us); |
497 | return ret; | 508 | return ret; |
498 | } | 509 | } |
499 | 510 | ||
@@ -509,7 +520,7 @@ GNUNET_TIME_relative_ntoh (struct GNUNET_TIME_RelativeNBO a) | |||
509 | { | 520 | { |
510 | struct GNUNET_TIME_Relative ret; | 521 | struct GNUNET_TIME_Relative ret; |
511 | 522 | ||
512 | ret.rel_value = GNUNET_ntohll (a.rel_value__); | 523 | ret.rel_value_us = GNUNET_ntohll (a.rel_value_us__); |
513 | return ret; | 524 | return ret; |
514 | 525 | ||
515 | } | 526 | } |
@@ -526,7 +537,7 @@ GNUNET_TIME_absolute_hton (struct GNUNET_TIME_Absolute a) | |||
526 | { | 537 | { |
527 | struct GNUNET_TIME_AbsoluteNBO ret; | 538 | struct GNUNET_TIME_AbsoluteNBO ret; |
528 | 539 | ||
529 | ret.abs_value__ = GNUNET_htonll (a.abs_value); | 540 | ret.abs_value_us__ = GNUNET_htonll (a.abs_value_us); |
530 | return ret; | 541 | return ret; |
531 | } | 542 | } |
532 | 543 | ||
@@ -542,7 +553,7 @@ GNUNET_TIME_absolute_ntoh (struct GNUNET_TIME_AbsoluteNBO a) | |||
542 | { | 553 | { |
543 | struct GNUNET_TIME_Absolute ret; | 554 | struct GNUNET_TIME_Absolute ret; |
544 | 555 | ||
545 | ret.abs_value = GNUNET_ntohll (a.abs_value__); | 556 | ret.abs_value_us = GNUNET_ntohll (a.abs_value_us__); |
546 | return ret; | 557 | return ret; |
547 | 558 | ||
548 | } | 559 | } |