trace: track enabled events in a separate array

This is more cache friendly on the fast path, where we already have
the event id available.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
Paolo Bonzini 2015-10-28 07:06:27 +01:00 committed by Stefan Hajnoczi
parent 43b48cfc3e
commit 585ec7273e
5 changed files with 14 additions and 8 deletions

View file

@ -14,6 +14,7 @@
extern TraceEvent trace_events[];
extern bool trace_events_dstate[];
extern int trace_events_enabled_count;
@ -52,18 +53,24 @@ static inline bool trace_event_get_state_static(TraceEvent *ev)
return ev->sstate;
}
static inline bool trace_event_get_state_dynamic_by_id(int id)
{
return unlikely(trace_events_enabled_count) && trace_events_dstate[id];
}
static inline bool trace_event_get_state_dynamic(TraceEvent *ev)
{
assert(ev != NULL);
return unlikely(trace_events_enabled_count) && ev->dstate;
int id = trace_event_get_id(ev);
return trace_event_get_state_dynamic_by_id(id);
}
static inline void trace_event_set_state_dynamic(TraceEvent *ev, bool state)
{
int id = trace_event_get_id(ev);
assert(ev != NULL);
assert(trace_event_get_state_static(ev));
trace_events_enabled_count += state - ev->dstate;
ev->dstate = state;
trace_events_enabled_count += state - trace_events_dstate[id];
trace_events_dstate[id] = state;
}
#endif /* TRACE__CONTROL_INTERNAL_H */