Index: src/heap/heap.h |
diff --git a/src/heap/heap.h b/src/heap/heap.h |
index 44a080b1e0914ddbd9c40772bcd7d2cc03c3b393..aaa9b7c5228ee84bcad679379e1c141944451d95 100644 |
--- a/src/heap/heap.h |
+++ b/src/heap/heap.h |
@@ -412,6 +412,8 @@ enum ArrayStorageAllocationMode { |
enum class ClearRecordedSlots { kYes, kNo }; |
+enum class MemoryPressureLevel { kNone, kModerate, kCritical }; |
jochen (gone - plz use gerrit)
2016/03/17 19:33:39
why not just use the external class?
ulan
2016/03/18 12:49:41
Done.
|
+ |
class Heap { |
public: |
// Declare all the root indices. This defines the root list order. |
@@ -736,6 +738,9 @@ class Heap { |
bool IdleNotification(double deadline_in_seconds); |
bool IdleNotification(int idle_time_in_ms); |
+ void MemoryPressureNotification(MemoryPressureLevel level, |
+ bool is_isolate_locked); |
+ |
double MonotonicallyIncreasingTimeInMs(); |
void RecordStats(HeapStats* stats, bool take_snapshot = false); |
@@ -833,7 +838,10 @@ class Heap { |
void SetOptimizeForLatency() { optimize_for_memory_usage_ = false; } |
void SetOptimizeForMemoryUsage(); |
- bool ShouldOptimizeForMemoryUsage() { return optimize_for_memory_usage_; } |
+ bool ShouldOptimizeForMemoryUsage() { |
+ return optimize_for_memory_usage_ || |
+ memory_pressure_level_.Value() != MemoryPressureLevel::kNone; |
+ } |
// =========================================================================== |
// Initialization. =========================================================== |
@@ -1996,6 +2004,8 @@ class Heap { |
// count, as scopes can be acquired from multiple tasks (read: threads). |
AtomicNumber<size_t> always_allocate_scope_count_; |
+ AtomicValue<MemoryPressureLevel> memory_pressure_level_; |
+ |
// For keeping track of context disposals. |
int contexts_disposed_; |