aboutsummaryrefslogtreecommitdiffstats
path: root/mps/code/trace.c
diff options
context:
space:
mode:
authorDavid Jones2007-07-20 11:09:49 +0100
committerDavid Jones2007-07-20 11:09:49 +0100
commit7739f79926304c17eb6e06a35063ea2a8a06acff (patch)
tree458a418b1e84d0173f39378e5568962dd9771f8b /mps/code/trace.c
parentd97d0920afae7f612240e5a528a0f61c82bd8d08 (diff)
downloademacs-7739f79926304c17eb6e06a35063ea2a8a06acff.tar.gz
emacs-7739f79926304c17eb6e06a35063ea2a8a06acff.zip
Mps: why code in diagnostic, "correct" newsize diagnostics.
Copied from Perforce Change: 162956 ServerID: perforce.ravenbrook.com
Diffstat (limited to 'mps/code/trace.c')
-rw-r--r--mps/code/trace.c42
1 files changed, 37 insertions, 5 deletions
diff --git a/mps/code/trace.c b/mps/code/trace.c
index 9e1dd3a56c2..aaa730b325f 100644
--- a/mps/code/trace.c
+++ b/mps/code/trace.c
@@ -836,6 +836,33 @@ static void traceFlip(Trace trace)
836 return; 836 return;
837} 837}
838 838
839/* traceCopySizes -- preserve size information for later use
840 *
841 * A PoolGen's newSize is important information that we want to emit in
842 * a diagnostic message at TraceStart. In order to do that we must copy
843 * the information before Whiten changes it. This function does that.
844 */
845
846static void traceCopySizes(Trace trace)
847{
848 Ring node, nextNode;
849 int i;
850 Arena arena = trace->arena;
851
852 RING_FOR(node, &arena->chainRing, nextNode) {
853 Chain chain = RING_ELT(Chain, chainRing, node);
854
855 for(i = 0; i < chain->genCount; ++i) {
856 Ring n, nn;
857 GenDesc desc = &chain->gens[i];
858 RING_FOR(n, &desc->locusRing, nn) {
859 PoolGen gen = RING_ELT(PoolGen, genRing, n);
860 gen->newSizeAtCreate = gen->newSize;
861 }
862 }
863 }
864 return;
865}
839 866
840/* TraceCreate -- create a Trace object 867/* TraceCreate -- create a Trace object
841 * 868 *
@@ -871,6 +898,10 @@ found:
871 AVER(trace->sig == SigInvalid); /* <design/arena/#trace.invalid> */ 898 AVER(trace->sig == SigInvalid); /* <design/arena/#trace.invalid> */
872 899
873 trace->arena = arena; 900 trace->arena = arena;
901 trace->why = why;
902 TraceStartMessageInit(arena, &trace->startMessage);
903 traceStartWhyToString(trace->startMessage.why,
904 sizeof trace->startMessage.why, why);
874 trace->white = ZoneSetEMPTY; 905 trace->white = ZoneSetEMPTY;
875 trace->mayMove = ZoneSetEMPTY; 906 trace->mayMove = ZoneSetEMPTY;
876 trace->ti = ti; 907 trace->ti = ti;
@@ -906,9 +937,6 @@ found:
906 trace->preservedInPlaceSize = (Size)0; /* see .message.data */ 937 trace->preservedInPlaceSize = (Size)0; /* see .message.data */
907 STATISTIC(trace->reclaimCount = (Count)0); 938 STATISTIC(trace->reclaimCount = (Count)0);
908 STATISTIC(trace->reclaimSize = (Size)0); 939 STATISTIC(trace->reclaimSize = (Size)0);
909 TraceStartMessageInit(arena, &trace->startMessage);
910 traceStartWhyToString(trace->startMessage.why,
911 sizeof trace->startMessage.why, why);
912 trace->sig = TraceSig; 940 trace->sig = TraceSig;
913 arena->busyTraces = TraceSetAdd(arena->busyTraces, trace); 941 arena->busyTraces = TraceSetAdd(arena->busyTraces, trace);
914 AVERT(Trace, trace); 942 AVERT(Trace, trace);
@@ -919,6 +947,8 @@ found:
919 /* @@@@ This is a short-term fix for request.dylan.160098. */ 947 /* @@@@ This is a short-term fix for request.dylan.160098. */
920 ShieldSuspend(arena); 948 ShieldSuspend(arena);
921 949
950 traceCopySizes(trace);
951
922 *traceReturn = trace; 952 *traceReturn = trace;
923 return ResOK; 953 return ResOK;
924} 954}
@@ -1825,7 +1855,8 @@ void TraceStart(Trace trace, double mortality, double finishingTime)
1825 } 1855 }
1826 1856
1827 DIAG_WRITEF(( DIAG_STREAM, 1857 DIAG_WRITEF(( DIAG_STREAM,
1828 "MPS: TraceStart\n", 1858 "MPS: TraceStart, because code $U: $S\n",
1859 trace->why, trace->startMessage.why,
1829 NULL )); 1860 NULL ));
1830 { /* @@ */ 1861 { /* @@ */
1831 /* Iterate over all chains, all GenDescs within a chain, and all */ 1862 /* Iterate over all chains, all GenDescs within a chain, and all */
@@ -1850,7 +1881,8 @@ void TraceStart(Trace trace, double mortality, double finishingTime)
1850 PoolGen gen = RING_ELT(PoolGen, genRing, n); 1881 PoolGen gen = RING_ELT(PoolGen, genRing, n);
1851 DIAG_WRITEF(( DIAG_STREAM, 1882 DIAG_WRITEF(( DIAG_STREAM,
1852 "MPS: PoolGen $U", gen->nr, 1883 "MPS: PoolGen $U", gen->nr,
1853 " totalSize $U newSize $U\n", gen->totalSize, gen->newSize, 1884 " totalSize $U", gen->totalSize,
1885 " newSize $U\n", gen->newSizeAtCreate,
1854 NULL )); 1886 NULL ));
1855 } 1887 }
1856 } 1888 }