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