@@ -174,6 +174,7 @@ static ASCIILiteral toString(MemoryUsagePolicy policy)
174174 case MemoryUsagePolicy::Unrestricted: return " Unrestricted" _s;
175175 case MemoryUsagePolicy::Conservative: return " Conservative" _s;
176176 case MemoryUsagePolicy::Strict: return " Strict" _s;
177+ case MemoryUsagePolicy::StrictSynchronous: return " StrictSynchronous" _s;
177178 }
178179 ASSERT_NOT_REACHED ();
179180 return " " _s;
@@ -235,6 +236,8 @@ size_t MemoryPressureHandler::thresholdForPolicy(MemoryUsagePolicy policy, Memor
235236 return m_configuration.conservativeThresholdFraction * (type == MemoryType::Normal ? m_configuration.baseThreshold : m_configuration.baseThresholdVideo );
236237 case MemoryUsagePolicy::Strict:
237238 return m_configuration.strictThresholdFraction * (type == MemoryType::Normal ? m_configuration.baseThreshold : m_configuration.baseThresholdVideo );
239+ case MemoryUsagePolicy::StrictSynchronous:
240+ return type == MemoryType::Normal ? m_configuration.baseThreshold : m_configuration.baseThresholdVideo ;
238241 default :
239242 ASSERT_NOT_REACHED ();
240243 return 0 ;
@@ -243,6 +246,8 @@ size_t MemoryPressureHandler::thresholdForPolicy(MemoryUsagePolicy policy, Memor
243246
244247MemoryUsagePolicy MemoryPressureHandler::policyForFootprints (size_t footprint, size_t footprintVideo)
245248{
249+ if (footprint >= thresholdForPolicy (MemoryUsagePolicy::StrictSynchronous, MemoryType::Normal) || footprintVideo >= thresholdForPolicy (MemoryUsagePolicy::StrictSynchronous, MemoryType::Video))
250+ return MemoryUsagePolicy::StrictSynchronous;
246251 if (footprint >= thresholdForPolicy (MemoryUsagePolicy::Strict, MemoryType::Normal) || footprintVideo >= thresholdForPolicy (MemoryUsagePolicy::Strict, MemoryType::Video))
247252 return MemoryUsagePolicy::Strict;
248253 if (footprint >= thresholdForPolicy (MemoryUsagePolicy::Conservative, MemoryType::Normal) || footprintVideo >= thresholdForPolicy (MemoryUsagePolicy::Conservative, MemoryType::Video))
@@ -335,6 +340,13 @@ void MemoryPressureHandler::measurementTimerFired()
335340 case MemoryUsagePolicy::Strict:
336341 releaseMemory (Critical::Yes, Synchronous::No);
337342 break ;
343+ case MemoryUsagePolicy::StrictSynchronous:
344+ WTFLogAlways (" MemoryPressure: Critical memory usage (PID=%d) [MB]: %zu/%zu, video: %zu/%zu\n " ,
345+ getpid (),
346+ footprint / MB, m_configuration.baseThreshold / MB,
347+ footprintVideo / MB, m_configuration.baseThresholdVideo / MB);
348+ releaseMemory (Critical::Yes, Synchronous::Yes);
349+ break ;
338350 }
339351}
340352
0 commit comments