aboutsummaryrefslogtreecommitdiff
path: root/src/util/time.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2013-08-11 21:21:56 +0000
committerChristian Grothoff <christian@grothoff.org>2013-08-11 21:21:56 +0000
commit3d7fefedc9ba60bd8e8448efe8b628446d958536 (patch)
tree61ce41a52cd6e7232cead77818ef265993b2427e /src/util/time.c
parent4a0398474db197abed243a123fb971fbeeffab4b (diff)
downloadgnunet-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.c111
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 */
107struct GNUNET_TIME_Relative 107struct GNUNET_TIME_Relative
108GNUNET_TIME_relative_get_unit_ () 108GNUNET_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 */
118struct GNUNET_TIME_Relative
119GNUNET_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 */
118struct GNUNET_TIME_Relative 129struct GNUNET_TIME_Relative
119GNUNET_TIME_relative_get_second_ () 130GNUNET_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_ ()
129struct GNUNET_TIME_Relative 140struct GNUNET_TIME_Relative
130GNUNET_TIME_relative_get_minute_ () 141GNUNET_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_ ()
140struct GNUNET_TIME_Relative 151struct GNUNET_TIME_Relative
141GNUNET_TIME_relative_get_hour_ () 152GNUNET_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
201GNUNET_TIME_relative_min (struct GNUNET_TIME_Relative t1, 212GNUNET_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
216GNUNET_TIME_relative_max (struct GNUNET_TIME_Relative t1, 227GNUNET_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
232GNUNET_TIME_absolute_min (struct GNUNET_TIME_Absolute t1, 243GNUNET_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
247GNUNET_TIME_absolute_max (struct GNUNET_TIME_Absolute t1, 258GNUNET_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}