summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Gröber <dxld@darkboxed.org>2019-06-24 21:32:56 +0200
committerDaniel Gröber <dxld@darkboxed.org>2019-09-22 15:18:10 +0200
commit44d5cc0dc456a138bb7976c17d07e5d41873051a (patch)
treecaf98548cf3337fd1d01e33af3b166b1e52c5f39
parent2b76cf9e163a4fb9400b4ee5c2f8d1b27e94632c (diff)
downloadhaskell-44d5cc0dc456a138bb7976c17d07e5d41873051a.tar.gz
rts: retainer: Abstract maxStackSize for generic traversal
-rw-r--r--rts/RetainerProfile.c13
-rw-r--r--rts/TraverseHeap.h1
2 files changed, 11 insertions, 3 deletions
diff --git a/rts/RetainerProfile.c b/rts/RetainerProfile.c
index 9e9f2462ed..3fa025d19c 100644
--- a/rts/RetainerProfile.c
+++ b/rts/RetainerProfile.c
@@ -244,6 +244,9 @@ initializeTraverseStack( traverseState *ts )
ts->firstStack->link = NULL;
ts->firstStack->u.back = NULL;
+ ts->stackSize = 0;
+ ts->maxStackSize = 0;
+
newStackBlock(ts, ts->firstStack);
}
@@ -260,6 +263,12 @@ closeTraverseStack( traverseState *ts )
ts->firstStack = NULL;
}
+int
+getTraverseStackMaxSize(traverseState *ts)
+{
+ return ts->maxStackSize;
+}
+
/* -----------------------------------------------------------------------------
* Returns true if the whole stack is empty.
* -------------------------------------------------------------------------- */
@@ -1798,8 +1807,6 @@ retainerProfile(void)
// Now we flips flip.
flip = flip ^ 1;
- g_retainerTraverseState.stackSize = 0;
- g_retainerTraverseState.maxStackSize = 0;
numObjectVisited = 0;
timesAnyObjectVisited = 0;
@@ -1819,7 +1826,7 @@ retainerProfile(void)
stat_endRP(
retainerGeneration - 1, // retainerGeneration has just been incremented!
- g_retainerTraverseState.maxStackSize,
+ getTraverseStackMaxSize(&g_retainerTraverseState),
(double)timesAnyObjectVisited / numObjectVisited);
}
diff --git a/rts/TraverseHeap.h b/rts/TraverseHeap.h
index 5a19697694..3b90065b20 100644
--- a/rts/TraverseHeap.h
+++ b/rts/TraverseHeap.h
@@ -112,6 +112,7 @@ void traverseMaybeInitClosureData(StgClosure *c);
void initializeTraverseStack(traverseState *ts);
void closeTraverseStack(traverseState *ts);
+int getTraverseStackMaxSize(traverseState *ts);
W_ traverseWorkStackBlocks(traverseState *ts);