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