From ed1899df7b438a79dbc8568611d3885f348acfea Mon Sep 17 00:00:00 2001 From: win7-7 Date: Thu, 16 May 2024 05:58:23 +0300 Subject: [PATCH] Fix idle runnable DOM issues 1367905 fixes. Fix idle runnable DOM issues 1367905 fixes. Sadly this still does not compile. It just get further. nsThreadUtils.cpp is still not fully fixed and nsCOMPtr.h has some conversion errors. --- dom/base/nsJSEnvironment.cpp | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/dom/base/nsJSEnvironment.cpp b/dom/base/nsJSEnvironment.cpp index ea352718fb..a8ce610cc2 100644 --- a/dom/base/nsJSEnvironment.cpp +++ b/dom/base/nsJSEnvironment.cpp @@ -190,7 +190,7 @@ static bool sNeedsFullCC = false; static bool sNeedsFullGC = false; static bool sNeedsGCAfterCC = false; static bool sIncrementalCC = false; - +static int32_t sActiveIntersliceGCBudget = 5; // ms; static nsScriptNameSpaceManager *gNameSpaceManager; static PRTime sFirstCollectionTime; @@ -1320,7 +1320,8 @@ FinishAnyIncrementalGC() } static void -FireForgetSkippable(uint32_t aSuspected, bool aRemoveChildless) +FireForgetSkippable(uint32_t aSuspected, bool aRemoveChildless, + TimeStamp aDeadline) { PRTime startTime = PR_Now(); FinishAnyIncrementalGC(); @@ -1500,12 +1501,12 @@ CycleCollectorStats::RunForgetSkippable() TimeStamp beginForgetSkippable = TimeStamp::Now(); bool ranSyncForgetSkippable = false; while (sCleanupsSinceLastGC < NS_MAJOR_FORGET_SKIPPABLE_CALLS) { - FireForgetSkippable(nsCycleCollector_suspectedCount(), false); + FireForgetSkippable(nsCycleCollector_suspectedCount(), false, TimeStamp()); ranSyncForgetSkippable = true; } for (int32_t i = 0; i < mExtraForgetSkippableCalls; ++i) { - FireForgetSkippable(nsCycleCollector_suspectedCount(), false); + FireForgetSkippable(nsCycleCollector_suspectedCount(), false, TimeStamp()); ranSyncForgetSkippable = true; } @@ -1840,7 +1841,7 @@ InterSliceGCRunnerFired(TimeStamp aDeadline, void* aData) JS::gcreason::INTER_SLICE_GC, nsJSContext::IncrementalGC, nsJSContext::NonShrinkingGC, - NS_INTERSLICE_GC_BUDGET); + budget); return true; } @@ -1918,7 +1919,7 @@ CCRunnerFired(TimeStamp aDeadline, void* aData) uint32_t suspected = nsCycleCollector_suspectedCount(); if (isLateTimerFire && ShouldTriggerCC(suspected)) { if (sCCRunnerFireCount == numEarlyTimerFires + 1) { - FireForgetSkippable(suspected, true); + FireForgetSkippable(suspected, true, aDeadline); didDoWork = true; if (ShouldTriggerCC(nsCycleCollector_suspectedCount())) { // Our efforts to avoid a CC have failed, so we return to let the @@ -1941,7 +1942,7 @@ CCRunnerFired(TimeStamp aDeadline, void* aData) (sCleanupsSinceLastGC < NS_MAJOR_FORGET_SKIPPABLE_CALLS)) { // Only do a forget skippable if there are more than a few new objects // or we're doing the initial forget skippables. - FireForgetSkippable(suspected, false); + FireForgetSkippable(suspected, false, aDeadline); didDoWork = true; } @@ -2189,24 +2190,24 @@ nsJSContext::KillShrinkingGCTimer() //static void -nsJSContext::KillICCRunner() +nsJSContext::KillCCRunner() { sCCLockedOutTime = 0; - if (sICCRunner) { - sICCRunner->Cancel(); - sICCRunner = nullptr; + if (sCCRunner) { + sCCRunner->Cancel(); + sCCRunner = nullptr; } } //static void -nsJSContext::KillICCTimer() +nsJSContext::KillICCRunner() { sCCLockedOutTime = 0; - if (sICCTimer) { - sICCTimer->Cancel(); - NS_RELEASE(sICCTimer); + if (sICCRunner) { + sICCRunner->Cancel(); + sICCRunner = nullptr; } }