Changeset 2f7f70b37fe512a140cdeb6237ca242942fd8448
- 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
| r1e8c1d9 |
r2f7f70b |
|
| 116 | 116 | mtime_t mdate( void ) |
|---|
| 117 | 117 | { |
|---|
| 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 ) |
|---|
| 119 | 132 | return( real_time_clock_usecs() ); |
|---|
| 120 | 133 | |
|---|
| … | … | |
| 189 | 202 | return usec_time; |
|---|
| 190 | 203 | } |
|---|
| 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); |
|---|
| 204 | 204 | #else |
|---|
| 205 | 205 | struct timeval tv_date; |
|---|
| … | … | |
| 221 | 221 | void mwait( mtime_t date ) |
|---|
| 222 | 222 | { |
|---|
| 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) |
|---|
| 245 | 224 | lldiv_t d = lldiv( date, 1000000 ); |
|---|
| 246 | 225 | struct timespec ts = { d.quot, d.rem * 1000 }; |
|---|
| … | … | |
| 252 | 231 | #else |
|---|
| 253 | 232 | |
|---|
| | 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 | |
|---|
| 254 | 241 | struct timeval tv_date; |
|---|
| 255 | 242 | mtime_t delay; /* delay in msec, signed to detect errors */ |
|---|
| … | … | |
| 276 | 263 | void msleep( mtime_t delay ) |
|---|
| 277 | 264 | { |
|---|
| 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 ) |
|---|
| 291 | 266 | lldiv_t d = lldiv( delay, 1000000 ); |
|---|
| 292 | 267 | struct timespec ts = { d.quot, d.rem * 1000 }; |
|---|
| … | … | |
| 296 | 271 | # endif |
|---|
| 297 | 272 | 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) ); |
|---|
| 298 | 285 | |
|---|
| 299 | 286 | #elif defined( HAVE_NANOSLEEP ) |
|---|
| … | … | |
| 316 | 303 | * can be ignored. */ |
|---|
| 317 | 304 | select( 0, NULL, NULL, NULL, &tv_delay ); |
|---|
| 318 | | |
|---|
| 319 | 305 | #endif |
|---|
| 320 | 306 | } |
|---|