summaryrefslogtreecommitdiff
path: root/rts/Trace.c
diff options
context:
space:
mode:
authorSven Tennie <sven.tennie@gmail.com>2021-05-13 15:26:32 +0200
committerMarge Bot <ben+marge-bot@smart-cactus.org>2021-08-11 18:14:30 -0400
commitf5fdace5613914724eb00bcf7547c82f3ad12686 (patch)
treeeeaeb36a5b79192c19eed847a2663e13fbf8b1f8 /rts/Trace.c
parentc65a7ffa7d8962f769bfe1dfbad20e32e1709c20 (diff)
downloadhaskell-f5fdace5613914724eb00bcf7547c82f3ad12686.tar.gz
Optimize Info Table Provenance Entries (IPEs) Map creation and lookup
Using a hash map reduces the complexity of lookupIPE(), making it non linear. On registration each IPE list is added to a temporary IPE lists buffer, reducing registration time. The hash map is built lazily on first lookup. IPE event output to stderr is added with tests. For details, please see Note [The Info Table Provenance Entry (IPE) Map]. A performance test for IPE registration and lookup can be found here: https://gitlab.haskell.org/ghc/ghc/-/merge_requests/5724#note_370806
Diffstat (limited to 'rts/Trace.c')
-rw-r--r--rts/Trace.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/rts/Trace.c b/rts/Trace.c
index d08b19a69d..8f2877a536 100644
--- a/rts/Trace.c
+++ b/rts/Trace.c
@@ -668,6 +668,17 @@ void traceIPE(StgInfoTable * info,
const char *module,
const char *srcloc )
{
+#if defined(DEBUG)
+ if (RtsFlags.TraceFlags.tracing == TRACE_STDERR) {
+ ACQUIRE_LOCK(&trace_utx);
+
+ tracePreface();
+ debugBelch("IPE: table_name %s, closure_desc %s, ty_desc %s, label %s, module %s, srcloc %s\n",
+ table_name, closure_desc, ty_desc, label, module, srcloc);
+
+ RELEASE_LOCK(&trace_utx);
+ } else
+#endif
if (eventlog_enabled) {
postIPE((W_) INFO_PTR_TO_STRUCT(info), table_name, closure_desc, ty_desc, label, module, srcloc);
}