On Fri, Aug 22, 2014 at 11:49:51AM +0100, Petri Savolainen wrote:
> Use arguments instead of hard coded values.
> 
> Signed-off-by: Petri Savolainen <[email protected]>

Reviewed-by: Stuart Haslam <[email protected]>

> ---
>  example/timer/odp_timer_test.c | 118 
> ++++++++++++++++++++++++++++++-----------
>  1 file changed, 87 insertions(+), 31 deletions(-)
> 
> diff --git a/example/timer/odp_timer_test.c b/example/timer/odp_timer_test.c
> index dbe0e5b..bf1d7df 100644
> --- a/example/timer/odp_timer_test.c
> +++ b/example/timer/odp_timer_test.c
> @@ -26,9 +26,19 @@
>  #define MAX_WORKERS           32            /**< Max worker threads */
>  #define MSG_POOL_SIZE         (4*1024*1024) /**< Message pool size */
>  
> +/* Nanoseconds */
> +#define USEC 1000UL
> +#define MSEC 1000000UL
> +#define SEC  1000000000UL
> +
>  /** Test arguments */
>  typedef struct {
> -     int core_count; /**< Core count*/
> +     int core_count;    /**< Core count*/
> +     int resolution_us; /**< Timeout resolution in usec*/
> +     int min_us;        /**< Minimum timeout in usec*/
> +     int max_us;        /**< Maximum timeout in usec*/
> +     int period_us;     /**< Timeout period in usec*/
> +     int tmo_count;     /**< Timeout count*/
>  } test_args_t;
>  
>  
> @@ -40,26 +50,39 @@ static odp_timer_t test_timer;
>  
>  
>  /** @private test timeout */
> -static void test_timeouts(int thr)
> +static void test_abs_timeouts(int thr, test_args_t *args)
>  {
>       uint64_t tick;
> +     uint64_t period;
> +     uint64_t period_ns;
>       odp_queue_t queue;
>       odp_buffer_t buf;
> -     int num = 10;
> +     int num;
>  
>       ODP_DBG("  [%i] test_timeouts\n", thr);
>  
>       queue = odp_queue_lookup("timer_queue");
>  
> -     tick = odp_timer_current_tick(test_timer);
> +     period_ns = args->period_us*USEC;
> +     period    = odp_timer_ns_to_tick(test_timer, period_ns);
>  
> -     tick += 100;
> +     ODP_DBG("  [%i] period %"PRIu64" ticks,  %"PRIu64" ns\n", thr,
> +             period, period_ns);
>  
> -     odp_timer_absolute_tmo(test_timer, tick,
> -                            queue, ODP_BUFFER_INVALID);
> +     tick = odp_timer_current_tick(test_timer);
>  
>       ODP_DBG("  [%i] current tick %"PRIu64"\n", thr, tick);
>  
> +     tick += period;
> +
> +     if (odp_timer_absolute_tmo(test_timer, tick, queue, ODP_BUFFER_INVALID)
> +         == ODP_TIMER_TMO_INVALID){
> +             ODP_DBG("Timeout request failed\n");
> +             return;
> +     }
> +
> +     num = args->tmo_count;
> +
>       while (1) {
>               odp_timeout_t tmo;
>  
> @@ -77,7 +100,7 @@ static void test_timeouts(int thr)
>               if (num == 0)
>                       break;
>  
> -             tick += 100;
> +             tick += period;
>  
>               odp_timer_absolute_tmo(test_timer, tick,
>                                      queue, ODP_BUFFER_INVALID);
> @@ -91,28 +114,22 @@ static void test_timeouts(int thr)
>  /**
>   * @internal Worker thread
>   *
> - * @param arg  Arguments
> + * @param ptr  Pointer to test arguments
>   *
> - * @return NULL on failure
> + * @return Pointer to exit status
>   */
> -static void *run_thread(void *arg)
> +static void *run_thread(void *ptr)
>  {
>       int thr;
>       odp_buffer_pool_t msg_pool;
> +     test_args_t *args;
>  
> -     thr = odp_thread_id();
> +     args = ptr;
> +     thr  = odp_thread_id();
>  
>       printf("Thread %i starts on core %i\n", thr, odp_thread_core());
>  
>       /*
> -      * Test barriers back-to-back
> -      */
> -     odp_barrier_sync(&test_barrier);
> -     odp_barrier_sync(&test_barrier);
> -     odp_barrier_sync(&test_barrier);
> -     odp_barrier_sync(&test_barrier);
> -
> -     /*
>        * Find the buffer pool
>        */
>       msg_pool = odp_buffer_pool_lookup("msg_pool");
> @@ -124,12 +141,12 @@ static void *run_thread(void *arg)
>  
>       odp_barrier_sync(&test_barrier);
>  
> -     test_timeouts(thr);
> +     test_abs_timeouts(thr, args);
>  
>  
>       printf("Thread %i exits\n", thr);
>       fflush(NULL);
> -     return arg;
> +     return NULL;
>  }
>  
>  
> @@ -141,6 +158,11 @@ static void print_usage(void)
>       printf("\n\nUsage: ./odp_example [options]\n");
>       printf("Options:\n");
>       printf("  -c, --count <number>    core count, core IDs start from 1\n");
> +     printf("  -r, --resolution <us>   timeout resolution in usec\n");
> +     printf("  -m, --min <us>          minimum timeout in usec\n");
> +     printf("  -x, --max <us>          maximum timeout in usec\n");
> +     printf("  -p, --period <us>       timeout period in usec\n");
> +     printf("  -t, --timeouts <count>  timeout repeat count\n");
>       printf("  -h, --help              this help\n");
>       printf("\n\n");
>  }
> @@ -159,13 +181,27 @@ static void parse_args(int argc, char *argv[], 
> test_args_t *args)
>       int long_index;
>  
>       static struct option longopts[] = {
> -             {"count", required_argument, NULL, 'c'},
> -             {"help", no_argument, NULL, 'h'},
> +             {"count",      required_argument, NULL, 'c'},
> +             {"resolution", required_argument, NULL, 'r'},
> +             {"min",        required_argument, NULL, 'm'},
> +             {"max",        required_argument, NULL, 'x'},
> +             {"period",     required_argument, NULL, 'p'},
> +             {"timeouts",   required_argument, NULL, 't'},
> +             {"help",       no_argument,       NULL, 'h'},
>               {NULL, 0, NULL, 0}
>       };
>  
> +     /* defaults */
> +     args->core_count    = 0; /* all cores */
> +     args->resolution_us = 10000;
> +     args->min_us        = args->resolution_us;
> +     args->max_us        = 100000000;
> +     args->period_us     = 1000000;
> +     args->tmo_count     = 30;
> +
>       while (1) {
> -             opt = getopt_long(argc, argv, "+c:h", longopts, &long_index);
> +             opt = getopt_long(argc, argv, "+c:r:m:x:p:t:h",
> +                              longopts, &long_index);
>  
>               if (opt == -1)
>                       break;  /* No more options */
> @@ -174,7 +210,21 @@ static void parse_args(int argc, char *argv[], 
> test_args_t *args)
>               case 'c':
>                       args->core_count = atoi(optarg);
>                       break;
> -
> +             case 'r':
> +                     args->resolution_us = atoi(optarg);
> +                     break;
> +             case 'm':
> +                     args->min_us = atoi(optarg);
> +                     break;
> +             case 'x':
> +                     args->max_us = atoi(optarg);
> +                     break;
> +             case 'p':
> +                     args->period_us = atoi(optarg);
> +                     break;
> +             case 't':
> +                     args->tmo_count = atoi(optarg);
> +                     break;
>               case 'h':
>                       print_usage();
>                       exit(EXIT_SUCCESS);
> @@ -203,7 +253,7 @@ int main(int argc, char *argv[])
>       uint64_t cycles, ns;
>       odp_queue_param_t param;
>  
> -     printf("\nODP example starts\n");
> +     printf("\nODP timer example starts\n");
>  
>       memset(&args, 0, sizeof(args));
>       parse_args(argc, argv, &args);
> @@ -248,6 +298,11 @@ int main(int argc, char *argv[])
>               first_core = 0;
>  
>       printf("first core:         %i\n", first_core);
> +     printf("resolution:         %i usec\n", args.resolution_us);
> +     printf("min timeout:        %i usec\n", args.min_us);
> +     printf("max timeout:        %i usec\n", args.max_us);
> +     printf("period:             %i usec\n", args.period_us);
> +     printf("timeouts:           %i\n", args.tmo_count);
>  
>       /*
>        * Init this thread. It makes also ODP calls when
> @@ -288,8 +343,9 @@ int main(int argc, char *argv[])
>       }
>  
>       test_timer = odp_timer_create("test_timer", pool,
> -                                   1000000, 1000000, 1000000000000UL);
> -
> +                                   args.resolution_us*USEC,
> +                                   args.min_us*USEC,
> +                                   args.max_us*USEC);
>  
>       odp_shm_print_all();
>  
> @@ -302,7 +358,7 @@ int main(int argc, char *argv[])
>       printf("  %12"PRIu64" cycles  ->  %12"PRIu64" ns\n", cycles,
>              odp_time_cycles_to_ns(cycles));
>  
> -     for (ns = 1; ns <= 100000000000UL; ns *= 10) {
> +     for (ns = 1; ns <= 100*SEC; ns *= 10) {
>               cycles = odp_time_ns_to_cycles(ns);
>  
>               printf("  %12"PRIu64" ns      ->  %12"PRIu64" cycles\n", ns,
> @@ -318,7 +374,7 @@ int main(int argc, char *argv[])
>  
>       /* Create and launch worker threads */
>       odp_linux_pthread_create(thread_tbl, num_workers, first_core,
> -                              run_thread, NULL);
> +                              run_thread, &args);
>  
>       /* Wait for worker threads to exit */
>       odp_linux_pthread_join(thread_tbl, num_workers);
> -- 
> 2.1.0
> 



_______________________________________________
lng-odp mailing list
[email protected]
http://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to