annotate tools/llvm-cov/SourceCoverageView.h @ 121:803732b1fca8

LLVM 5.0
author kono
date Fri, 27 Oct 2017 17:07:41 +0900
parents 1172e4bd9c6f
children 3a76565eade5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 //===- SourceCoverageView.h - Code coverage view for source code ----------===//
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 //
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 // The LLVM Compiler Infrastructure
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 //
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 // This file is distributed under the University of Illinois Open Source
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 // License. See LICENSE.TXT for details.
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 //
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 //===----------------------------------------------------------------------===//
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
9 ///
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
10 /// \file This class implements rendering for code coverage of source code.
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
11 ///
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 //===----------------------------------------------------------------------===//
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 #ifndef LLVM_COV_SOURCECOVERAGEVIEW_H
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 #define LLVM_COV_SOURCECOVERAGEVIEW_H
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 #include "CoverageViewOptions.h"
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
18 #include "CoverageSummaryInfo.h"
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
19 #include "llvm/ProfileData/Coverage/CoverageMapping.h"
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 #include "llvm/Support/MemoryBuffer.h"
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 #include <vector>
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 namespace llvm {
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
25 using namespace coverage;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
26
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
27 class CoverageFiltersMatchAll;
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
28 class SourceCoverageView;
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
29
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
30 /// \brief A view that represents a macro or include expansion.
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
31 struct ExpansionView {
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
32 CounterMappingRegion Region;
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
33 std::unique_ptr<SourceCoverageView> View;
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
34
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
35 ExpansionView(const CounterMappingRegion &Region,
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
36 std::unique_ptr<SourceCoverageView> View)
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
37 : Region(Region), View(std::move(View)) {}
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
38 ExpansionView(ExpansionView &&RHS)
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
39 : Region(std::move(RHS.Region)), View(std::move(RHS.View)) {}
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
40 ExpansionView &operator=(ExpansionView &&RHS) {
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
41 Region = std::move(RHS.Region);
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
42 View = std::move(RHS.View);
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
43 return *this;
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
44 }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
45
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
46 unsigned getLine() const { return Region.LineStart; }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
47 unsigned getStartCol() const { return Region.ColumnStart; }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
48 unsigned getEndCol() const { return Region.ColumnEnd; }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
49
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
50 friend bool operator<(const ExpansionView &LHS, const ExpansionView &RHS) {
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
51 return LHS.Region.startLoc() < RHS.Region.startLoc();
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
52 }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
53 };
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
54
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
55 /// \brief A view that represents a function instantiation.
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
56 struct InstantiationView {
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
57 StringRef FunctionName;
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
58 unsigned Line;
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
59 std::unique_ptr<SourceCoverageView> View;
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
60
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
61 InstantiationView(StringRef FunctionName, unsigned Line,
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
62 std::unique_ptr<SourceCoverageView> View)
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
63 : FunctionName(FunctionName), Line(Line), View(std::move(View)) {}
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
64
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
65 friend bool operator<(const InstantiationView &LHS,
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
66 const InstantiationView &RHS) {
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
67 return LHS.Line < RHS.Line;
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
68 }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
69 };
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
70
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
71 /// \brief A file manager that handles format-aware file creation.
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
72 class CoveragePrinter {
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
73 public:
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
74 struct StreamDestructor {
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
75 void operator()(raw_ostream *OS) const;
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 };
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
78 using OwnedStream = std::unique_ptr<raw_ostream, StreamDestructor>;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
79
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
80 protected:
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
81 const CoverageViewOptions &Opts;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
82
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
83 CoveragePrinter(const CoverageViewOptions &Opts) : Opts(Opts) {}
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
84
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
85 /// \brief Return `OutputDir/ToplevelDir/Path.Extension`. If \p InToplevel is
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
86 /// false, skip the ToplevelDir component. If \p Relative is false, skip the
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
87 /// OutputDir component.
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
88 std::string getOutputPath(StringRef Path, StringRef Extension,
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
89 bool InToplevel, bool Relative = true) const;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
90
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
91 /// \brief If directory output is enabled, create a file in that directory
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
92 /// at the path given by getOutputPath(). Otherwise, return stdout.
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
93 Expected<OwnedStream> createOutputStream(StringRef Path, StringRef Extension,
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
94 bool InToplevel) const;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
95
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
96 /// \brief Return the sub-directory name for file coverage reports.
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
97 static StringRef getCoverageDir() { return "coverage"; }
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
98
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
99 public:
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
100 static std::unique_ptr<CoveragePrinter>
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
101 create(const CoverageViewOptions &Opts);
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
102
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
103 virtual ~CoveragePrinter() {}
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
104
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
105 /// @name File Creation Interface
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
106 /// @{
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
107
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
108 /// \brief Create a file to print a coverage view into.
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
109 virtual Expected<OwnedStream> createViewFile(StringRef Path,
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
110 bool InToplevel) = 0;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
111
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
112 /// \brief Close a file which has been used to print a coverage view.
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
113 virtual void closeViewFile(OwnedStream OS) = 0;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
114
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
115 /// \brief Create an index which lists reports for the given source files.
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
116 virtual Error createIndexFile(ArrayRef<std::string> SourceFiles,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
117 const CoverageMapping &Coverage,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
118 const CoverageFiltersMatchAll &Filters) = 0;
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
119
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
120 /// @}
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
121 };
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
122
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
123 /// \brief A code coverage view of a source file or function.
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
124 ///
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
125 /// A source coverage view and its nested sub-views form a file-oriented
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
126 /// representation of code coverage data. This view can be printed out by a
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
127 /// renderer which implements the Rendering Interface.
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
128 class SourceCoverageView {
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
129 /// A function or file name.
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
130 StringRef SourceName;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
131
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
132 /// A memory buffer backing the source on display.
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
133 const MemoryBuffer &File;
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
134
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
135 /// Various options to guide the coverage renderer.
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
136 const CoverageViewOptions &Options;
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
137
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
138 /// Complete coverage information about the source on display.
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
139 CoverageData CoverageInfo;
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
140
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
141 /// A container for all expansions (e.g macros) in the source on display.
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
142 std::vector<ExpansionView> ExpansionSubViews;
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
143
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
144 /// A container for all instantiations (e.g template functions) in the source
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
145 /// on display.
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
146 std::vector<InstantiationView> InstantiationSubViews;
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
147
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
148 /// Get the first uncovered line number for the source file.
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
149 unsigned getFirstUncoveredLineNo();
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
150
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
151 protected:
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
152 struct LineRef {
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
153 StringRef Line;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
154 int64_t LineNo;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
155
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
156 LineRef(StringRef Line, int64_t LineNo) : Line(Line), LineNo(LineNo) {}
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
157 };
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
158
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
159 using CoverageSegmentArray = ArrayRef<const CoverageSegment *>;
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
160
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
161 /// @name Rendering Interface
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
162 /// @{
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
163
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
164 /// \brief Render a header for the view.
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
165 virtual void renderViewHeader(raw_ostream &OS) = 0;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
166
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
167 /// \brief Render a footer for the view.
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
168 virtual void renderViewFooter(raw_ostream &OS) = 0;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
169
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
170 /// \brief Render the source name for the view.
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
171 virtual void renderSourceName(raw_ostream &OS, bool WholeFile) = 0;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
172
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
173 /// \brief Render the line prefix at the given \p ViewDepth.
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
174 virtual void renderLinePrefix(raw_ostream &OS, unsigned ViewDepth) = 0;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
175
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
176 /// \brief Render the line suffix at the given \p ViewDepth.
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
177 virtual void renderLineSuffix(raw_ostream &OS, unsigned ViewDepth) = 0;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
178
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
179 /// \brief Render a view divider at the given \p ViewDepth.
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
180 virtual void renderViewDivider(raw_ostream &OS, unsigned ViewDepth) = 0;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
181
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
182 /// \brief Render a source line with highlighting.
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
183 virtual void renderLine(raw_ostream &OS, LineRef L,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
184 const LineCoverageStats &LCS, unsigned ExpansionCol,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
185 unsigned ViewDepth) = 0;
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
186
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
187 /// \brief Render the line's execution count column.
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
188 virtual void renderLineCoverageColumn(raw_ostream &OS,
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
189 const LineCoverageStats &Line) = 0;
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
190
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
191 /// \brief Render the line number column.
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
192 virtual void renderLineNumberColumn(raw_ostream &OS, unsigned LineNo) = 0;
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
193
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
194 /// \brief Render all the region's execution counts on a line.
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
195 virtual void renderRegionMarkers(raw_ostream &OS,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
196 const LineCoverageStats &Line,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
197 unsigned ViewDepth) = 0;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
198
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
199 /// \brief Render the site of an expansion.
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
200 virtual void renderExpansionSite(raw_ostream &OS, LineRef L,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
201 const LineCoverageStats &LCS,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
202 unsigned ExpansionCol,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
203 unsigned ViewDepth) = 0;
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
204
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
205 /// \brief Render an expansion view and any nested views.
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
206 virtual void renderExpansionView(raw_ostream &OS, ExpansionView &ESV,
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
207 unsigned ViewDepth) = 0;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
208
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
209 /// \brief Render an instantiation view and any nested views.
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
210 virtual void renderInstantiationView(raw_ostream &OS, InstantiationView &ISV,
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
211 unsigned ViewDepth) = 0;
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
212
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
213 /// \brief Render \p Title, a project title if one is available, and the
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
214 /// created time.
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
215 virtual void renderTitle(raw_ostream &OS, StringRef CellText) = 0;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
216
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
217 /// \brief Render the table header for a given source file.
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
218 virtual void renderTableHeader(raw_ostream &OS, unsigned FirstUncoveredLineNo,
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
219 unsigned IndentLevel) = 0;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
220
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
221 /// @}
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
222
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
223 /// \brief Format a count using engineering notation with 3 significant
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
224 /// digits.
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
225 static std::string formatCount(uint64_t N);
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
226
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
227 /// \brief Check if region marker output is expected for a line.
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
228 bool shouldRenderRegionMarkers(CoverageSegmentArray Segments) const;
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
229
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
230 /// \brief Check if there are any sub-views attached to this view.
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
231 bool hasSubViews() const;
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
232
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
233 SourceCoverageView(StringRef SourceName, const MemoryBuffer &File,
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
234 const CoverageViewOptions &Options,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
235 CoverageData &&CoverageInfo)
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
236 : SourceName(SourceName), File(File), Options(Options),
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
237 CoverageInfo(std::move(CoverageInfo)) {}
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
238
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
239 public:
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
240 static std::unique_ptr<SourceCoverageView>
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
241 create(StringRef SourceName, const MemoryBuffer &File,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
242 const CoverageViewOptions &Options, CoverageData &&CoverageInfo);
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
243
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
244 virtual ~SourceCoverageView() {}
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
245
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
246 /// \brief Return the source name formatted for the host OS.
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
247 std::string getSourceName() const;
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
248
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
249 const CoverageViewOptions &getOptions() const { return Options; }
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
250
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
251 /// \brief Add an expansion subview to this view.
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
252 void addExpansion(const CounterMappingRegion &Region,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
253 std::unique_ptr<SourceCoverageView> View);
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
254
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
255 /// \brief Add a function instantiation subview to this view.
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
256 void addInstantiation(StringRef FunctionName, unsigned Line,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
257 std::unique_ptr<SourceCoverageView> View);
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
258
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
259 /// \brief Print the code coverage information for a specific portion of a
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
260 /// source file to the output stream.
1172e4bd9c6f update 4.0.0
mir3636
parents: 95
diff changeset
261 void print(raw_ostream &OS, bool WholeFile, bool ShowSourceName,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
262 bool ShowTitle, unsigned ViewDepth = 0);
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
263 };
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
264
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
265 } // namespace llvm
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
266
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
267 #endif // LLVM_COV_SOURCECOVERAGEVIEW_H