1 /* Copyright (C) 2021-2024 Free Software Foundation, Inc.
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)
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 /* The DbeSession class is instantiated by a DbeApplication, and contains
22 * all the data referring to a set of loaded experiments
24 * It manages a set of tables for the Experiments, for the LoadObjects
25 * referenced in them, and for the other objects representing the
26 * elements in the program hierarchy that can have metrics associated
27 * with them. It also has a master list of all the metrics available
28 * from all the loaded experiments.
30 * It gets an instance of the Settings class, instantiated as a copy
31 * of the one in the DbeApplication that instantiated the DbeSession.
33 * In addition, it manages a vector of DbeView's (q.v.); each DbeView
34 * represents a window into the DbeSession, and has its own set of
35 * Settings, and FilterSets for the Experiments, and is the access point
36 * for all processed data.
44 #include "dbe_structs.h"
46 #include "Hist_data.h"
48 #include "BaseMetric.h"
49 #include "BaseMetricTreeNode.h"
50 #include "MemorySpace.h"
52 #include "dbe_types.h"
56 #include "Experiment.h"
77 template <typename ITEM
> class DbeSyncMap
;
78 template <class ITEM
> class Vector
;
96 DbeSession (Settings
*_settings
, bool _ipc_mode
, bool _rdt_mode
);
103 set_interactive (bool _interactive
)
105 interactive
= _interactive
;
114 bool is_datamode_available ();
115 bool is_leaklist_available ();
116 bool is_heapdata_available ();
117 bool is_iodata_available ();
118 bool is_racelist_available ();
119 bool is_deadlocklist_available ();
120 bool is_timeline_available ();
121 bool is_ifreq_available ();
122 bool is_omp_available ();
124 bool has_ompavail ();
126 // XXX get_clock should be removed, to support cpus with different clocks
127 // XXX means reworking time-convertible HWC code
128 int get_clock (int id
);
130 // Access functions for DbeView's
132 int createView (int index
, int cloneindex
);
133 DbeView
*getView (int index
);
134 void dropView (int index
);
136 // Access functions controlling the experiment list
137 Vector
<char*> *get_group_or_expt (char *path
); // load an experiment or group
139 void open_experiment (Experiment
*exp
, char *path
);
140 Experiment
*get_exp (int exp_ind
);
141 Vector
<Vector
<char*>*> *getExperimensGroups ();
142 char *setExperimentsGroups (Vector
<Vector
<char*>*> *groups
);
143 char *drop_experiment (int exp_ind
);
144 int find_experiment (char *path
);
149 return exps
->size ();
153 // Access functions controlling the DataObject list
154 DataObject
*createDataObject ();
155 DataObject
*createDataObject (DataObject
*d
, DataObject
*p
= NULL
);
156 DataObject
*createMasterDataObject (DataObject
*);
157 Vector
<DataObject
*> *get_dobj_elements (DataObject
*);
160 get_Total_DataObject ()
166 get_Unknown_DataObject ()
172 get_Scalars_DataObject ()
177 DataObject
*find_dobj_by_name (char *dobj_name
);
178 DataObject
*find_dobj_match (DataObject
*dobj
);
179 DataObject
*find_dobj_master (DataObject
*dobj
);
184 return dobjs
->size ();
187 // check if no -xhwcprof should be ignored
189 check_ignore_no_xhwcprof ()
191 return settings
->get_ignore_no_xhwcprof ();
194 // check if FS warning should be comment, or real warning
196 check_ignore_fs_warn ()
198 return settings
->get_ignore_fs_warn ();
201 // Access functions controlling the LoadObject list
202 DbeSyncMap
<LoadObject
> *loadObjMap
;
203 void append (LoadObject
*lobj
);
204 LoadObject
*createLoadObject (const char *nm
, int64_t cksum
= 0);
205 LoadObject
*createLoadObject (const char *nm
, const char *runTimePath
, DbeFile
*df
);
207 Vector
<LoadObject
*> *
213 void dobj_updateHT (DataObject
*dobj
);
214 LoadObject
*get_Total_LoadObject ();
215 Vector
<LoadObject
*> *get_text_segments ();
216 LoadObject
*get_Unknown_LoadObject ();
217 LoadObject
*find_lobj_by_name (const char *lobj_name
, int64_t cksum
= 0);
219 // Access functions controlling the Tab list
223 return settings
->get_TabList ();
229 return settings
->get_MemTabState ();
232 void mobj_define (MemObjType_t
*);
234 // Access functions controlling metrics
235 BaseMetric
*find_base_reg_metric (char *mcmd
);
236 Vector
<BaseMetric
*> *get_base_reg_metrics (); // excludes comparison (expr) variants
238 Vector
<BaseMetric
*> *
239 get_all_reg_metrics ()
241 return reg_metrics
; // includes comparison (expr) variants
244 BaseMetricTreeNode
*get_reg_metrics_tree ();
245 BaseMetric
*register_metric_expr (BaseMetric::Type type
, char *aux
, char *expr_spec
);
246 BaseMetric
*register_metric (BaseMetric::Type type
);
247 BaseMetric
*register_metric (char *name
, char *username
, char *_def
);
248 BaseMetric
*register_metric (Hwcentry
*ctr
, const char* cmdname
, const char* username
);
249 void drop_metric (BaseMetric
*);
250 Module
*createModule (LoadObject
*lo
, const char *nm
);
251 Module
*createUnknownModule (LoadObject
*lo
);
252 Module
*createClassFile (char *className
);
253 DbeFile
*getDbeFile (char *filename
, int filetype
);
254 SourceFile
*get_Unknown_Source ();
255 SourceFile
*createSourceFile (const char *path
);
256 Histable
*createHistObject (Histable::Type
);
257 Function
*createFunction ();
258 Function
*create_hide_function (LoadObject
*lo
);
259 Function
*get_Total_Function ();
260 Function
*get_Unknown_Function ();
261 Function
*get_JUnknown_Function ();
262 Function
*get_jvm_Function ();
263 LoadObject
*get_OMP_LoadObject ();
264 Function
*get_OMP_Function (int);
265 JMethod
*createJMethod ();
266 Histable
*createIndexObject (int idxtype
, int64_t idx
);
267 Histable
*createIndexObject (int idxtype
, Histable
*hobj
);
275 Function
*getSpecialFunction (SpecialFunction
);
278 findObjectById (uint64_t _id
)
280 long id
= (long) _id
;
281 return (id
>= 0 && id
< objs
->size ()) ? objs
->fetch (id
) : NULL
;
284 Histable
*findObjectById (Histable::Type type
, int subtype
, uint64_t id
);
286 // Other access functions
287 bool find_obj (FILE *dis_file
, FILE *inp_file
, Histable
*&obj
, char *name
,
288 const char *sel
, Histable::Type type
, bool xdefault
);
289 int ask_which (FILE *dis_file
, FILE *inp_file
, Vector
<Histable
*> *list
, char *name
);
290 LoadObject
*map_NametoLoadObject (char *name
, Vector
<Histable
*> *, int which
);
291 Module
*map_NametoModule (char *name
, Vector
<Histable
*> *, int which
);
292 Function
*map_NametoFunction (char *, Vector
<Histable
*> *, const char *);
293 DataObject
*map_NametoDataObject (char *name
, Vector
<Histable
*> *, int which
);
294 bool match_FName (char *name
, Function
*func
);
296 // Functions to convert a string to all matching Functions/DataObjects
297 Vector
<Function
*> *match_func_names (const char *ustr
, Histable::NameFormat nfmt
);
298 Vector
<DataObject
*> *match_dobj_names (char *);
300 // Functions to convert a string to all matching JThreads
301 Vector
<JThread
*> *match_java_threads (char *ustr
, int matchParent
,
302 Vector
<uint64_t> * &grids
,
303 Vector
<uint64_t> * &expids
);
304 // Function to convert a string to all matching File names
305 Vector
<FileData
*> *match_file_names (char *ustr
, Histable::NameFormat nfmt
);
307 // Access functions concerning the search path
314 Vector
<DbeFile
*>*get_classpath ();
315 void set_search_path (Vector
<char*> *path
, bool reset
);
316 void set_search_path (char *lpath
, bool reset
);
317 bool add_classpath (char *path
);
318 bool add_path (char *path
);
319 void set_pathmaps (Vector
<pathmap_t
*> *newPathMap
);
320 Vector
<pathmap_t
*> *get_pathmaps ();
322 // functions to aid debugging
323 void dump_stacks (FILE *);
324 void dump_dataobjects (FILE *);
325 void dump_segments (FILE *);
326 void dump_map (FILE *);
328 // Find dynamic property by name
329 int registerPropertyName (const char *name
);
330 int getPropIdByName (const char *name
);
331 char* getPropName (int propId
);
332 char* getPropUName (int propId
);
334 Vector
<UserLabel
*> *userLabels
; // List of er_labels
335 UserLabel
*findUserLabel (const char *name
);
336 DbeJarFile
*get_JarFile (const char *name
);
337 void append (UserLabel
*lbl
);
338 void append (SourceFile
*sf
);
339 void append (Experiment
*exp
);
340 void append (Hwcentry
*exp
);
341 void set_need_refind ();
343 // Find user defined object by name
344 Expression
*findObjDefByName (const char *);
345 void get_filter_keywords (Vector
<void*> *res
);
347 // Get the Settings class object
354 // static members, used to define or fetch the various IndexSpaces
355 Vector
<void*> *getIndxObjDescriptions (void);
356 Vector
<void*> *getCustomIndxObjects (void);
357 char *indxobj_define (const char *, char *, const char *, char *, char *);
358 char *getIndexSpaceName (int index
);
359 char *getIndexSpaceDescr (int index
);
360 Expression
*getIndexSpaceExpr (int index
);
361 char *getIndexSpaceExprStr (int index
);
362 int findIndexSpaceByName (const char *mname
);
363 void removeIndexSpaceByName (const char *mname
);
364 IndexObjType_t
*getIndexSpace (int index
);
365 IndexObjType_t
*findIndexSpace (const char *mname
);
366 Expression
*ql_parse (const char *expr_spec
);
367 BaseMetric
*find_metric (BaseMetric::Type type
, const char *cmd
, const char *expr_spec
= NULL
);
368 static void dump (char *msg
, Vector
<Metric
*> *mlist
);
369 static void dump (char *msg
, Vector
<BaseMetric
*> *mlist
);
370 static Platform_t platform
; // Sparc, Intel
371 Vector
<ExpGroup
*> *expGroups
;
372 HashMap
<char*, LoadObject
*> *comp_lobjs
; // list of comparable LoadObjects
373 HashMap
<char*, DbeLine
*> *comp_dbelines
; // list of comparable DbeLines
374 HashMap
<char*, SourceFile
*>*comp_sources
; // list of comparable SourceFiles
375 char *localized_SP_UNKNOWN_NAME
;
378 set_lib_visibility_used ()
380 lib_visibility_used
= true;
384 is_lib_visibility_used ()
386 return lib_visibility_used
;
389 void unlink_tmp_files ();
390 char *get_tmp_file_name (const char *nm
, bool for_java
);
392 Vector
<char *> *tmp_files
;
398 // data and methods concerning the machine model
399 // methods are in source file MachineModel.cc
400 Vector
<char*> *list_mach_models (); // scan . and system lib directory for models
401 char *load_mach_model (char *);
406 return dbe_strdup (mach_model_loaded
);
408 Vector
<SourceFile
*> *get_sources ();
412 void check_tab_avail ();
413 bool add_path (char *path
, Vector
<char*> *pathes
);
414 Experiment
*createExperiment ();
416 // Divide the regular createExperiment into two parts -
417 // Part1 creates just the Experiment data structure
418 // Part2 updates related fields and vectors
419 Experiment
*createExperimentPart1 ();
420 void createExperimentPart2 (Experiment
*exp
);
422 Histable
*findIndexObject (int idxtype
, uint64_t idx
);
423 void append_mesgs (StringBuilder
*sb
, char *path
, Experiment
*exp
);
424 static void insert_metric (BaseMetric
*mtr
, Vector
<BaseMetric
*> *mlist
);
425 void update_metric_tree (BaseMetric
*m
);
427 char *find_mach_model (char *); // fine machine model file by name
428 Vector
<Experiment
*> *exps
; // Master list of experiments
429 Vector
<Histable
*> *objs
; // Master list of Functions,Modules,Segments
430 Vector
<DataObject
*> *dobjs
; // Master list of DataObjects
431 Vector
<LoadObject
*> *lobjs
; // Auxiliary list of LoadObjects
432 Vector
<Hwcentry
*> *hwcentries
;
433 Vector
<HashMap
<uint64_t, Histable
*>*> *idxobjs
; // Master list of IndexObjects
434 HashMap
<char*, SourceFile
*> *sourcesMap
; // list of Source which were not archived
435 Vector
<SourceFile
*> *sources
; // list of SourceFiles
436 Map
<const char*, DbeJarFile
*>*dbeJarFiles
;
437 Vector
<Countable
*> *metrics
;
438 Vector
<BaseMetric
*> *reg_metrics
; // Master list of BaseMetrics
439 BaseMetricTreeNode
* reg_metrics_tree
; // Hierarchy of BaseMetrics
440 Vector
<char*> *search_path
;
441 Vector
<char*> *classpath
;
442 Vector
<DbeFile
*> *classpath_df
;
443 Map
<const char*, DbeFile
*>*dbeFiles
;
444 Vector
<DbeView
*> *views
; // Master list of DbeViews
445 bool interactive
; // interactive mode
446 bool lib_visibility_used
;
447 LoadObject
*lo_total
; // Total LoadObject
448 Function
*f_total
; // Total function
449 LoadObject
*lo_unknown
; // Unknown LoadObject
450 Function
*f_unknown
; // Unknown function
451 SourceFile
*sf_unknown
; // Unknown source file
452 Function
*f_jvm
; // pseudo-function <JVM-System>
453 Vector
<Function
*> *f_special
; // pseudo-functions
454 Function
*j_unknown
; // pseudo-function <no Java callstack>
455 LoadObject
*lo_omp
; // OMP LoadObject (libmtsk)
456 Vector
<Function
*> *omp_functions
; // OMP-overhead, etc.
457 DataObject
*d_unknown
; // Unknown dataobject
458 DataObject
*d_scalars
; // Scalars dataobject
459 DataObject
*d_total
; // Total dataobject
460 List
**dnameHTable
; // DataObject name hash table
461 Settings
*settings
; // setting/defaults structure
462 Vector
<IndexObjType_t
*> *dyn_indxobj
; // Index Object definitions
463 int dyn_indxobj_indx
;
464 int dyn_indxobj_indx_fixed
;
466 void propNames_name_store (int propId
, const char *propName
);
467 void propNames_name_store (int propId
, const char *propName
,
468 const char *propUName
, VType_type vType
, int flags
);
469 char* propNames_name_fetch (int propId
);
470 Vector
<PropDescr
*> *propNames
;
472 int user_exp_id_counter
;
473 char *mach_model_loaded
;
477 // For now, there's only one, so keep its pointer
478 extern DbeSession
*dbeSession
;
480 extern Vector
<char *> *split_str (char *str
, char delimiter
);
481 #endif /* _DBESESSION_H */