12ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca/************************************************************************** 22ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca * 32ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca * Copyright 2008-2010 VMware, Inc. 42ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca * All Rights Reserved. 52ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca * 62ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca * Permission is hereby granted, free of charge, to any person obtaining a 72ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca * copy of this software and associated documentation files (the 82ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca * "Software"), to deal in the Software without restriction, including 92ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca * without limitation the rights to use, copy, modify, merge, publish, 102ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca * distribute, sub license, and/or sell copies of the Software, and to 112ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca * permit persons to whom the Software is furnished to do so, subject to 122ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca * the following conditions: 132ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca * 142ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca * The above copyright notice and this permission notice (including the 152ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca * next paragraph) shall be included in all copies or substantial portions 162ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca * of the Software. 172ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca * 182ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 192ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 202ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 212ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 222ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 232ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 242ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 252ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca * 262ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca **************************************************************************/ 272ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca 282ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca/** 292ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca * @file 302ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca * OS independent time-manipulation functions. 312ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca * 322ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca * @author Jose Fonseca <jfonseca@vmware.com> 332ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca */ 342ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca 352ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca 362ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca#include "pipe/p_config.h" 372ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca 3839cd791f3428ab48723fd4c73c4b1223e883ab2dnobled#if defined(PIPE_OS_UNIX) 392ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca# include <sys/time.h> /* timeval */ 4010b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca#elif defined(PIPE_SUBSYSTEM_WINDOWS_USER) 412ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca# include <windows.h> 422ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca#else 432ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca# error Unsupported OS 442ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca#endif 452ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca 462ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca#include "os_time.h" 472ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca 482ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca 492ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonsecaint64_t 502ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonsecaos_time_get(void) 512ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca{ 522ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca#if defined(PIPE_OS_UNIX) 532ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca 542ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca struct timeval tv; 552ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca gettimeofday(&tv, NULL); 562ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca return tv.tv_usec + tv.tv_sec*1000000LL; 572ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca 5810b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca#elif defined(PIPE_SUBSYSTEM_WINDOWS_USER) 592ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca 602ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca static LARGE_INTEGER frequency; 612ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca LARGE_INTEGER counter; 622ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca if(!frequency.QuadPart) 632ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca QueryPerformanceFrequency(&frequency); 642ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca QueryPerformanceCounter(&counter); 652ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca return counter.QuadPart*INT64_C(1000000)/frequency.QuadPart; 662ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca 672ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca#endif 682ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca} 692ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca 702ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca 7110b07665be5cff9fa9f03b0f7db459f3b380570dJosé Fonseca#if defined(PIPE_SUBSYSTEM_WINDOWS_USER) 722ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca 732ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonsecavoid 742ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonsecaos_time_sleep(int64_t usecs) 752ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca{ 762ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca Sleep((usecs + 999) / 1000); 772ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca} 782ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca 792ef6d311b7cba30deb3d7e38eec14cef89e7e579José Fonseca#endif 80