From 12876ef7815e26325a187fd5dbc0fda417011d7b Mon Sep 17 00:00:00 2001 From: "mostang.com!davidm" Date: Wed, 24 Sep 2003 05:02:14 +0000 Subject: [PATCH] (Logical change 1.98) --- tests/Gperf-simple.c | 76 ++++++++++++++++++++++++++++++++++++++++++++ tests/Lperf-simple.c | 5 +++ 2 files changed, 81 insertions(+) diff --git a/tests/Gperf-simple.c b/tests/Gperf-simple.c index e69de29b..45a48373 100644 --- a/tests/Gperf-simple.c +++ b/tests/Gperf-simple.c @@ -0,0 +1,76 @@ +#include +#include + +#include + +#include + +#define panic(args...) \ + do { fprintf (stderr, args); exit (-1); } while (0) + +static inline double +gettime (void) +{ + struct timeval tv; + + gettimeofday(&tv, NULL); + return tv.tv_sec + 1e-6*tv.tv_usec; +} + +static int +measure_unwind (int maxlevel) +{ + double stop, mid, start; + unw_cursor_t cursor; + unw_context_t uc; + int ret, level = 0; + + start = gettime (); + + unw_getcontext (&uc); + if (unw_init_local (&cursor, &uc) < 0) + panic ("unw_init_local() failed\n"); + + mid = gettime (); + + do + { + ret = unw_step (&cursor); + if (ret < 0) + panic ("unw_step() failed\n"); + ++level; + } + while (ret > 0); + + stop = gettime (); + + if (level <= maxlevel) + panic ("Unwound only %d levels, expected at least %d levels", + level, maxlevel); + + printf ("initialization time = %gnsec, time per unwind-step = %gnsec\n", + 1e9*(mid - start), 1e9*(stop - mid)/level); +} + +static int +f1 (int level, int maxlevel) +{ + if (level == maxlevel) + return measure_unwind (maxlevel); + else + /* defeat last-call/sibcall optimization */ + return f1 (level + 1, maxlevel) + level; +} + +int +main (int argc, char **argv) +{ + int i, maxlevel = 100; + + if (argc > 1) + maxlevel = atol (argv[1]); + + for (i = 0; i < 10; ++i) + f1 (0, maxlevel); + return 0; +} diff --git a/tests/Lperf-simple.c b/tests/Lperf-simple.c index e69de29b..ef94cf7c 100644 --- a/tests/Lperf-simple.c +++ b/tests/Lperf-simple.c @@ -0,0 +1,5 @@ +#define UNW_LOCAL_ONLY +#include +#if defined(UNW_LOCAL_ONLY) && !defined(UNW_REMOTE_ONLY) +#include "Gperf-simple.c" +#endif