blob: 9d86b8e9e80c1ec7741b0d81990da612567b7026 [file] [log] [blame]
Roman Lebedev12152512018-05-08 13:14:21 +00001//===--- ClangTidyProfiling.h - clang-tidy ----------------------*- 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#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CLANGTIDYPROFILING_H
11#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CLANGTIDYPROFILING_H
12
Roman Lebedeva87f1d02018-06-06 15:07:51 +000013#include "llvm/ADT/Optional.h"
Roman Lebedev12152512018-05-08 13:14:21 +000014#include "llvm/ADT/StringMap.h"
Roman Lebedeva87f1d02018-06-06 15:07:51 +000015#include "llvm/Support/Chrono.h"
Roman Lebedev12152512018-05-08 13:14:21 +000016#include "llvm/Support/Timer.h"
17#include "llvm/Support/raw_ostream.h"
Roman Lebedeva87f1d02018-06-06 15:07:51 +000018#include <string>
Roman Lebedev12152512018-05-08 13:14:21 +000019#include <utility>
20#include <vector>
21
22namespace clang {
23namespace tidy {
24
25class ClangTidyProfiling {
Roman Lebedeva87f1d02018-06-06 15:07:51 +000026public:
27 struct StorageParams {
28 llvm::sys::TimePoint<> Timestamp;
29 std::string SourceFilename;
30 std::string StoreFilename;
Roman Lebedev12152512018-05-08 13:14:21 +000031
Roman Lebedeva87f1d02018-06-06 15:07:51 +000032 StorageParams() = default;
Roman Lebedev12152512018-05-08 13:14:21 +000033
Roman Lebedeva87f1d02018-06-06 15:07:51 +000034 StorageParams(llvm::StringRef ProfilePrefix, llvm::StringRef SourceFile);
35 };
36
37private:
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();
Roman Lebedev12152512018-05-08 13:14:21 +000046
47public:
48 llvm::StringMap<llvm::TimeRecord> Records;
49
Roman Lebedeva87f1d02018-06-06 15:07:51 +000050 ClangTidyProfiling() = default;
51
52 ClangTidyProfiling(llvm::Optional<StorageParams> Storage);
53
Roman Lebedev12152512018-05-08 13:14:21 +000054 ~ClangTidyProfiling();
55};
56
57} // end namespace tidy
58} // end namespace clang
59
60#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_CLANGTIDYPROFILING_H