@@ -165,6 +165,7 @@ static const char* toString(MemoryUsagePolicy policy)
165165 case MemoryUsagePolicy::Unrestricted: return " Unrestricted" ;
166166 case MemoryUsagePolicy::Conservative: return " Conservative" ;
167167 case MemoryUsagePolicy::Strict: return " Strict" ;
168+ case MemoryUsagePolicy::StrictSynchronous: return " StrictSynchronous" ;
168169 }
169170 ASSERT_NOT_REACHED ();
170171 return " " ;
@@ -226,6 +227,8 @@ size_t MemoryPressureHandler::thresholdForPolicy(MemoryUsagePolicy policy, Memor
226227 return m_configuration.conservativeThresholdFraction * (type == MemoryType::Normal ? m_configuration.baseThreshold : m_configuration.baseThresholdVideo );
227228 case MemoryUsagePolicy::Strict:
228229 return m_configuration.strictThresholdFraction * (type == MemoryType::Normal ? m_configuration.baseThreshold : m_configuration.baseThresholdVideo );
230+ case MemoryUsagePolicy::StrictSynchronous:
231+ return type == MemoryType::Normal ? m_configuration.baseThreshold : m_configuration.baseThresholdVideo ;
229232 default :
230233 ASSERT_NOT_REACHED ();
231234 return 0 ;
@@ -234,6 +237,8 @@ size_t MemoryPressureHandler::thresholdForPolicy(MemoryUsagePolicy policy, Memor
234237
235238MemoryUsagePolicy MemoryPressureHandler::policyForFootprints (size_t footprint, size_t footprintVideo)
236239{
240+ if (footprint >= thresholdForPolicy (MemoryUsagePolicy::StrictSynchronous, MemoryType::Normal) || footprintVideo >= thresholdForPolicy (MemoryUsagePolicy::StrictSynchronous, MemoryType::Video))
241+ return MemoryUsagePolicy::StrictSynchronous;
237242 if (footprint >= thresholdForPolicy (MemoryUsagePolicy::Strict, MemoryType::Normal) || footprintVideo >= thresholdForPolicy (MemoryUsagePolicy::Strict, MemoryType::Video))
238243 return MemoryUsagePolicy::Strict;
239244 if (footprint >= thresholdForPolicy (MemoryUsagePolicy::Conservative, MemoryType::Normal) || footprintVideo >= thresholdForPolicy (MemoryUsagePolicy::Conservative, MemoryType::Video))
@@ -303,15 +308,15 @@ void MemoryPressureHandler::measurementTimerFired()
303308 releaseMemory (Critical::No, Synchronous::No);
304309 break ;
305310 case MemoryUsagePolicy::Strict:
306- if (footprint > m_configuration.baseThreshold || footprintVideo > m_configuration.baseThresholdVideo ) {
307- WTFLogAlways (" MemoryPressure: Critical memory usage (PID=%d) [MB]: %zu (of %zu), video: %zu (of %zu)\n " ,
308- getpid (), footprint / MB, m_configuration.baseThreshold / MB,
309- footprintVideo / MB, m_configuration.baseThresholdVideo / MB);
310- releaseMemory (Critical::Yes, Synchronous::Yes);
311- break ;
312- }
313311 releaseMemory (Critical::Yes, Synchronous::No);
314312 break ;
313+ case MemoryUsagePolicy::StrictSynchronous:
314+ WTFLogAlways (" MemoryPressure: Critical memory usage (PID=%d) [MB]: %zu/%zu, video: %zu/%zu\n " ,
315+ getpid (),
316+ footprint / MB, m_configuration.baseThreshold / MB,
317+ footprintVideo / MB, m_configuration.baseThresholdVideo / MB);
318+ releaseMemory (Critical::Yes, Synchronous::Yes);
319+ break ;
315320 }
316321
317322 if (processState () == WebsamProcessState::Active && footprint > thresholdForMemoryKillOfInactiveProcess (m_pageCount))
0 commit comments