[Lldb-commits] [lldb] c6c5944 - [lldb] Allow DataFileCache to be constructed with a different policy

Augusto Noronha via lldb-commits lldb-commits at lists.llvm.org
Thu Aug 11 09:37:32 PDT 2022


Author: Augusto Noronha
Date: 2022-08-11T09:28:30-07:00
New Revision: c6c5944d05e81b5c7f48abea22a98389b1204a33

URL: https://github.com/llvm/llvm-project/commit/c6c5944d05e81b5c7f48abea22a98389b1204a33
DIFF: https://github.com/llvm/llvm-project/commit/c6c5944d05e81b5c7f48abea22a98389b1204a33.diff

LOG: [lldb] Allow DataFileCache to be constructed with a different policy

Differential Revision: https://reviews.llvm.org/D131531

Added: 
    

Modified: 
    lldb/include/lldb/Core/DataFileCache.h
    lldb/source/Core/DataFileCache.cpp

Removed: 
    


################################################################################
diff  --git a/lldb/include/lldb/Core/DataFileCache.h b/lldb/include/lldb/Core/DataFileCache.h
index 2dc69f6ce6b09..300c4842d9d22 100644
--- a/lldb/include/lldb/Core/DataFileCache.h
+++ b/lldb/include/lldb/Core/DataFileCache.h
@@ -14,6 +14,7 @@
 #include "lldb/Utility/UUID.h"
 #include "lldb/lldb-forward.h"
 #include "llvm/ADT/DenseMap.h"
+#include "llvm/Support/CachePruning.h"
 #include "llvm/Support/Caching.h"
 #include <mutex>
 
@@ -40,11 +41,18 @@ namespace lldb_private {
 
 class DataFileCache {
 public:
-  /// Create a data file cache in the directory path that is specified.
+  /// Create a data file cache in the directory path that is specified, using
+  /// the specified policy.
   ///
   /// Data will be cached in files created in this directory when clients call
   /// DataFileCache::SetCacheData.
-  DataFileCache(llvm::StringRef path);
+  DataFileCache(llvm::StringRef path,
+                llvm::CachePruningPolicy policy =
+                    DataFileCache::GetLLDBIndexCachePolicy());
+
+  /// Gets the default LLDB index cache policy, which is controlled by the
+  /// "LLDBIndexCache" family of settings.
+  static llvm::CachePruningPolicy GetLLDBIndexCachePolicy();
 
   /// Get cached data from the cache directory for the specified key.
   ///

diff  --git a/lldb/source/Core/DataFileCache.cpp b/lldb/source/Core/DataFileCache.cpp
index b38adfda169aa..07c6839f01494 100644
--- a/lldb/source/Core/DataFileCache.cpp
+++ b/lldb/source/Core/DataFileCache.cpp
@@ -19,26 +19,34 @@
 
 using namespace lldb_private;
 
-DataFileCache::DataFileCache(llvm::StringRef path) {
-  m_cache_dir.SetPath(path);
 
-  // Prune the cache based off of the LLDB settings each time we create a cache
-  // object.
-  ModuleListProperties &properties =
-      ModuleList::GetGlobalModuleListProperties();
-  llvm::CachePruningPolicy policy;
-  // Only scan once an hour. If we have lots of debug sessions we don't want
-  // to scan this directory too often. A timestamp file is written to the
-  // directory to ensure 
diff erent processes don't scan the directory too often.
-  // This setting doesn't mean that a thread will continually scan the cache
-  // directory within this process.
-  policy.Interval = std::chrono::hours(1);
-  // Get the user settings for pruning.
-  policy.MaxSizeBytes = properties.GetLLDBIndexCacheMaxByteSize();
-  policy.MaxSizePercentageOfAvailableSpace =
-      properties.GetLLDBIndexCacheMaxPercent();
-  policy.Expiration =
-      std::chrono::hours(properties.GetLLDBIndexCacheExpirationDays() * 24);
+llvm::CachePruningPolicy DataFileCache::GetLLDBIndexCachePolicy() {
+  static llvm::CachePruningPolicy policy;
+  static llvm::once_flag once_flag;
+
+  llvm::call_once(once_flag, []() {
+    // Prune the cache based off of the LLDB settings each time we create a
+    // cache object.
+    ModuleListProperties &properties =
+        ModuleList::GetGlobalModuleListProperties();
+    // Only scan once an hour. If we have lots of debug sessions we don't want
+    // to scan this directory too often. A timestamp file is written to the
+    // directory to ensure 
diff erent processes don't scan the directory too
+    // often. This setting doesn't mean that a thread will continually scan the
+    // cache directory within this process.
+    policy.Interval = std::chrono::hours(1);
+    // Get the user settings for pruning.
+    policy.MaxSizeBytes = properties.GetLLDBIndexCacheMaxByteSize();
+    policy.MaxSizePercentageOfAvailableSpace =
+        properties.GetLLDBIndexCacheMaxPercent();
+    policy.Expiration =
+        std::chrono::hours(properties.GetLLDBIndexCacheExpirationDays() * 24);
+  });
+  return policy;
+}
+
+DataFileCache::DataFileCache(llvm::StringRef path, llvm::CachePruningPolicy policy) {
+  m_cache_dir.SetPath(path);
   pruneCache(path, policy);
 
   // This lambda will get called when the data is gotten from the cache and
@@ -311,3 +319,4 @@ llvm::StringRef StringTableReader::Get(uint32_t offset) const {
     return llvm::StringRef();
   return llvm::StringRef(m_data.data() + offset);
 }
+


        


More information about the lldb-commits mailing list