Skip to content

Commit 3f6be5f

Browse files
modevecimagomez
authored andcommitted
MemoryPressure: add StrictSynchronous policy to do critical and synchonous memory release when limit is exceeded.
Signed-off-by: Andrzej Surdej <Andrzej_Surdej@comcast.com>
1 parent f36e9ab commit 3f6be5f

2 files changed

Lines changed: 13 additions & 0 deletions

File tree

Source/WTF/wtf/MemoryPressureHandler.cpp

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

244247
MemoryUsagePolicy 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

Source/WTF/wtf/MemoryPressureHandler.h

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

6364
enum class MemoryType : uint8_t {

0 commit comments

Comments
 (0)