1 //=- CachePruning.h - Helper to manage the pruning of a cache dir -*- C++ -*-=//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file implements pruning of a directory intended for cache storage, using
13 //===----------------------------------------------------------------------===//
15 #ifndef LLVM_SUPPORT_CACHE_PRUNING_H
16 #define LLVM_SUPPORT_CACHE_PRUNING_H
18 #include "llvm/ADT/StringRef.h"
23 /// Handle pruning a directory provided a path and some options to control what
27 /// Prepare to prune \p Path.
28 CachePruning(StringRef Path) : Path(Path) {}
30 /// Define the pruning interval. This is intended to be used to avoid scanning
31 /// the directory too often. It does not impact the decision of which file to
32 /// prune. A value of 0 forces the scan to occurs.
33 CachePruning &setPruningInterval(std::chrono::seconds PruningInterval) {
34 Interval = PruningInterval;
38 /// Define the expiration for a file. When a file hasn't been accessed for
39 /// \p ExpireAfter seconds, it is removed from the cache. A value of 0 disable
40 /// the expiration-based pruning.
41 CachePruning &setEntryExpiration(std::chrono::seconds ExpireAfter) {
42 Expiration = ExpireAfter;
46 /// Define the maximum size for the cache directory, in terms of percentage of
47 /// the available space on the the disk. Set to 100 to indicate no limit, 50
48 /// to indicate that the cache size will not be left over half the
49 /// available disk space. A value over 100 will be reduced to 100. A value of
50 /// 0 disable the size-based pruning.
51 CachePruning &setMaxSize(unsigned Percentage) {
52 PercentageOfAvailableSpace = std::min(100u, Percentage);
56 /// Peform pruning using the supplied options, returns true if pruning
57 /// occured, i.e. if PruningInterval was expired.
61 // Options that matches the setters above.
63 std::chrono::seconds Expiration;
64 std::chrono::seconds Interval;
65 unsigned PercentageOfAvailableSpace = 0;