1474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/* 2474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * 4474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * Use of this source code is governed by a BSD-style license 5474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * that can be found in the LICENSE file in the root of the source 6474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * tree. An additional intellectual property rights grant can be found 7474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * in the file PATENTS. All contributing project authors may 8474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * be found in the AUTHORS file in the root of the source tree. 9474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org */ 10474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 11474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 128b26fe55f3e4daa2311dbd2d95e8ac2b4e080685johannkoenig@chromium.org#ifndef VPX_PORTS_VPX_TIMER_H_ 138b26fe55f3e4daa2311dbd2d95e8ac2b4e080685johannkoenig@chromium.org#define VPX_PORTS_VPX_TIMER_H_ 145c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.org#include "vpx/vpx_integer.h" 15474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 16474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if CONFIG_OS_SUPPORT 17474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 18474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if defined(_WIN32) 19474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/* 20474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * Win32 specific includes 21474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org */ 22474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#ifndef WIN32_LEAN_AND_MEAN 23474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define WIN32_LEAN_AND_MEAN 24474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 25474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include <windows.h> 26474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#else 27474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/* 28474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * POSIX specific includes 29474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org */ 30474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include <sys/time.h> 31474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 32474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/* timersub is not provided by msys at this time. */ 33474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#ifndef timersub 34474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define timersub(a, b, result) \ 356fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org do { \ 366fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org (result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \ 376fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org (result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \ 386fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org if ((result)->tv_usec < 0) { \ 396fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org --(result)->tv_sec; \ 406fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org (result)->tv_usec += 1000000; \ 416fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } \ 426fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org } while (0) 43474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 44474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 45474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 46474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 476fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgstruct vpx_usec_timer { 48474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if defined(_WIN32) 496fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org LARGE_INTEGER begin, end; 50474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#else 516fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org struct timeval begin, end; 52474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 53474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}; 54474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 55474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 56474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgstatic void 576fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgvpx_usec_timer_start(struct vpx_usec_timer *t) { 58474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if defined(_WIN32) 596fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org QueryPerformanceCounter(&t->begin); 60474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#else 616fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org gettimeofday(&t->begin, NULL); 62474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 63474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 64474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 65474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 66474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgstatic void 676fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgvpx_usec_timer_mark(struct vpx_usec_timer *t) { 68474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if defined(_WIN32) 696fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org QueryPerformanceCounter(&t->end); 70474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#else 716fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org gettimeofday(&t->end, NULL); 72474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 73474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 74474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 75474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 765c1d3b27608a3f3f6028c069b9bf066a4de474b6hclam@chromium.orgstatic int64_t 776fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgvpx_usec_timer_elapsed(struct vpx_usec_timer *t) { 78474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#if defined(_WIN32) 796fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org LARGE_INTEGER freq, diff; 80474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 816fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org diff.QuadPart = t->end.QuadPart - t->begin.QuadPart; 82474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 836fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org QueryPerformanceFrequency(&freq); 846fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return diff.QuadPart * 1000000 / freq.QuadPart; 85474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#else 866fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org struct timeval diff; 87474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 886fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org timersub(&t->end, &t->begin, &diff); 896fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return diff.tv_sec * 1000000 + diff.tv_usec; 90474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 91474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 92474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 93474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#else /* CONFIG_OS_SUPPORT = 0*/ 94474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 95474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/* Empty timer functions if CONFIG_OS_SUPPORT = 0 */ 96474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#ifndef timersub 97474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define timersub(a, b, result) 98474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif 99474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1006fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgstruct vpx_usec_timer { 1016fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org void *dummy; 102474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org}; 103474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 104474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgstatic void 105474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvpx_usec_timer_start(struct vpx_usec_timer *t) { } 106474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 107474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgstatic void 108474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvpx_usec_timer_mark(struct vpx_usec_timer *t) { } 109474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 110474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgstatic long 1116fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.orgvpx_usec_timer_elapsed(struct vpx_usec_timer *t) { 1126fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org return 0; 1136fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org} 114474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 115474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#endif /* CONFIG_OS_SUPPORT */ 116474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 1178b26fe55f3e4daa2311dbd2d95e8ac2b4e080685johannkoenig@chromium.org#endif // VPX_PORTS_VPX_TIMER_H_ 118