1fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* 3fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Copyright (C) Texas Instruments - http://www.ti.com/ 4fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 5fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This library is free software; you can redistribute it and/or 6fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * modify it under the terms of the GNU Lesser General Public 7fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * License as published by the Free Software Foundation; either 8fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * version 2.1 of the License, or (at your option) any later version. 9fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 10fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 11fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This library is distributed in the hope that it will be useful, 12fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * but WITHOUT ANY WARRANTY; without even the implied warranty of 13fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Lesser General Public License for more details. 15fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 16fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 17fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * You should have received a copy of the GNU Lesser General Public 18fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * License along with this library; if not, write to the Free Software 19fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 21fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* This should be only included from perf.h and perf_config.c */ 22fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 23fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdio.h> 24fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdlib.h> 25fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <string.h> 26fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 27fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* This file contains the implementation of the PERF instrumentation object, 28fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin including the customizable interfaces */ 29fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 30fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/****************************************************************************** 31fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin GENERIC TYPES 32fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin******************************************************************************/ 33fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _WIN32 34fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #undef INLINE_SUPPORTED 35fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define INLINE 36fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define INLINEORSTATIC static 37fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 38fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #include <time.h> 39fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 40fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* time and process ID routines */ 41fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 42fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define TIME_STRUCT unsigned long 43fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define TIME_GET(target) time(&target) 44fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define TIME_COPY(target, source) target = source 45fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define TIME_MICROSECONDS(time) 0 46fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define TIME_SECONDS(time) (time) 47fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define TIME_INCREASE(time, microsecs) time += microsecs / 1000000 48fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define TIME_SET(time, sec, microsec) time = sec 49fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define PID_GET(target) target = 0 50fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 51fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 52fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #ifdef __STRICT_ANSI__ 53fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* for some reason strdup, strcasecmp and strncasecmp does not get 54fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin defined on ANSI builds */ 55fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin extern char *strdup(char const *); 56fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin extern int strcasecmp(const char *, const char *); 57fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin extern int strncasecmp(const char *, const char *, size_t); 58fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #endif 59fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 60fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #undef INLINE_SUPPORTED 61fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define INLINE 62fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define INLINEORSTATIC static 63fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 64fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #include <sys/time.h> 65fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #include <sys/types.h> 66fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #include <unistd.h> 67fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 68fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* time and process ID routines */ 69fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 70fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define TIME_STRUCT struct timeval 71fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define TIME_GET(target) gettimeofday(&target, NULL) 72fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define TIME_COPY(target, source) \ 73fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((target).tv_sec = (source).tv_sec), ((target).tv_usec = (source).tv_usec) 74fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define TIME_MICROSECONDS(time) (time).tv_usec 75fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define TIME_SECONDS(time) (time).tv_sec 76fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define TIME_INCREASE(time, microsecs) \ 77fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((time).tv_sec += ((microsecs) / 1000000) + \ 78fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((time).tv_usec + (microsecs) % 1000000) / 1000000), \ 79fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((time).tv_usec = ((time).tv_usec + (microsecs) % 1000000) % 1000000) 80fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define TIME_SET(time, sec, microsec) \ 81fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((time).tv_sec = (sec)), ((time).tv_usec = (microsec)) 82fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #define PID_GET(target) target = getpid() 83fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 84fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 85fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 86fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define TIME_DELTA(time, base) \ 87fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((TIME_SECONDS(time) - TIME_SECONDS(base)) * 1000000 + \ 88fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (TIME_MICROSECONDS(time) - TIME_MICROSECONDS(base))) 89fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 90