| /* | 
 |  * The copyright in this software is being made available under the 2-clauses | 
 |  * BSD License, included below. This software may be subject to other third | 
 |  * party and contributor rights, including patent rights, and no such rights | 
 |  * are granted under this license. | 
 |  * | 
 |  * Copyright (c) 2005, Herve Drolon, FreeImage Team | 
 |  * All rights reserved. | 
 |  * | 
 |  * Redistribution and use in source and binary forms, with or without | 
 |  * modification, are permitted provided that the following conditions | 
 |  * are met: | 
 |  * 1. Redistributions of source code must retain the above copyright | 
 |  *    notice, this list of conditions and the following disclaimer. | 
 |  * 2. Redistributions in binary form must reproduce the above copyright | 
 |  *    notice, this list of conditions and the following disclaimer in the | 
 |  *    documentation and/or other materials provided with the distribution. | 
 |  * | 
 |  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' | 
 |  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
 |  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
 |  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | 
 |  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | 
 |  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | 
 |  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | 
 |  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | 
 |  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | 
 |  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | 
 |  * POSSIBILITY OF SUCH DAMAGE. | 
 |  */ | 
 |  | 
 | #include "opj_includes.h" | 
 |  | 
 | #ifdef _WIN32 | 
 | #include <windows.h> | 
 | #else | 
 | #include <sys/time.h> | 
 | #include <sys/resource.h> | 
 | #include <sys/times.h> | 
 | #endif /* _WIN32 */ | 
 |  | 
 | OPJ_FLOAT64 opj_clock(void) | 
 | { | 
 | #ifdef _WIN32 | 
 |     /* _WIN32: use QueryPerformance (very accurate) */ | 
 |     LARGE_INTEGER freq, t ; | 
 |     /* freq is the clock speed of the CPU */ | 
 |     QueryPerformanceFrequency(&freq) ; | 
 |     /* cout << "freq = " << ((double) freq.QuadPart) << endl; */ | 
 |     /* t is the high resolution performance counter (see MSDN) */ | 
 |     QueryPerformanceCounter(& t) ; | 
 |     return ((OPJ_FLOAT64) t.QuadPart / (OPJ_FLOAT64) freq.QuadPart) ; | 
 | #else | 
 |     /* Unix or Linux: use resource usage */ | 
 |     struct rusage t; | 
 |     OPJ_FLOAT64 procTime; | 
 |     /* (1) Get the rusage data structure at this moment (man getrusage) */ | 
 |     getrusage(0, &t); | 
 |     /* (2) What is the elapsed time ? - CPU time = User time + System time */ | 
 |     /* (2a) Get the seconds */ | 
 |     procTime = (OPJ_FLOAT64)(t.ru_utime.tv_sec + t.ru_stime.tv_sec); | 
 |     /* (2b) More precisely! Get the microseconds part ! */ | 
 |     return (procTime + (OPJ_FLOAT64)(t.ru_utime.tv_usec + t.ru_stime.tv_usec) * | 
 |             1e-6) ; | 
 | #endif | 
 | } | 
 |  |