Mercurial > mplayer.hg
changeset 31142:355302f83219
Optimize cache behaviour for the many-consecutive-seeks case.
author | reimar |
---|---|
date | Sun, 23 May 2010 21:53:48 +0000 |
parents | 3b5e8cc5e128 |
children | 48622875aecc |
files | stream/cache2.c |
diffstat | 1 files changed, 13 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/stream/cache2.c Sun May 23 19:49:28 2010 +0000 +++ b/stream/cache2.c Sun May 23 21:53:48 2010 +0000 @@ -23,6 +23,10 @@ // TODO: seeking, data consistency checking #define READ_USLEEP_TIME 10000 +// These defines are used to reduce the cost of many succesive +// seeks (e.g. when a file has no index) by spinning quickly at first. +#define INITIAL_FILL_USLEEP_TIME 1000 +#define INITIAL_FILL_USLEEP_COUNT 10 #define FILL_USLEEP_TIME 50000 #define PREFILL_SLEEP_TIME 200 #define CONTROL_SLEEP_TIME 0 @@ -432,10 +436,17 @@ // cache thread mainloop: signal(SIGTERM,exit_sighandler); // kill signal(SIGUSR1, dummy_sighandler); // wakeup + { + int sleep_count = 0; do { if(!cache_fill(s)){ + if (sleep_count < INITIAL_FILL_USLEEP_COUNT) { + sleep_count++; + usec_sleep(INITIAL_FILL_USLEEP_TIME); + } else usec_sleep(FILL_USLEEP_TIME); // idle - } + } else + sleep_count = 0; // cache_stats(s->cache_data); } while (cache_execute_control(s)); #if defined(__MINGW32__) || defined(__OS2__) @@ -446,6 +457,7 @@ // make sure forked code never leaves this function exit(0); #endif + } } int cache_stream_fill_buffer(stream_t *s){