Moved frequently used hot paths from the .c file to the .h file to enable inlining and improve performance. This approach is inspired by past QEMU optimizations, where performance-critical code was inlined based on profiling results.
Signed-off-by: Tanish Desai <tanishdesa...@gmail.com> --- scripts/tracetool/backend/log.py | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/scripts/tracetool/backend/log.py b/scripts/tracetool/backend/log.py index de27b7e62e..ca53747950 100644 --- a/scripts/tracetool/backend/log.py +++ b/scripts/tracetool/backend/log.py @@ -24,6 +24,10 @@ def generate_h_begin(events, group): out('#include "qemu/log-for-trace.h"', '#include "qemu/error-report.h"', '') + for event in events: + out('void _log_%(api)s(%(args)s);', + api=event.api(), + args=event.args) def generate_h(event, group): @@ -38,6 +42,22 @@ def generate_h(event, group): cond = "trace_event_get_state(%s)" % ("TRACE_" + event.name.upper()) out(' if (%(cond)s && qemu_loglevel_mask(LOG_TRACE)) {', + ' _log_%(api)s(%(args)s);', + ' }', + cond=cond, + event_lineno=event.lineno, + event_filename=os.path.relpath(event.filename), + name=event.name, + fmt=event.fmt.rstrip("\n"), + argnames=argnames, + args = ", ".join(event.args.names()), + api=event.api()) + +def generate_c(event, group): + argnames = ", ".join(event.args.names()) + if len(event.args) > 0: + argnames = ", " + argnames + out('void _log_%(api)s(%(args)s){', ' if (message_with_timestamp) {', ' struct timeval _now;', ' gettimeofday(&_now, NULL);', @@ -53,12 +73,14 @@ def generate_h(event, group): '#line %(out_next_lineno)d "%(out_filename)s"', ' }', ' }', - cond=cond, event_lineno=event.lineno, event_filename=os.path.relpath(event.filename), name=event.name, fmt=event.fmt.rstrip("\n"), - argnames=argnames) + argnames=argnames, + args=event.args, + api=event.api() + ) def generate_h_backend_dstate(event, group): -- 2.34.1