1 /*--------------------------------------------------------------------*/
4 /*--------------------------------------------------------------------*/
7 This file is part of Callgrind, a Valgrind tool for call tracing.
9 Copyright (C) 2002-2013, Josef Weidendorfer (Josef.Weidendorfer@gmx.de)
11 This program is free software; you can redistribute it and/or
12 modify it under the terms of the GNU General Public License as
13 published by the Free Software Foundation; either version 2 of the
14 License, or (at your option) any later version.
16 This program is distributed in the hope that it will be useful, but
17 WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 General Public License for more details.
21 You should have received a copy of the GNU General Public License
22 along with this program; if not, write to the Free Software
23 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
26 The GNU General Public License is contained in the file COPYING.
29 /* Abstractions for 64-bit cost lists (events.h) */
34 #include "pub_tool_basics.h"
36 #define CLG_(str) VGAPPEND(vgCallgrind_,str)
38 /* Event groups consist of one or more named event types.
39 * Event sets are constructed from such event groups.
41 * Event groups have to be registered globally with a unique ID
42 * before they can be used in an event set.
43 * A group can appear at most once in a event set.
46 #define MAX_EVENTGROUP_COUNT 10
48 typedef struct _EventGroup EventGroup
;
54 /* return 0 if event group can not be registered */
55 EventGroup
* CLG_(register_event_group
) (int id
, const HChar
*);
56 EventGroup
* CLG_(register_event_group2
)(int id
, const HChar
*, const HChar
*);
57 EventGroup
* CLG_(register_event_group3
)(int id
, const HChar
*, const HChar
*,
59 EventGroup
* CLG_(register_event_group4
)(int id
, const HChar
*, const HChar
*,
60 const HChar
*, const HChar
*);
61 EventGroup
* CLG_(get_event_group
)(int id
);
63 /* Event sets are defined by event groups they consist of. */
65 typedef struct _EventSet EventSet
;
67 /* if subset with ID x is in the set, then bit x is set */
71 Int offset
[MAX_EVENTGROUP_COUNT
];
74 /* Same event set is returned when requesting same event groups */
75 EventSet
* CLG_(get_event_set
)(Int id
);
76 EventSet
* CLG_(get_event_set2
)(Int id1
, Int id2
);
77 EventSet
* CLG_(add_event_group
)(EventSet
*, Int id
);
78 EventSet
* CLG_(add_event_group2
)(EventSet
*, Int id1
, Int id2
);
79 EventSet
* CLG_(add_event_set
)(EventSet
*, EventSet
*);
82 /* Operations on costs. A cost pointer of 0 means zero cost.
83 * Functions ending in _lz allocate cost arrays only when needed
85 ULong
* CLG_(get_eventset_cost
)(EventSet
*);
86 /* Set costs of event set to 0 */
87 void CLG_(init_cost
)(EventSet
*,ULong
*);
88 /* This always allocates counter and sets them to 0 */
89 void CLG_(init_cost_lz
)(EventSet
*,ULong
**);
90 /* Set costs of an event set to zero */
91 void CLG_(zero_cost
)(EventSet
*,ULong
*);
92 Bool
CLG_(is_zero_cost
)(EventSet
*,ULong
*);
93 void CLG_(copy_cost
)(EventSet
*,ULong
* dst
, ULong
* src
);
94 void CLG_(copy_cost_lz
)(EventSet
*,ULong
** pdst
, ULong
* src
);
95 void CLG_(add_cost
)(EventSet
*,ULong
* dst
, ULong
* src
);
96 void CLG_(add_cost_lz
)(EventSet
*,ULong
** pdst
, ULong
* src
);
97 /* Adds src to dst and zeros src. Returns false if nothing changed */
98 Bool
CLG_(add_and_zero_cost
)(EventSet
*,ULong
* dst
, ULong
* src
);
99 Bool
CLG_(add_and_zero_cost2
)(EventSet
*,ULong
* dst
,EventSet
*,ULong
* src
);
100 /* Adds difference of new and old to to dst, and set old to new.
101 * Returns false if nothing changed */
102 Bool
CLG_(add_diff_cost
)(EventSet
*,ULong
* dst
, ULong
* old
, ULong
* new_cost
);
103 Bool
CLG_(add_diff_cost_lz
)(EventSet
*,ULong
** pdst
, ULong
* old
, ULong
* new_cost
);
105 /* EventMapping: An ordered subset of events from an event set.
106 * This is used to print out part of an EventSet, or in another order.
108 struct EventMappingEntry
{
113 typedef struct _EventMapping EventMapping
;
114 struct _EventMapping
{
118 struct EventMappingEntry entry
[0];
121 /* Allocate space for an event mapping */
122 EventMapping
* CLG_(get_eventmapping
)(EventSet
*);
123 void CLG_(append_event
)(EventMapping
*, const HChar
*);
124 /* Returns event mapping as a character string. That string is dynamically
125 allocated and it is the caller's responsibility to free it.
126 The function never returns NULL. */
127 HChar
*CLG_(eventmapping_as_string
)(const EventMapping
*);
128 /* Returns mapping cost as a character string. That string is dynamically
129 allocated and it is the caller's responsibility to free it.
130 The function never returns NULL. */
131 HChar
*CLG_(mappingcost_as_string
)(const EventMapping
*, const ULong
*);
133 #endif /* CLG_EVENTS */