diff options
Diffstat (limited to 'clang/lib')
4 files changed, 19 insertions, 2 deletions
diff --git a/clang/lib/Basic/FileManager.cpp b/clang/lib/Basic/FileManager.cpp index 4509cee..6097b85 100644 --- a/clang/lib/Basic/FileManager.cpp +++ b/clang/lib/Basic/FileManager.cpp @@ -692,5 +692,16 @@ void FileManager::PrintStats() const { llvm::errs() << NumFileLookups << " file lookups, " << NumFileCacheMisses << " file cache misses.\n"; + getVirtualFileSystem().visit([](llvm::vfs::FileSystem &VFS) { + if (auto *T = dyn_cast_or_null<llvm::vfs::TracingFileSystem>(&VFS)) + llvm::errs() << "\n*** Virtual File System Stats:\n" + << T->NumStatusCalls << " status() calls\n" + << T->NumOpenFileForReadCalls << " openFileForRead() calls\n" + << T->NumDirBeginCalls << " dir_begin() calls\n" + << T->NumGetRealPathCalls << " getRealPath() calls\n" + << T->NumExistsCalls << " exists() calls\n" + << T->NumIsLocalCalls << " isLocal() calls\n"; + }); + //llvm::errs() << PagesMapped << BytesOfPagesMapped << FSLookups; } diff --git a/clang/lib/Frontend/CompilerInstance.cpp b/clang/lib/Frontend/CompilerInstance.cpp index 1364641..5a27347 100644 --- a/clang/lib/Frontend/CompilerInstance.cpp +++ b/clang/lib/Frontend/CompilerInstance.cpp @@ -381,6 +381,9 @@ FileManager *CompilerInstance::createFileManager( : createVFSFromCompilerInvocation(getInvocation(), getDiagnostics()); assert(VFS && "FileManager has no VFS?"); + if (getFrontendOpts().ShowStats) + VFS = + llvm::makeIntrusiveRefCnt<llvm::vfs::TracingFileSystem>(std::move(VFS)); FileMgr = new FileManager(getFileSystemOpts(), std::move(VFS)); return FileMgr.get(); } diff --git a/clang/lib/Tooling/DependencyScanning/DependencyScanningService.cpp b/clang/lib/Tooling/DependencyScanning/DependencyScanningService.cpp index 7458ef4..4fb5977 100644 --- a/clang/lib/Tooling/DependencyScanning/DependencyScanningService.cpp +++ b/clang/lib/Tooling/DependencyScanning/DependencyScanningService.cpp @@ -15,9 +15,9 @@ using namespace dependencies; DependencyScanningService::DependencyScanningService( ScanningMode Mode, ScanningOutputFormat Format, - ScanningOptimizations OptimizeArgs, bool EagerLoadModules) + ScanningOptimizations OptimizeArgs, bool EagerLoadModules, bool TraceVFS) : Mode(Mode), Format(Format), OptimizeArgs(OptimizeArgs), - EagerLoadModules(EagerLoadModules) { + EagerLoadModules(EagerLoadModules), TraceVFS(TraceVFS) { // Initialize targets for object file support. llvm::InitializeAllTargets(); llvm::InitializeAllTargetMCs(); diff --git a/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp b/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp index 09ad5eb..d77187b 100644 --- a/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp +++ b/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp @@ -501,6 +501,9 @@ DependencyScanningWorker::DependencyScanningWorker( // The scanner itself writes only raw ast files. PCHContainerOps->registerWriter(std::make_unique<RawPCHContainerWriter>()); + if (Service.shouldTraceVFS()) + FS = llvm::makeIntrusiveRefCnt<llvm::vfs::TracingFileSystem>(std::move(FS)); + switch (Service.getMode()) { case ScanningMode::DependencyDirectivesScan: DepFS = |