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