Fix frame chug when loading big model asynchronously (LP #1019599)

This commit is contained in:
rdb 2016-07-12 11:24:09 +02:00
parent e098da9030
commit 7b7bf93118
2 changed files with 13 additions and 1 deletions

View File

@ -25,6 +25,7 @@ This issue fixes several bugs that were still found in 1.9.2.
* Work around Cg bug generating invalid ASM for saturated tex loads * Work around Cg bug generating invalid ASM for saturated tex loads
* Fix issues with certain Cg shader inputs in DX9 * Fix issues with certain Cg shader inputs in DX9
* Support uint8 index buffers in DX9 * Support uint8 index buffers in DX9
* Fix occasional frame lag when loading a big model asynchronously
------------------------ RELEASE 1.9.2 ------------------------ ------------------------ RELEASE 1.9.2 ------------------------

View File

@ -321,13 +321,24 @@ emergency_read_only() {
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
void BamCache:: void BamCache::
consider_flush_index() { consider_flush_index() {
ReMutexHolder holder(_lock); #if defined(HAVE_THREADS) || defined(DEBUG_THREADS)
if (!_lock.try_acquire()) {
// If we can't grab the lock, no big deal. We don't want to hold up
// the frame waiting for a cache operation. We can try again later.
return;
}
#endif
if (_index_stale_since != 0) { if (_index_stale_since != 0) {
int elapsed = (int)time(NULL) - (int)_index_stale_since; int elapsed = (int)time(NULL) - (int)_index_stale_since;
if (elapsed > _flush_time) { if (elapsed > _flush_time) {
flush_index(); flush_index();
} }
} }
#if defined(HAVE_THREADS) || defined(DEBUG_THREADS)
_lock.release();
#endif
} }
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////