blob: 59bcbb442791626282e2e8e464943229f47ada31 [file] [log] [blame]
Lluís Vilanovab1bae812013-03-05 14:47:38 +01001/*
2 * Interface for configuring and controlling the state of tracing events.
3 *
Lluís Vilanova17f7ac72016-07-11 12:53:24 +02004 * Copyright (C) 2011-2016 Lluís Vilanova <vilanova@ac.upc.edu>
Lluís Vilanovab1bae812013-03-05 14:47:38 +01005 *
6 * This work is licensed under the terms of the GNU GPL, version 2 or later.
7 * See the COPYING file in the top-level directory.
8 */
9
10#ifndef TRACE__CONTROL_INTERNAL_H
11#define TRACE__CONTROL_INTERNAL_H
12
Lluís Vilanovab1bae812013-03-05 14:47:38 +010013extern TraceEvent trace_events[];
Paolo Bonzini585ec722015-10-28 07:06:27 +010014extern bool trace_events_dstate[];
Paolo Bonzini43b48cf2015-10-28 07:06:26 +010015extern int trace_events_enabled_count;
Lluís Vilanovab1bae812013-03-05 14:47:38 +010016
17
Peter Maydell84f3fe12014-02-20 19:44:25 +000018static inline TraceEventID trace_event_count(void)
19{
20 return TRACE_EVENT_COUNT;
21}
22
Lluís Vilanovab1bae812013-03-05 14:47:38 +010023static inline TraceEvent *trace_event_id(TraceEventID id)
24{
25 assert(id < trace_event_count());
26 return &trace_events[id];
27}
28
Lluís Vilanovab1bae812013-03-05 14:47:38 +010029static inline bool trace_event_is_pattern(const char *str)
30{
31 assert(str != NULL);
32 return strchr(str, '*') != NULL;
33}
34
35static inline TraceEventID trace_event_get_id(TraceEvent *ev)
36{
37 assert(ev != NULL);
38 return ev->id;
39}
40
Lluís Vilanova17f7ac72016-07-11 12:53:24 +020041static inline TraceEventVCPUID trace_event_get_vcpu_id(TraceEvent *ev)
42{
43 return ev->vcpu_id;
44}
45
46static inline bool trace_event_is_vcpu(TraceEvent *ev)
47{
48 return ev->vcpu_id != TRACE_VCPU_EVENT_COUNT;
49}
50
Lluís Vilanovab1bae812013-03-05 14:47:38 +010051static inline const char * trace_event_get_name(TraceEvent *ev)
52{
53 assert(ev != NULL);
54 return ev->name;
55}
56
57static inline bool trace_event_get_state_static(TraceEvent *ev)
58{
59 assert(ev != NULL);
60 return ev->sstate;
61}
62
Paolo Bonzini585ec722015-10-28 07:06:27 +010063static inline bool trace_event_get_state_dynamic_by_id(int id)
64{
65 return unlikely(trace_events_enabled_count) && trace_events_dstate[id];
66}
67
Lluís Vilanovab1bae812013-03-05 14:47:38 +010068static inline bool trace_event_get_state_dynamic(TraceEvent *ev)
69{
Paolo Bonzini585ec722015-10-28 07:06:27 +010070 int id = trace_event_get_id(ev);
71 return trace_event_get_state_dynamic_by_id(id);
Lluís Vilanovab1bae812013-03-05 14:47:38 +010072}
73
74static inline void trace_event_set_state_dynamic(TraceEvent *ev, bool state)
75{
Paolo Bonzini585ec722015-10-28 07:06:27 +010076 int id = trace_event_get_id(ev);
Lluís Vilanovab1bae812013-03-05 14:47:38 +010077 assert(ev != NULL);
78 assert(trace_event_get_state_static(ev));
Paolo Bonzini585ec722015-10-28 07:06:27 +010079 trace_events_enabled_count += state - trace_events_dstate[id];
80 trace_events_dstate[id] = state;
Lluís Vilanovab1bae812013-03-05 14:47:38 +010081}
82
Markus Armbruster175de522016-06-29 15:29:06 +020083#endif /* TRACE__CONTROL_INTERNAL_H */