1 //===--- ClangTidyProfiling.h - clang-tidy ----------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CLANGTIDYPROFILING_H 10 #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CLANGTIDYPROFILING_H 11 12 #include "llvm/ADT/Optional.h" 13 #include "llvm/ADT/StringMap.h" 14 #include "llvm/Support/Chrono.h" 15 #include "llvm/Support/Timer.h" 16 #include <string> 17 18 namespace llvm { 19 class raw_ostream; 20 } // namespace llvm 21 22 namespace clang { 23 namespace tidy { 24 25 class ClangTidyProfiling { 26 public: 27 struct StorageParams { 28 llvm::sys::TimePoint<> Timestamp; 29 std::string SourceFilename; 30 std::string StoreFilename; 31 32 StorageParams() = default; 33 34 StorageParams(llvm::StringRef ProfilePrefix, llvm::StringRef SourceFile); 35 }; 36 37 private: 38 llvm::Optional<llvm::TimerGroup> TG; 39 40 llvm::Optional<StorageParams> Storage; 41 42 void printUserFriendlyTable(llvm::raw_ostream &OS); 43 void printAsJSON(llvm::raw_ostream &OS); 44 45 void storeProfileData(); 46 47 public: 48 llvm::StringMap<llvm::TimeRecord> Records; 49 50 ClangTidyProfiling() = default; 51 52 ClangTidyProfiling(llvm::Optional<StorageParams> Storage); 53 54 ~ClangTidyProfiling(); 55 }; 56 57 } // end namespace tidy 58 } // end namespace clang 59 60 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CLANGTIDYPROFILING_H 61