From f104e813c44719476cd0953458a41f2d94e819d2 Mon Sep 17 00:00:00 2001 From: Tracy Ward Date: Sat, 12 Oct 2019 11:24:13 -0400 Subject: [PATCH] Delay writing image cache index until after load complete While loading all songs, disable writing the index file for the image cache, in order to speed up loading and cache generation, similar to how the song cache index file write is delayed. --- src/ImageCache.cpp | 10 +++++++++- src/ImageCache.h | 3 +++ src/SongManager.cpp | 5 ++++- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/ImageCache.cpp b/src/ImageCache.cpp index 5a27c046be..0469d90a78 100644 --- a/src/ImageCache.cpp +++ b/src/ImageCache.cpp @@ -169,6 +169,7 @@ void ImageCache::UnloadAllImages() } ImageCache::ImageCache() + : delay_save_cache(false) { ReadFromDisk(); } @@ -457,9 +458,16 @@ void ImageCache::CacheImageInternal( RString sImageDir, RString sImagePath ) ImageData.SetValue( sImagePath, "Width", iSourceWidth ); ImageData.SetValue( sImagePath, "Height", iSourceHeight ); ImageData.SetValue( sImagePath, "FullHash", GetHashForFile( sImagePath ) ); - ImageData.WriteFile( IMAGE_CACHE_INDEX ); + if (!delay_save_cache) + WriteToDisk(); } +void ImageCache::WriteToDisk() +{ + ImageData.WriteFile(IMAGE_CACHE_INDEX); +} + + /* * (c) 2003 Glenn Maynard * All rights reserved. diff --git a/src/ImageCache.h b/src/ImageCache.h index 57294fc03f..6f8cfcdabd 100644 --- a/src/ImageCache.h +++ b/src/ImageCache.h @@ -13,6 +13,7 @@ public: ImageCache(); ~ImageCache(); void ReadFromDisk(); + void WriteToDisk(); RageTextureID LoadCachedImage( RString sImageDir, RString sImagePath ); void CacheImage( RString sImageDir, RString sImagePath ); @@ -23,6 +24,8 @@ public: void OutputStats() const; + bool delay_save_cache; + private: static RString GetImageCachePath( RString sImageDir, RString sImagePath ); void UnloadAllImages(); diff --git a/src/SongManager.cpp b/src/SongManager.cpp index 6aa220d279..7987ddc9ef 100644 --- a/src/SongManager.cpp +++ b/src/SongManager.cpp @@ -158,7 +158,8 @@ void SongManager::InitSongsFromDisk( LoadingWindow *ld ) RageTimer tm; // Tell SONGINDEX to not write the cache index file every time a song adds // an entry. -Kyz - SONGINDEX->delay_save_cache= true; + SONGINDEX->delay_save_cache = true; + IMAGECACHE->delay_save_cache = true; LoadStepManiaSongDir( SpecialFiles::SONGS_DIR, ld ); const bool bOldVal = PREFSMAN->m_bFastLoad; @@ -168,6 +169,8 @@ void SongManager::InitSongsFromDisk( LoadingWindow *ld ) LoadEnabledSongsFromPref(); SONGINDEX->SaveCacheIndex(); SONGINDEX->delay_save_cache= false; + IMAGECACHE->WriteToDisk(); + IMAGECACHE->delay_save_cache = false; LOG->Trace( "Found %d songs in %f seconds.", (int)m_pSongs.size(), tm.GetDeltaTime() ); }