From 5f90dbbc63d646a8cc1c543e648f232ce7d40ac0 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Thu, 6 May 2021 10:05:29 +0200 Subject: [PATCH] Simple cache viewer: Add regular cache cleanup --- indra/llfilesystem/lldiskcache.cpp | 24 ++++++++++++++++++++++++ indra/llfilesystem/lldiskcache.h | 13 +++++++++++++ indra/newview/llappviewer.cpp | 9 +++++++++ indra/newview/llappviewer.h | 3 +++ 4 files changed, 49 insertions(+) diff --git a/indra/llfilesystem/lldiskcache.cpp b/indra/llfilesystem/lldiskcache.cpp index 730a5500cf..2de516c958 100644 --- a/indra/llfilesystem/lldiskcache.cpp +++ b/indra/llfilesystem/lldiskcache.cpp @@ -369,3 +369,27 @@ uintmax_t LLDiskCache::dirFileSize(const std::string dir) return total_file_size; } + +// Regular disk cache cleanup +FSPurgeDiskCacheThread::FSPurgeDiskCacheThread() : + LLThread("PurgeDiskCacheThread", nullptr) +{ +} + +void FSPurgeDiskCacheThread::run() +{ + constexpr F64 CHECK_INTERVAL = 60; + mTimer.setTimerExpirySec(CHECK_INTERVAL); + mTimer.start(); + + do + { + if (mTimer.checkExpirationAndReset(CHECK_INTERVAL)) + { + LLDiskCache::instance().purge(); + } + + ms_sleep(100); + } while (!isQuitting()); +} +// diff --git a/indra/llfilesystem/lldiskcache.h b/indra/llfilesystem/lldiskcache.h index d3eb91e2ad..a30b948cb9 100644 --- a/indra/llfilesystem/lldiskcache.h +++ b/indra/llfilesystem/lldiskcache.h @@ -188,4 +188,17 @@ class LLDiskCache : bool mEnableCacheDebugInfo; }; +// Regular disk cache cleanup +class FSPurgeDiskCacheThread : public LLThread +{ +public: + FSPurgeDiskCacheThread::FSPurgeDiskCacheThread(); + +protected: + void run() override; + +private: + LLTimer mTimer; +}; +// #endif // _LLDISKCACHE diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index fa190721bd..73f670b2f8 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -735,6 +735,7 @@ LLAppViewer* LLAppViewer::sInstance = NULL; LLTextureCache* LLAppViewer::sTextureCache = NULL; LLImageDecodeThread* LLAppViewer::sImageDecodeThread = NULL; LLTextureFetch* LLAppViewer::sTextureFetch = NULL; +FSPurgeDiskCacheThread* LLAppViewer::sPurgeDiskCacheThread = NULL; // Regular disk cache cleanup std::string getRuntime() { @@ -2442,6 +2443,7 @@ bool LLAppViewer::cleanup() sTextureFetch->shutdown(); sTextureCache->shutdown(); sImageDecodeThread->shutdown(); + sPurgeDiskCacheThread->shutdown(); // Regular disk cache cleanup sTextureFetch->shutDownTextureCacheThread() ; sTextureFetch->shutDownImageDecodeThread() ; @@ -2464,6 +2466,10 @@ bool LLAppViewer::cleanup() sImageDecodeThread = NULL; delete mFastTimerLogThread; mFastTimerLogThread = NULL; + // Regular disk cache cleanup + delete sPurgeDiskCacheThread; + sPurgeDiskCacheThread = NULL; + // if (LLFastTimerView::sAnalyzePerformance) { @@ -2584,6 +2590,7 @@ bool LLAppViewer::initThreads() sImageDecodeThread, enable_threads && true, app_metrics_qa_mode); + LLAppViewer::sPurgeDiskCacheThread = new FSPurgeDiskCacheThread(); // Regular disk cache cleanup if (LLTrace::BlockTimer::sLog || LLTrace::BlockTimer::sMetricLog) { @@ -5059,6 +5066,8 @@ bool LLAppViewer::initCache() LLDiskCache::getInstance()->purge(); } } + // Regular disk cache cleanup + LLAppViewer::getPurgeDiskCacheThread()->start(); // FIRE-13066 if (mPurgeTextures && !read_only) diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h index 400c4b494a..9d6801c27d 100644 --- a/indra/newview/llappviewer.h +++ b/indra/newview/llappviewer.h @@ -59,6 +59,7 @@ class LLTextureFetch; class LLWatchdogTimeout; class LLViewerJoystick; class LLViewerRegion; // +class FSPurgeDiskCacheThread; // Regular disk cache cleanup extern LLTrace::BlockTimerStatHandle FTM_FRAME; @@ -118,6 +119,7 @@ public: static LLTextureCache* getTextureCache() { return sTextureCache; } static LLImageDecodeThread* getImageDecodeThread() { return sImageDecodeThread; } static LLTextureFetch* getTextureFetch() { return sTextureFetch; } + static FSPurgeDiskCacheThread* getPurgeDiskCacheThread() { return sPurgeDiskCacheThread; } // Regular disk cache cleanup static U32 getTextureCacheVersion() ; static U32 getObjectCacheVersion() ; @@ -307,6 +309,7 @@ private: static LLTextureCache* sTextureCache; static LLImageDecodeThread* sImageDecodeThread; static LLTextureFetch* sTextureFetch; + static FSPurgeDiskCacheThread* sPurgeDiskCacheThread; // Regular disk cache cleanup S32 mNumSessions;