1a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*
2a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Copyright (C)2011 D. R. Commander.  All Rights Reserved.
3a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *
4a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Redistribution and use in source and binary forms, with or without
5a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * modification, are permitted provided that the following conditions are met:
6a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *
7a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * - Redistributions of source code must retain the above copyright notice,
8a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *   this list of conditions and the following disclaimer.
9a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * - Redistributions in binary form must reproduce the above copyright notice,
10a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *   this list of conditions and the following disclaimer in the documentation
11a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *   and/or other materials provided with the distribution.
12a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * - Neither the name of the libjpeg-turbo Project nor the names of its
13a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *   contributors may be used to endorse or promote products derived from this
14a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *   software without specific prior written permission.
15a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat *
16a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS",
17a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
20a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * POSSIBILITY OF SUCH DAMAGE.
27a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */
28a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat
29a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#ifdef _WIN32
30a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat
31a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#include <windows.h>
32a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat
33a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatstatic double getfreq(void)
34a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat{
35a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat	LARGE_INTEGER freq;
36a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat	if(!QueryPerformanceFrequency(&freq)) return 0.0;
37a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat	return (double)freq.QuadPart;
38a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}
39a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat
40a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatstatic double f=-1.0;
41a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat
42a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatdouble gettime(void)
43a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat{
44a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat	LARGE_INTEGER t;
45a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat	if(f<0.0) f=getfreq();
46a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat	if(f==0.0) return (double)GetTickCount()/1000.;
47a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat	else
48a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat	{
49a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat		QueryPerformanceCounter(&t);
50a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat		return (double)t.QuadPart/f;
51a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat	}
52a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}
53a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat
54a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#else
55a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat
56a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#include <stdlib.h>
57a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#include <sys/time.h>
58a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat
59a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatdouble gettime(void)
60a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat{
61a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat	struct timeval tv;
62a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat	if(gettimeofday(&tv, NULL)<0) return 0.0;
63a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat	else return (double)tv.tv_sec+((double)tv.tv_usec/1000000.);
64a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}
65a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat
66a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat#endif
67