| //===--- ClangTidyProfiling.h - clang-tidy ----------------------*- C++ -*-===// | 
 | // | 
 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
 | // See https://llvm.org/LICENSE.txt for license information. | 
 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
 | // | 
 | //===----------------------------------------------------------------------===// | 
 |  | 
 | #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CLANGTIDYPROFILING_H | 
 | #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CLANGTIDYPROFILING_H | 
 |  | 
 | #include "llvm/ADT/StringMap.h" | 
 | #include "llvm/Support/Chrono.h" | 
 | #include "llvm/Support/Timer.h" | 
 | #include <optional> | 
 | #include <string> | 
 |  | 
 | namespace llvm { | 
 | class raw_ostream; | 
 | } // namespace llvm | 
 |  | 
 | namespace clang::tidy { | 
 |  | 
 | class ClangTidyProfiling { | 
 | public: | 
 |   struct StorageParams { | 
 |     llvm::sys::TimePoint<> Timestamp; | 
 |     std::string SourceFilename; | 
 |     std::string StoreFilename; | 
 |  | 
 |     StorageParams() = default; | 
 |  | 
 |     StorageParams(llvm::StringRef ProfilePrefix, llvm::StringRef SourceFile); | 
 |   }; | 
 |  | 
 | private: | 
 |   std::optional<StorageParams> Storage; | 
 |  | 
 |   void printUserFriendlyTable(llvm::raw_ostream &OS, llvm::TimerGroup &TG); | 
 |   void printAsJSON(llvm::raw_ostream &OS, llvm::TimerGroup &TG); | 
 |   void storeProfileData(llvm::TimerGroup &TG); | 
 |  | 
 | public: | 
 |   llvm::StringMap<llvm::TimeRecord> Records; | 
 |  | 
 |   ClangTidyProfiling() = default; | 
 |  | 
 |   ClangTidyProfiling(std::optional<StorageParams> Storage); | 
 |  | 
 |   ~ClangTidyProfiling(); | 
 | }; | 
 |  | 
 | } // namespace clang::tidy | 
 |  | 
 | #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CLANGTIDYPROFILING_H |