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 <tanishdesai37@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