//========================================================================
//
// GooTimer.cc
//
// This file is licensed under GPLv2 or later
//
// Copyright 2005 Jonathan Blandford <jrb@redhat.com>
// Copyright 2007 Krzysztof Kowalczyk <kkowalczyk@gmail.com>
// Copyright 2010 Hib Eris <hib@hiberis.nl>
// Inspired by gtimer.c in glib, which is Copyright 2000 by the GLib Team
//
//========================================================================

#include <config.h>

#include "GooTimer.h"
#include <cstring>

#define USEC_PER_SEC 1000000

//------------------------------------------------------------------------
// GooTimer
//------------------------------------------------------------------------

GooTimer::GooTimer()
{
    start();
}

void GooTimer::start()
{
#ifdef HAVE_GETTIMEOFDAY
    gettimeofday(&start_time, nullptr);
#elif defined(_WIN32)
    QueryPerformanceCounter(&start_time);
#endif
    active = true;
}

void GooTimer::stop()
{
#ifdef HAVE_GETTIMEOFDAY
    gettimeofday(&end_time, nullptr);
#elif defined(_WIN32)
    QueryPerformanceCounter(&end_time);
#endif
    active = false;
}

#ifdef HAVE_GETTIMEOFDAY
double GooTimer::getElapsed()
{
    double total;
    struct timeval elapsed;

    if (active) {
        gettimeofday(&end_time, nullptr);
    }

    if (start_time.tv_usec > end_time.tv_usec) {
        end_time.tv_usec += USEC_PER_SEC;
        end_time.tv_sec--;
    }

    elapsed.tv_usec = end_time.tv_usec - start_time.tv_usec;
    elapsed.tv_sec = end_time.tv_sec - start_time.tv_sec;

    total = elapsed.tv_sec + ((double)elapsed.tv_usec / 1e6);
    if (total < 0) {
        total = 0;
    }

    return total;
}
#elif defined(_WIN32)
double GooTimer::getElapsed()
{
    LARGE_INTEGER freq;
    double time_in_secs;
    QueryPerformanceFrequency(&freq);

    if (active)
        QueryPerformanceCounter(&end_time);

    time_in_secs = (double)(end_time.QuadPart - start_time.QuadPart) / (double)freq.QuadPart;
    return time_in_secs * 1000.0;
}
#else
double GooTimer::getElapsed()
{
#    warning "no support for GooTimer"
    return 0;
}
#endif
