Changeset 2f7f70b37fe512a140cdeb6237ca242942fd8448

Show
Ignore:
Timestamp:
11/25/06 16:38:10 (2 years ago)
Author:
Rémi Denis-Courmont <rem@videolan.org>
git-committer:
Rémi Denis-Courmont <rem@videolan.org> 1164469090 +0000
git-parent:

[61d872f559ebffc1a4e0768a77d3631523c60d71]

git-author:
Rémi Denis-Courmont <rem@videolan.org> 1164469090 +0000
Message:

Factorize mwait() code,
except for POSIX timers case, which is currently the only natively absolute
timers implementation on LibVLC.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • src/misc/mtime.c

    r1e8c1d9 r2f7f70b  
    116116mtime_t mdate( void ) 
    117117{ 
    118 #if defined( HAVE_KERNEL_OS_H ) 
     118#if defined (HAVE_CLOCK_NANOSLEEP) 
     119    struct timespec ts; 
     120 
     121# if (_POSIX_MONOTONIC_CLOCK - 0 >= 0) 
     122    /* Try to use POSIX monotonic clock if available */ 
     123    if( clock_gettime( CLOCK_MONOTONIC, &ts ) ) 
     124# endif 
     125        /* Run-time fallback to real-time clock (always available) */ 
     126        (void)clock_gettime( CLOCK_REALTIME, &ts ); 
     127 
     128    return ((mtime_t)ts.tv_sec * (mtime_t)1000000) 
     129           + (mtime_t)(ts.tv_nsec / 1000); 
     130 
     131#elif defined( HAVE_KERNEL_OS_H ) 
    119132    return( real_time_clock_usecs() ); 
    120133 
     
    189202        return usec_time; 
    190203    } 
    191  
    192 #elif defined (HAVE_CLOCK_NANOSLEEP) 
    193     struct timespec ts; 
    194  
    195 # if (_POSIX_MONOTONIC_CLOCK - 0 >= 0) 
    196     /* Try to use POSIX monotonic clock if available */ 
    197     if( clock_gettime( CLOCK_MONOTONIC, &ts ) ) 
    198 # endif 
    199         /* Run-time fallback to real-time clock (always available) */ 
    200         (void)clock_gettime( CLOCK_REALTIME, &ts ); 
    201  
    202     return ((mtime_t)ts.tv_sec * (mtime_t)1000000) 
    203            + (mtime_t)(ts.tv_nsec / 1000); 
    204204#else 
    205205    struct timeval tv_date; 
     
    221221void mwait( mtime_t date ) 
    222222{ 
    223 #if defined( HAVE_KERNEL_OS_H ) 
    224     mtime_t delay; 
    225  
    226     delay = date - real_time_clock_usecs(); 
    227     if( delay <= 0 ) 
    228     { 
    229         return; 
    230     } 
    231     snooze( delay ); 
    232  
    233 #elif defined( WIN32 ) || defined( UNDER_CE ) 
    234     mtime_t usec_time, delay; 
    235  
    236     usec_time = mdate(); 
    237     delay = date - usec_time; 
    238     if( delay <= 0 ) 
    239     { 
    240         return; 
    241     } 
    242     msleep( delay ); 
    243  
    244 #elif defined (HAVE_CLOCK_NANOSLEEP) 
     223#if defined (HAVE_CLOCK_NANOSLEEP) 
    245224    lldiv_t d = lldiv( date, 1000000 ); 
    246225    struct timespec ts = { d.quot, d.rem * 1000 }; 
     
    252231#else 
    253232 
     233    mtime_t usec_time, delay; 
     234 
     235    usec_time = mdate(); 
     236    delay = date - usec_time; 
     237    if( delay > 0 ) 
     238        msleep( delay ); 
     239 
     240 
    254241    struct timeval tv_date; 
    255242    mtime_t        delay;          /* delay in msec, signed to detect errors */ 
     
    276263void msleep( mtime_t delay ) 
    277264{ 
    278 #if defined( HAVE_KERNEL_OS_H ) 
    279     snooze( delay ); 
    280  
    281 #elif defined( PTH_INIT_IN_PTH_H ) 
    282     pth_usleep( delay ); 
    283  
    284 #elif defined( ST_INIT_IN_ST_H ) 
    285     st_usleep( delay ); 
    286  
    287 #elif defined( WIN32 ) || defined( UNDER_CE ) 
    288     Sleep( (int) (delay / 1000) ); 
    289  
    290 #elif defined( HAVE_CLOCK_NANOSLEEP )  
     265#if defined( HAVE_CLOCK_NANOSLEEP )  
    291266    lldiv_t d = lldiv( delay, 1000000 ); 
    292267    struct timespec ts = { d.quot, d.rem * 1000 }; 
     
    296271# endif 
    297272        clock_nanosleep( CLOCK_REALTIME, 0, &ts, NULL ); 
     273 
     274#elif defined( HAVE_KERNEL_OS_H ) 
     275    snooze( delay ); 
     276 
     277#elif defined( PTH_INIT_IN_PTH_H ) 
     278    pth_usleep( delay ); 
     279 
     280#elif defined( ST_INIT_IN_ST_H ) 
     281    st_usleep( delay ); 
     282 
     283#elif defined( WIN32 ) || defined( UNDER_CE ) 
     284    Sleep( (int) (delay / 1000) ); 
    298285 
    299286#elif defined( HAVE_NANOSLEEP ) 
     
    316303     * can be ignored. */ 
    317304    select( 0, NULL, NULL, NULL, &tv_delay ); 
    318  
    319305#endif 
    320306}