Ignore:
Timestamp:
Nov 21, 2005 4:59:47 PM (17 years ago)
Author:
bennylp
Message:

Added rdtsc option for win32 timestamp and added pj_elapsed_msec

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjlib/src/pj/os_timestamp_common.c

    r66 r70  
    2727#define MSEC    (1000) 
    2828 
     29#define u64tohighprec(u64)      ((pj_highprec_t)((pj_int64_t)(u64))) 
     30 
    2931static pj_highprec_t get_elapsed( const pj_timestamp *start, 
    3032                                  const pj_timestamp *stop ) 
    3133{ 
     34#if defined(PJ_HAS_INT64) && PJ_HAS_INT64!=0 
     35    return u64tohighprec(stop->u64 - start->u64); 
     36#else 
    3237    pj_highprec_t elapsed_hi, elapsed_lo; 
    3338 
     
    3944 
    4045    return elapsed_hi + elapsed_lo; 
     46#endif 
     47} 
     48 
     49static pj_highprec_t elapsed_msec( const pj_timestamp *start, 
     50                                   const pj_timestamp *stop ) 
     51{ 
     52    pj_timestamp ts_freq; 
     53    pj_highprec_t freq, elapsed; 
     54 
     55    if (pj_get_timestamp_freq(&ts_freq) != PJ_SUCCESS) 
     56        return 0; 
     57 
     58    /* Convert frequency timestamp */ 
     59#if defined(PJ_HAS_INT64) && PJ_HAS_INT64!=0 
     60    freq = u64tohighprec(ts_freq.u64); 
     61#else 
     62    freq = ts_freq.u32.hi; 
     63    pj_highprec_mul(freq, U32MAX); 
     64    freq += ts_freq.u32.lo; 
     65#endif 
     66 
     67    /* Avoid division by zero. */ 
     68    if (freq == 0) freq = 1; 
     69 
     70    /* Get elapsed time in cycles. */ 
     71    elapsed = get_elapsed(start, stop); 
     72 
     73    /* usec = elapsed * MSEC / freq */ 
     74    pj_highprec_mul(elapsed, MSEC); 
     75    pj_highprec_div(elapsed, freq); 
     76 
     77    return elapsed; 
    4178} 
    4279 
     
    5188 
    5289    /* Convert frequency timestamp */ 
     90#if defined(PJ_HAS_INT64) && PJ_HAS_INT64!=0 
     91    freq = u64tohighprec(ts_freq.u64); 
     92#else 
    5393    freq = ts_freq.u32.hi; 
    5494    pj_highprec_mul(freq, U32MAX); 
    5595    freq += ts_freq.u32.lo; 
     96#endif 
    5697 
    5798    /* Avoid division by zero. */ 
     
    78119 
    79120    /* Convert frequency timestamp */ 
     121#if defined(PJ_HAS_INT64) && PJ_HAS_INT64!=0 
     122    freq = u64tohighprec(ts_freq.u64); 
     123#else 
    80124    freq = ts_freq.u32.hi; 
    81125    pj_highprec_mul(freq, U32MAX); 
    82126    freq += ts_freq.u32.lo; 
     127#endif 
    83128 
    84129    /* Avoid division by zero. */ 
     
    101146} 
    102147 
     148PJ_DEF(pj_uint32_t) pj_elapsed_msec( const pj_timestamp *start, 
     149                                     const pj_timestamp *stop ) 
     150{ 
     151    return (pj_uint32_t)elapsed_msec(start, stop); 
     152} 
     153 
    103154PJ_DEF(pj_time_val) pj_elapsed_time( const pj_timestamp *start, 
    104155                                     const pj_timestamp *stop ) 
    105156{ 
    106     pj_highprec_t elapsed = elapsed_usec(start, stop); 
     157    pj_highprec_t elapsed = elapsed_msec(start, stop); 
    107158    pj_time_val tv_elapsed; 
    108159 
     
    114165 
    115166        sec = elapsed; 
    116         pj_highprec_div(sec, USEC); 
     167        pj_highprec_div(sec, MSEC); 
    117168        tv_elapsed.sec = (long)sec; 
    118169 
    119170        msec = elapsed; 
    120         pj_highprec_mod(msec, USEC); 
    121         pj_highprec_div(msec, 1000); 
     171        pj_highprec_mod(msec, MSEC); 
    122172        tv_elapsed.msec = (long)msec; 
    123173 
Note: See TracChangeset for help on using the changeset viewer.