trace: [stderr] Port to generic event information and new control interface
Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
		
							parent
							
								
									60481e210d
								
							
						
					
					
						commit
						c6f18b9195
					
				| 
						 | 
				
			
			@ -20,40 +20,29 @@ PUBLIC = True
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
def c(events):
 | 
			
		||||
    out('#include "trace.h"',
 | 
			
		||||
        '',
 | 
			
		||||
        'TraceEvent trace_list[] = {')
 | 
			
		||||
 | 
			
		||||
    for e in events:
 | 
			
		||||
        out('{.tp_name = "%(name)s", .state=0},',
 | 
			
		||||
            name = e.name,
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
    out('};')
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
def h(events):
 | 
			
		||||
    out('#include <stdio.h>',
 | 
			
		||||
        '#include "trace/stderr.h"',
 | 
			
		||||
        '#include "trace/control.h"',
 | 
			
		||||
        '',
 | 
			
		||||
        'extern TraceEvent trace_list[];')
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    for num, e in enumerate(events):
 | 
			
		||||
    for e in events:
 | 
			
		||||
        argnames = ", ".join(e.args.names())
 | 
			
		||||
        if len(e.args) > 0:
 | 
			
		||||
            argnames = ", " + argnames
 | 
			
		||||
 | 
			
		||||
        out('static inline void trace_%(name)s(%(args)s)',
 | 
			
		||||
            '{',
 | 
			
		||||
            '    if (trace_list[%(event_num)s].state != 0) {',
 | 
			
		||||
            '    bool _state = trace_event_get_state(%(event_id)s);',
 | 
			
		||||
            '    if (_state) {',
 | 
			
		||||
            '        fprintf(stderr, "%(name)s " %(fmt)s "\\n" %(argnames)s);',
 | 
			
		||||
            '    }',
 | 
			
		||||
            '}',
 | 
			
		||||
            name = e.name,
 | 
			
		||||
            args = e.args,
 | 
			
		||||
            event_num = num,
 | 
			
		||||
            fmt = e.fmt,
 | 
			
		||||
            event_id = "TRACE_" + e.name.upper(),
 | 
			
		||||
            fmt = e.fmt.rstrip("\n"),
 | 
			
		||||
            argnames = argnames,
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
    out('',
 | 
			
		||||
        '#define NR_TRACE_EVENTS %d' % len(events))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,40 +4,18 @@
 | 
			
		|||
 | 
			
		||||
void trace_print_events(FILE *stream, fprintf_function stream_printf)
 | 
			
		||||
{
 | 
			
		||||
    unsigned int i;
 | 
			
		||||
    TraceEventID i;
 | 
			
		||||
 | 
			
		||||
    for (i = 0; i < NR_TRACE_EVENTS; i++) {
 | 
			
		||||
    for (i = 0; i < trace_event_count(); i++) {
 | 
			
		||||
        TraceEvent *ev = trace_event_id(i);
 | 
			
		||||
        stream_printf(stream, "%s [Event ID %u] : state %u\n",
 | 
			
		||||
                      trace_list[i].tp_name, i, trace_list[i].state);
 | 
			
		||||
                      trace_event_get_name(ev), i, trace_event_get_state_dynamic(ev));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool trace_event_set_state(const char *name, bool state)
 | 
			
		||||
void trace_event_set_state_dynamic_backend(TraceEvent *ev, bool state)
 | 
			
		||||
{
 | 
			
		||||
    unsigned int i;
 | 
			
		||||
    unsigned int len;
 | 
			
		||||
    bool wildcard = false;
 | 
			
		||||
    bool matched = false;
 | 
			
		||||
 | 
			
		||||
    len = strlen(name);
 | 
			
		||||
    if (len > 0 && name[len - 1] == '*') {
 | 
			
		||||
        wildcard = true;
 | 
			
		||||
        len -= 1;
 | 
			
		||||
    }
 | 
			
		||||
    for (i = 0; i < NR_TRACE_EVENTS; i++) {
 | 
			
		||||
        if (wildcard) {
 | 
			
		||||
            if (!strncmp(trace_list[i].tp_name, name, len)) {
 | 
			
		||||
                trace_list[i].state = state;
 | 
			
		||||
                matched = true;
 | 
			
		||||
            }
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        if (!strcmp(trace_list[i].tp_name, name)) {
 | 
			
		||||
            trace_list[i].state = state;
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return matched;
 | 
			
		||||
    ev->dstate = state;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool trace_backend_init(const char *events, const char *file)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,11 +0,0 @@
 | 
			
		|||
#ifndef TRACE_STDERR_H
 | 
			
		||||
#define TRACE_STDERR_H
 | 
			
		||||
 | 
			
		||||
typedef uint64_t TraceEventID;
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
    const char *tp_name;
 | 
			
		||||
    bool state;
 | 
			
		||||
} TraceEvent;
 | 
			
		||||
 | 
			
		||||
#endif /* ! TRACE_STDERR_H */
 | 
			
		||||
		Loading…
	
		Reference in New Issue