X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Futil%2Ftest_scheduler_delay.c;h=93568cd81b3b6e79f833ca0b5f1cfca0e7d15f39;hb=1ac9ef013b0e9c737d6909ab41a38b45a3d36e43;hp=9cbf7d90f36eb2abf613fdb45c776d6367c7b3f3;hpb=416c2f5a713b93ba689a8cd1e038682a53e6bc17;p=oweals%2Fgnunet.git diff --git a/src/util/test_scheduler_delay.c b/src/util/test_scheduler_delay.c index 9cbf7d90f..93568cd81 100644 --- a/src/util/test_scheduler_delay.c +++ b/src/util/test_scheduler_delay.c @@ -1,6 +1,6 @@ /* This file is part of GNUnet. - (C) 2001, 2002, 2003, 2004, 2006 Christian Grothoff (and other contributing authors) + Copyright (C) 2001-2013 GNUnet e.V. GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -14,21 +14,17 @@ You should have received a copy of the GNU General Public License along with GNUnet; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ /** * @file util/test_scheduler_delay.c * @brief testcase for delay of scheduler, measures how - * precise the timers are. Expect values between 10 and 20 ms on + * precise the timers are. Expect values between 0.2 and 2 ms on * modern machines. */ #include "platform.h" -#include "gnunet_common.h" -#include "gnunet_scheduler_lib.h" -#include "gnunet_time_lib.h" - -#define VERBOSE GNUNET_EXTRA_LOGGING +#include "gnunet_util_lib.h" static struct GNUNET_TIME_Absolute target; @@ -38,27 +34,27 @@ static unsigned long long cumDelta; #define INCR 47 -#define MAXV 1500 +#define MAXV 5000 + /** * Signature of the main function of a task. * * @param cls closure - * @param tc context */ static void -test_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +test_task (void *cls) { struct GNUNET_TIME_Absolute now; now = GNUNET_TIME_absolute_get (); - if (now.abs_value > target.abs_value) - cumDelta += (now.abs_value - target.abs_value); + if (now.abs_value_us > target.abs_value_us) + cumDelta += (now.abs_value_us - target.abs_value_us); else - cumDelta += (target.abs_value - now.abs_value); + cumDelta += (target.abs_value_us - now.abs_value_us); target = GNUNET_TIME_relative_to_absolute (GNUNET_TIME_relative_multiply - (GNUNET_TIME_UNIT_MILLISECONDS, i)); + (GNUNET_TIME_UNIT_MICROSECONDS, i)); FPRINTF (stderr, "%s", "."); if (i > MAXV) { @@ -66,38 +62,33 @@ test_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) return; } GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply - (GNUNET_TIME_UNIT_MILLISECONDS, i), &test_task, + (GNUNET_TIME_UNIT_MICROSECONDS, i), + &test_task, NULL); i += INCR; } -static int -check () + +int +main (int argc, char *argv[]) { + GNUNET_log_setup ("test-scheduler-delay", + "WARNING", + NULL); target = GNUNET_TIME_absolute_get (); GNUNET_SCHEDULER_run (&test_task, NULL); - FPRINTF (stdout, "Sleep precision: %llu ms. ", - cumDelta / 1000 / (MAXV / INCR)); - if (cumDelta <= 10 * MAXV / INCR) + FPRINTF (stdout, + "Sleep precision: %llu microseconds (average delta). ", + cumDelta / (MAXV / INCR)); + if (cumDelta <= 500 * MAXV / INCR) FPRINTF (stdout, "%s", "Timer precision is excellent.\n"); - else if (cumDelta <= 50 * MAXV / INCR) /* 50 ms average deviation */ + else if (cumDelta <= 5000 * MAXV / INCR) /* 5 ms average deviation */ FPRINTF (stdout, "%s", "Timer precision is good.\n"); - else if (cumDelta > 250 * MAXV / INCR) + else if (cumDelta > 25000 * MAXV / INCR) FPRINTF (stdout, "%s", "Timer precision is awful.\n"); else FPRINTF (stdout, "%s", "Timer precision is acceptable.\n"); return 0; } -int -main (int argc, char *argv[]) -{ - int ret; - - GNUNET_log_setup ("test-scheduler-delay", "WARNING", NULL); - ret = check (); - - return ret; -} - /* end of test_scheduler_delay.c */