/*
 * Copyright (C) 2011-2014 Free Software Foundation, Inc.
 *
 * This file is part of GnuTLS.
 *
 * GnuTLS is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * GnuTLS is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef BENCHMARK_H
# define BENCHMARK_H

#include <config.h>
#include <sys/time.h>
#include <time.h>
#include <signal.h>
#if defined _WIN32
#include <windows.h>
#endif
#include <time.h>

typedef void (*sighandler_t) (int);

struct benchmark_st
{
#ifdef HAVE_CLOCK_GETTIME
  struct timespec start;
#else
  struct timeval start;
#endif
  unsigned long size;
  sighandler_t old_handler;
#if defined _WIN32
  HANDLE wtimer;
  HANDLE wthread;
  LARGE_INTEGER alarm_timeout;
#endif
};

extern int benchmark_must_finish;

void start_benchmark (struct benchmark_st *st);
double stop_benchmark (struct benchmark_st *st, const char *metric);

inline static unsigned int
timespec_sub_ms (struct timespec *a, struct timespec *b)
{
  return (a->tv_sec * 1000 + a->tv_nsec / (1000 * 1000) -
	  (b->tv_sec * 1000 + b->tv_nsec / (1000 * 1000)));
}

#endif /* BENCHMARK_H */
