mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-25 23:10:47 -08:00
Generation's computed mortality has denominator of condemned memory (not new memory), so use the same denominator when predicting the mortality for a trace.
Simpler to compute predicted mortality as casualties/condemned instead of 1 - survivors/condemned. Copied from Perforce Change: 194645
This commit is contained in:
parent
3a901f73b8
commit
a8bcb796a7
1 changed files with 9 additions and 11 deletions
|
|
@ -213,7 +213,7 @@ static Res policyCondemnChain(double *mortalityReturn, Chain chain, Trace trace)
|
|||
Res res;
|
||||
size_t topCondemnedGen, i;
|
||||
GenDesc gen;
|
||||
Size condemnedSize = 0, survivorSize = 0, genNewSize, genTotalSize;
|
||||
Size casualtySize = 0;
|
||||
|
||||
AVERT(Chain, chain);
|
||||
AVERT(Trace, trace);
|
||||
|
|
@ -230,8 +230,7 @@ static Res policyCondemnChain(double *mortalityReturn, Chain chain, Trace trace)
|
|||
-- topCondemnedGen;
|
||||
gen = &chain->gens[topCondemnedGen];
|
||||
AVERT(GenDesc, gen);
|
||||
genNewSize = GenDescNewSize(gen);
|
||||
if (genNewSize >= gen->capacity * (Size)1024)
|
||||
if (GenDescNewSize(gen) >= gen->capacity * (Size)1024)
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -239,27 +238,26 @@ static Res policyCondemnChain(double *mortalityReturn, Chain chain, Trace trace)
|
|||
* lower generations. */
|
||||
TraceCondemnStart(trace);
|
||||
for (i = 0; i <= topCondemnedGen; ++i) {
|
||||
Size condemnedBefore, condemnedGen;
|
||||
Ring node, next;
|
||||
gen = &chain->gens[i];
|
||||
AVERT(GenDesc, gen);
|
||||
genTotalSize = GenDescTotalSize(gen);
|
||||
genNewSize = GenDescNewSize(gen);
|
||||
condemnedSize += genTotalSize;
|
||||
survivorSize += (Size)(genNewSize * (1.0 - gen->mortality))
|
||||
/* predict survivors will survive again */
|
||||
+ (genTotalSize - genNewSize);
|
||||
condemnedBefore = trace->condemned;
|
||||
RING_FOR(node, &gen->segRing, next) {
|
||||
GCSeg gcseg = RING_ELT(GCSeg, genRing, node);
|
||||
res = TraceAddWhite(trace, &gcseg->segStruct);
|
||||
if (res != ResOK)
|
||||
goto failBegin;
|
||||
}
|
||||
AVER(trace->condemned >= condemnedBefore);
|
||||
condemnedGen = trace->condemned - condemnedBefore;
|
||||
casualtySize += (Size)(condemnedGen * gen->mortality);
|
||||
}
|
||||
TraceCondemnEnd(trace);
|
||||
|
||||
EVENT3(ChainCondemnAuto, chain, topCondemnedGen, chain->genCount);
|
||||
|
||||
*mortalityReturn = 1.0 - (double)survivorSize / condemnedSize;
|
||||
|
||||
*mortalityReturn = (double)casualtySize / trace->condemned;
|
||||
return ResOK;
|
||||
|
||||
failBegin:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue