1 /* Copyright (C) 2012,2017 Matthew Fluet.
2 * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh
3 * Jagannathan, and Stephen Weeks.
4 * Copyright (C) 1997-2000 NEC Research Institute.
6 * MLton is released under a BSD-style license.
7 * See the file MLton-LICENSE for details.
10 static void displayCol (FILE *out
, size_t width
, const char *s
) {
18 for (i
= 0; i
< extra
; i
++)
21 fprintf (out
, "%s\t", s
);
24 static void displayCollectionStats (FILE *out
, const char *name
, struct rusage
*ru
,
25 uintmax_t num
, uintmax_t bytes
) {
29 fprintf (out
, "%s", name
);
30 displayCol (out
, 7, uintmaxToCommaString (ms
));
31 displayCol (out
, 7, uintmaxToCommaString (num
));
32 displayCol (out
, 15, uintmaxToCommaString (bytes
));
35 ? uintmaxToCommaString ((uintmax_t)(1000.0 * (float)bytes
/(float)ms
))
40 void GC_done (GC_state s
) {
45 out
= s
->controls
.summaryFile
;
46 if (s
->controls
.summary
) {
47 struct rusage ru_total
;
51 getrusage (RUSAGE_SELF
, &ru_total
);
52 totalTime
= rusageTime (&ru_total
);
53 gcTime
= rusageTime (&s
->cumulativeStatistics
.ru_gc
);
54 fprintf (out
, "GC type\t\ttime ms\t number\t\t bytes\t bytes/sec\n");
55 fprintf (out
, "-------------\t-------\t-------\t---------------\t---------------\n");
56 displayCollectionStats
58 &s
->cumulativeStatistics
.ru_gcCopying
,
59 s
->cumulativeStatistics
.numCopyingGCs
,
60 s
->cumulativeStatistics
.bytesCopied
);
61 displayCollectionStats
62 (out
, "mark-compact\t",
63 &s
->cumulativeStatistics
.ru_gcMarkCompact
,
64 s
->cumulativeStatistics
.numMarkCompactGCs
,
65 s
->cumulativeStatistics
.bytesMarkCompacted
);
66 displayCollectionStats
68 &s
->cumulativeStatistics
.ru_gcMinor
,
69 s
->cumulativeStatistics
.numMinorGCs
,
70 s
->cumulativeStatistics
.bytesCopiedMinor
);
71 fprintf (out
, "total time: %s ms\n",
72 uintmaxToCommaString (totalTime
));
73 fprintf (out
, "total GC time: %s ms (%.1f%%)\n",
74 uintmaxToCommaString (gcTime
),
77 : 100.0 * ((double) gcTime
) / (double)totalTime
);
78 fprintf (out
, "max pause time: %s ms\n",
79 uintmaxToCommaString (s
->cumulativeStatistics
.maxPauseTime
));
80 fprintf (out
, "total bytes allocated: %s bytes\n",
81 uintmaxToCommaString (s
->cumulativeStatistics
.bytesAllocated
));
82 fprintf (out
, "max bytes live: %s bytes\n",
83 uintmaxToCommaString (s
->cumulativeStatistics
.maxBytesLive
));
84 fprintf (out
, "max heap size: %s bytes\n",
85 uintmaxToCommaString (s
->cumulativeStatistics
.maxHeapSize
));
86 fprintf (out
, "max stack size: %s bytes\n",
87 uintmaxToCommaString (s
->cumulativeStatistics
.maxStackSize
));
88 fprintf (out
, "num cards marked: %s\n",
89 uintmaxToCommaString (s
->cumulativeStatistics
.numCardsMarked
));
90 fprintf (out
, "bytes scanned: %s bytes\n",
91 uintmaxToCommaString (s
->cumulativeStatistics
.bytesScannedMinor
));
92 fprintf (out
, "bytes hash consed: %s bytes\n",
93 uintmaxToCommaString (s
->cumulativeStatistics
.bytesHashConsed
));
95 releaseHeap (s
, &s
->heap
);
96 releaseHeap (s
, &s
->secondaryHeap
);