Skip to content

Commit 7f53149

Browse files
[MemoryPressureHandler] Unify critical/synchronous memory pressure events
Add new 'StrictSynchronous' MemoryUsagePolicy that triggers critical and synchronous memory release when memory limit is exceeded. This unifies memory thresholds calculation in single place.
1 parent bf2bd03 commit 7f53149

2 files changed

Lines changed: 13 additions & 7 deletions

File tree

Source/WTF/wtf/MemoryPressureHandler.cpp

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

235238
MemoryUsagePolicy 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))

Source/WTF/wtf/MemoryPressureHandler.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ enum class MemoryUsagePolicy : uint8_t {
5959
Unrestricted, // Allocate as much as you want
6060
Conservative, // Maybe you don't cache every single thing
6161
Strict, // Time to start pinching pennies for real
62+
StrictSynchronous, // Time to start pinching pennies for real, and do it now
6263
};
6364

6465
enum class MemoryType : uint8_t {

0 commit comments

Comments
 (0)