diff options
author | Jan Svoboda <jan_svoboda@apple.com> | 2021-12-16 09:27:12 +0100 |
---|---|---|
committer | Jan Svoboda <jan_svoboda@apple.com> | 2021-12-16 09:57:21 +0100 |
commit | f66803457ec7f88fa86376d9aef677dea107818c (patch) | |
tree | b737df69302dd99cee76f09f8bfd426d7b6b3101 /llvm/lib/Support/VirtualFileSystem.cpp | |
parent | 02fc8d5c9eb0703bb1863f22c2d27ff7a580f537 (diff) | |
download | llvm-f66803457ec7f88fa86376d9aef677dea107818c.zip llvm-f66803457ec7f88fa86376d9aef677dea107818c.tar.gz llvm-f66803457ec7f88fa86376d9aef677dea107818c.tar.bz2 |
[clang][deps] Squash caches for original and minimized files
The minimizing and caching filesystem used by the dependency scanner keeps minimized and original files in separate caches.
This setup is not well suited for dealing with files that are sometimes minimized and sometimes not. Such files are being stat-ed and read twice, which is wasteful and also means the two versions of the file can get "out of sync".
This patch squashes the two caches together. When a file is stat-ed or read, its original contents are populated. If a file needs to be minimized, we give the minimizer the already loaded contents instead of reading the file again.
Reviewed By: dexonsmith
Differential Revision: https://reviews.llvm.org/D115346
Diffstat (limited to 'llvm/lib/Support/VirtualFileSystem.cpp')
-rw-r--r-- | llvm/lib/Support/VirtualFileSystem.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/lib/Support/VirtualFileSystem.cpp b/llvm/lib/Support/VirtualFileSystem.cpp index 9bf0384..bec4e8d 100644 --- a/llvm/lib/Support/VirtualFileSystem.cpp +++ b/llvm/lib/Support/VirtualFileSystem.cpp @@ -75,6 +75,12 @@ Status::Status(const Twine &Name, UniqueID UID, sys::TimePoint<> MTime, : Name(Name.str()), UID(UID), MTime(MTime), User(User), Group(Group), Size(Size), Type(Type), Perms(Perms) {} +Status Status::copyWithNewSize(const Status &In, uint64_t NewSize) { + return Status(In.getName(), In.getUniqueID(), In.getLastModificationTime(), + In.getUser(), In.getGroup(), NewSize, In.getType(), + In.getPermissions()); +} + Status Status::copyWithNewName(const Status &In, const Twine &NewName) { return Status(NewName, In.getUniqueID(), In.getLastModificationTime(), In.getUser(), In.getGroup(), In.getSize(), In.getType(), |