From 6fd6b3f8f7bb12d508b804f9d6ccee1f648dce57 Mon Sep 17 00:00:00 2001 From: Bill McCloskey Date: Fri, 16 Nov 2012 11:08:32 -0800 Subject: [PATCH] Bug 812393 - Sweep strings and scripts incrementally (r=jonco) --HG-- extra : rebase_source : 301b3029444d378bcb90e7140b508f6f35187425 --- js/src/jsgc.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/js/src/jsgc.cpp b/js/src/jsgc.cpp index 2363659e3d4..18fa641cd78 100644 --- a/js/src/jsgc.cpp +++ b/js/src/jsgc.cpp @@ -213,6 +213,14 @@ const uint32_t Arena::FirstThingOffsets[] = { * Finalization order for incrementally swept things. */ +static const AllocKind FinalizePhaseStrings[] = { + FINALIZE_EXTERNAL_STRING +}; + +static const AllocKind FinalizePhaseScripts[] = { + FINALIZE_SCRIPT +}; + static const AllocKind FinalizePhaseShapes[] = { FINALIZE_SHAPE, FINALIZE_BASE_SHAPE, @@ -220,15 +228,21 @@ static const AllocKind FinalizePhaseShapes[] = { }; static const AllocKind* FinalizePhases[] = { + FinalizePhaseStrings, + FinalizePhaseScripts, FinalizePhaseShapes }; static const int FinalizePhaseCount = sizeof(FinalizePhases) / sizeof(AllocKind*); static const int FinalizePhaseLength[] = { + sizeof(FinalizePhaseStrings) / sizeof(AllocKind), + sizeof(FinalizePhaseScripts) / sizeof(AllocKind), sizeof(FinalizePhaseShapes) / sizeof(AllocKind) }; static const gcstats::Phase FinalizePhaseStatsPhase[] = { + gcstats::PHASE_SWEEP_STRING, + gcstats::PHASE_SWEEP_SCRIPT, gcstats::PHASE_SWEEP_SHAPE }; @@ -1703,14 +1717,14 @@ ArenaLists::queueStringsForSweep(FreeOp *fop) queueForBackgroundSweep(fop, FINALIZE_SHORT_STRING); queueForBackgroundSweep(fop, FINALIZE_STRING); - finalizeNow(fop, FINALIZE_EXTERNAL_STRING); + queueForForegroundSweep(fop, FINALIZE_EXTERNAL_STRING); } void ArenaLists::queueScriptsForSweep(FreeOp *fop) { gcstats::AutoPhase ap(fop->runtime()->gcStats, gcstats::PHASE_SWEEP_SCRIPT); - finalizeNow(fop, FINALIZE_SCRIPT); + queueForForegroundSweep(fop, FINALIZE_SCRIPT); } void