Automatic date update in version.in
[binutils-gdb.git] / gprofng / src / Print.h
blob38a530488082d18139636874dff06f59823ca698
1 /* Copyright (C) 2021 Free Software Foundation, Inc.
2 Contributed by Oracle.
4 This file is part of GNU Binutils.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3, or (at your option)
9 any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, 51 Franklin Street - Fifth Floor, Boston,
19 MA 02110-1301, USA. */
21 #ifndef _PRINT_H
22 #define _PRINT_H
25 // Include files
26 #include <stdio.h>
27 #include <stdlib.h>
28 #include "dbe_types.h"
29 #include "Metric.h"
30 #include "Hist_data.h"
31 #include "Ovw_data.h"
32 #include "Stats_data.h"
33 #include "Emsg.h"
34 #include "Exp_Layout.h"
35 #include "DefaultMap.h"
36 #include "FileData.h"
37 #include "HeapData.h"
38 #include "HashMap.h"
40 const char nl[] = "\n";
41 const char tab[] = "\t";
43 // Printing options.
44 enum Print_destination
46 DEST_PRINTER = 0,
47 DEST_FILE = 1,
48 DEST_OPEN_FILE = 2
51 enum Print_mode
53 MODE_LIST,
54 MODE_DETAIL,
55 MODE_GPROF,
56 MODE_ANNOTATED
59 struct Print_params
61 Print_destination dest; // printer or file
62 char *name; // of printer or file
63 int ncopies; // # of copies
64 bool header; // print header first
65 FILE *openfile; // if destination is DEST_OPEN_FILE
68 class Experiment;
69 class MetricList;
70 class DbeView;
71 class Stack_coverage;
72 class Function;
73 class LoadObject;
75 // Class Definitions
76 class er_print_common_display
78 public:
79 er_print_common_display ()
81 out_file = NULL;
82 pr_params.header = false;
85 virtual ~er_print_common_display () { }
87 // Open the file/printer to write to
88 int open (Print_params *);
90 void
91 set_out_file (FILE *o)
93 out_file = o;
94 pr_params.dest = DEST_FILE;
97 // Print the final output data. This function calls
98 // data_dump() to actually do the dumping of data.
99 bool print_output ();
101 // Print the output in the appropriate format.
102 virtual void data_dump () = 0;
104 void header_dump (int exp_idx);
106 // Return the report. If the report size is greater than max, return truncated report
107 // Allocates memory, so the caller should free this memory.
108 char *get_output (int max);
110 protected:
111 DbeView *dbev;
112 FILE *out_file;
113 Print_params pr_params;
114 char *tmp_file;
115 int exp_idx1, exp_idx2;
116 bool load;
117 bool header;
120 class er_print_histogram : public er_print_common_display
122 public:
123 er_print_histogram (DbeView *dbv, Hist_data *data, MetricList *metrics_list,
124 Print_mode disp_type, int limit, char *sort_name,
125 Histable *sobj, bool show_load, bool show_header);
126 void data_dump ();
128 private:
129 void dump_list (int limit);
130 void dump_detail (int limit);
131 void get_gprof_width (Metric::HistMetric *hist_metric, int limit);
132 void dump_gprof (int limit);
133 void dump_annotated_dataobjects (Vector<int> *marks, int threshold);
134 void dump_annotated ();
136 Stack_coverage *stack_cov;
137 Hist_data *hist_data;
138 MetricList *mlist;
139 Print_mode type;
140 int number_entries;
141 char *sort_metric;
142 Histable *sel_obj;
145 class er_print_ctree : public er_print_common_display
147 public:
148 er_print_ctree (DbeView *dbv, Vector<Histable*> *cstack, Histable *sobj,
149 int limit);
150 void data_dump ();
151 void print_children (Hist_data *data, int index, Histable *obj, char *prefix,
152 Hist_data::HistItem *total);
154 private:
155 Vector<Histable*> *cstack;
156 Histable *sobj;
157 MetricList *mlist;
158 Metric::HistMetric *hist_metric;
159 int limit;
160 int print_row;
163 class er_print_gprof : public er_print_common_display
165 public:
166 er_print_gprof (DbeView *dbv, Vector<Histable*> *cstack);
167 void data_dump ();
168 private:
169 Vector<Histable*> *cstack;
172 class er_print_leaklist : public er_print_common_display
174 public:
175 er_print_leaklist (DbeView *dbv, bool show_leak,
176 bool show_alloca, int limit);
177 void data_dump ();
179 private:
180 bool leak;
181 bool alloca;
182 int limit;
185 class er_print_heapactivity : public er_print_common_display
187 public:
188 er_print_heapactivity (DbeView *_dbev, Histable::Type _type,
189 bool _printStat, int _limit);
190 void data_dump ();
192 private:
193 void printStatistics (Hist_data *hist_data);
194 void printCallStacks (Hist_data *hist_data);
196 Histable::Type type;
197 bool printStat;
198 int limit;
201 class er_print_ioactivity : public er_print_common_display
203 public:
204 er_print_ioactivity (DbeView *_dbev, Histable::Type _type,
205 bool _printStat, int _limit);
206 void data_dump ();
208 private:
209 void printStatistics (Hist_data *hist_data);
210 void printCallStacks (Hist_data *hist_data);
212 Histable::Type type;
213 bool printStat;
214 int limit;
217 class er_print_experiment : public er_print_common_display
219 public:
220 er_print_experiment (DbeView *me, int bgn_idx, int end_idx, bool show_load,
221 bool show_header, bool show_stat, bool show_over, bool show_odetail);
222 void data_dump ();
224 private:
225 int max_len1, max_len2, max_len3;
226 void overview_sum (int &maxlen);
227 void overview_dump (int exp_idx, int &maxlen);
228 void overview_summary (Ovw_data *ovw_data, int &maxlen);
229 void overview_item (Ovw_data::Ovw_item *ovw_item,
230 Ovw_data::Ovw_item *ovw_item_labels);
231 void overview_value (Value *value, ValueTag value_tag, double total_value);
232 void statistics_sum (int &maxlen);
233 void statistics_dump (int exp_idx, int &maxlen);
234 void statistics_item (Stats_data *stats_data);
236 bool stat;
237 bool over;
238 bool odetail;
241 // Print the header. Experiment name and the sample
242 // selection, along with the percentage.
243 char *pr_load_objects (Vector<LoadObject*> *loadobjects, char *lead);
244 char *pr_samples (Experiment *exp);
245 char *pr_mesgs (Emsg *msg, const char *null_str, const char *lead);
246 void print_load_object (FILE *out_file);
247 void print_header (Experiment *exp, FILE *out_file);
249 // Print Function metrics
250 int print_label (FILE *out_file, MetricList *metrics_list,
251 Metric::HistMetric *hist_metric, int space);
252 void print_anno_file (char *name, const char *sel, const char *srcFile,
253 bool isDisasm, FILE *dis_file, FILE *inp_file,
254 FILE *out_file, DbeView *dbev, bool xdefault);
255 void print_html_title (FILE *out_file, char *title);
256 void print_html_label (FILE *out_file, MetricList *metrics_list);
257 void print_html_content (FILE *out_file, Hist_data *d, MetricList *metrics_list,
258 int limit, Histable::NameFormat nfmt);
259 void print_html_one (FILE *out_file, Hist_data *data, Hist_data::HistItem *item,
260 MetricList *metrics_list, Histable::NameFormat nfmt);
261 void print_html_trailer (FILE* out_file);
262 char *html_ize_name (char *name);
263 void print_delim_label (FILE *out_file, MetricList *metrics_list, char delim);
264 void print_delim_content (FILE *out_file, Hist_data *data,
265 MetricList *metrics_list, int limit,
266 Histable::NameFormat nfmt, char delim);
267 void print_delim_one (FILE *out_file, Hist_data *data, Hist_data::HistItem *item,
268 MetricList *metrics_list, Histable::NameFormat nfmt, char delim);
269 void print_delim_trailer (FILE* out_file, char delim);
270 char *csv_ize_name (char *name, char delim);
271 char *split_metric_name (char *name);
273 #endif