From 0f28389c783a54a74c472f176c250ddf7a9c4bf4 Mon Sep 17 00:00:00 2001
From: Ben Gamari <ben@smart-cactus.org>
Date: Tue, 24 Nov 2020 19:42:27 -0500
Subject: [PATCH] rts/Stats: Reintroduce mut_user_time

Fix the previous backport; this function was dead code in master but is
still needed due to ProfHeap.c in ghc-8.10.
---
 rts/Stats.c | 21 +++++++++++++++++++++
 rts/Stats.h |  2 ++
 2 files changed, 23 insertions(+)

diff --git a/rts/Stats.c b/rts/Stats.c
index 1a91e706fb84..282e799d23a7 100644
--- a/rts/Stats.c
+++ b/rts/Stats.c
@@ -86,6 +86,27 @@ Time stat_getElapsedTime(void)
    Measure the current MUT time, for profiling
    ------------------------------------------------------------------------ */
 
+static double
+mut_user_time_until( Time t )
+{
+    ACQUIRE_LOCK(&stats_mutex);
+    double ret = TimeToSecondsDbl(t - stats.gc_cpu_ns - stats.nonmoving_gc_cpu_ns);
+    RELEASE_LOCK(&stats_mutex);
+    return ret;
+    // heapCensus() time is included in GC_tot_cpu, so we don't need
+    // to subtract it here.
+
+    // TODO: This seems wrong to me. Surely we should be subtracting
+    // (at least) start_init_cpu?
+}
+
+double
+mut_user_time( void )
+{
+    Time cpu = getProcessCPUTime();
+    return mut_user_time_until(cpu);
+}
+
 #if defined(PROFILING)
 /*
   mut_user_time_during_RP() returns the MUT time during retainer profiling.
diff --git a/rts/Stats.h b/rts/Stats.h
index 9d62acef371d..cd8b74a983be 100644
--- a/rts/Stats.h
+++ b/rts/Stats.h
@@ -66,6 +66,8 @@ void      initStats0(void);
 void      initStats1(void);
 void      resetChildProcessStats(void);
 
+double    mut_user_time(void);
+
 void      statDescribeGens( void );
 
 Time      stat_getElapsedGCTime(void);
-- 
GitLab