diff options
author | Lluís Vilanova <vilanova@ac.upc.edu> | 2014-02-23 20:37:40 +0100 |
---|---|---|
committer | Stefan Hajnoczi <stefanha@redhat.com> | 2014-05-07 19:07:18 +0200 |
commit | 1dad2ce97345f3424c4990cb232b40a35d5e936b (patch) | |
tree | 1e7ebf28f38266aca24947f76294f8b6ac340bc5 /scripts/tracetool/backend/simple.py | |
parent | ef0bd3bba674769c7d36bf400fc4fe7ea43244c5 (diff) |
trace: [tracetool] Minimize the amount of per-backend code
Backends now only contain the essential backend-specific code, and most of the work is moved to frontend code.
Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'scripts/tracetool/backend/simple.py')
-rw-r--r-- | scripts/tracetool/backend/simple.py | 130 |
1 files changed, 64 insertions, 66 deletions
diff --git a/scripts/tracetool/backend/simple.py b/scripts/tracetool/backend/simple.py index ca48e1236f..e8c2cd57e9 100644 --- a/scripts/tracetool/backend/simple.py +++ b/scripts/tracetool/backend/simple.py @@ -26,76 +26,74 @@ def is_string(arg): else: return False -def c(events): + +def generate_h_begin(events): + for event in events: + out('void _simple_%(api)s(%(args)s);', + api=event.api(), + args=event.args) + out('') + + +def generate_h(event): + out(' _simple_%(api)s(%(args)s);', + api=event.api(), + args=", ".join(event.args.names())) + + +def generate_c_begin(events): out('#include "trace.h"', '#include "trace/control.h"', '#include "trace/simple.h"', + '') + + +def generate_c(event): + out('void _simple_%(api)s(%(args)s)', + '{', + ' TraceBufferRecord rec;', + api=event.api(), + args=event.args) + sizes = [] + for type_, name in event.args: + if is_string(type_): + out(' size_t arg%(name)s_len = %(name)s ? MIN(strlen(%(name)s), MAX_TRACE_STRLEN) : 0;', + name=name) + strsizeinfo = "4 + arg%s_len" % name + sizes.append(strsizeinfo) + else: + sizes.append("8") + sizestr = " + ".join(sizes) + if len(event.args) == 0: + sizestr = '0' + + + out('', + ' if (!trace_event_get_state(%(event_id)s)) {', + ' return;', + ' }', '', - ) - - for num, event in enumerate(events): - out('void %(api)s(%(args)s)', - '{', - ' TraceBufferRecord rec;', - api = event.api(), - args = event.args, - ) - sizes = [] + ' if (trace_record_start(&rec, %(event_id)s, %(size_str)s)) {', + ' return; /* Trace Buffer Full, Event Dropped ! */', + ' }', + event_id='TRACE_' + event.name.upper(), + size_str=sizestr) + + if len(event.args) > 0: for type_, name in event.args: + # string if is_string(type_): - out(' size_t arg%(name)s_len = %(name)s ? MIN(strlen(%(name)s), MAX_TRACE_STRLEN) : 0;', - name = name, - ) - strsizeinfo = "4 + arg%s_len" % name - sizes.append(strsizeinfo) + out(' trace_record_write_str(&rec, %(name)s, arg%(name)s_len);', + name=name) + # pointer var (not string) + elif type_.endswith('*'): + out(' trace_record_write_u64(&rec, (uintptr_t)(uint64_t *)%(name)s);', + name=name) + # primitive data type else: - sizes.append("8") - sizestr = " + ".join(sizes) - if len(event.args) == 0: - sizestr = '0' - - - out('', - ' TraceEvent *eventp = trace_event_id(%(event_enum)s);', - ' bool _state = trace_event_get_state_dynamic(eventp);', - ' if (!_state) {', - ' return;', - ' }', - '', - ' if (trace_record_start(&rec, %(event_id)s, %(size_str)s)) {', - ' return; /* Trace Buffer Full, Event Dropped ! */', - ' }', - event_enum = 'TRACE_' + event.name.upper(), - event_id = num, - size_str = sizestr, - ) - - if len(event.args) > 0: - for type_, name in event.args: - # string - if is_string(type_): - out(' trace_record_write_str(&rec, %(name)s, arg%(name)s_len);', - name = name, - ) - # pointer var (not string) - elif type_.endswith('*'): - out(' trace_record_write_u64(&rec, (uintptr_t)(uint64_t *)%(name)s);', - name = name, - ) - # primitive data type - else: - out(' trace_record_write_u64(&rec, (uint64_t)%(name)s);', - name = name, - ) - - out(' trace_record_finish(&rec);', - '}', - '') - - -def h(events): - for event in events: - out('void %(api)s(%(args)s);', - api = event.api(), - args = event.args, - ) + out(' trace_record_write_u64(&rec, (uint64_t)%(name)s);', + name=name) + + out(' trace_record_finish(&rec);', + '}', + '') |