Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(376)

Unified Diff: src/heap/heap.h

Issue 1813963002: Add memory pressure notification API (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: GC interrupt on kModerate to start incremental marking Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/api.cc ('k') | src/heap/heap.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/heap/heap.h
diff --git a/src/heap/heap.h b/src/heap/heap.h
index 8af1e3844aba9ec14264d7c11e93b100a1602ace..ab58e609aeadb07f72855d3fcc868ac301cebaba 100644
--- a/src/heap/heap.h
+++ b/src/heap/heap.h
@@ -10,6 +10,7 @@
// Clients of this interface shouldn't depend on lots of heap internals.
// Do not include anything from src/heap here!
+#include "include/v8.h"
#include "src/allocation.h"
#include "src/assert-scope.h"
#include "src/atomic-utils.h"
@@ -23,6 +24,8 @@
namespace v8 {
namespace internal {
+using v8::MemoryPressureLevel;
+
// Defines all the roots in Heap.
#define STRONG_ROOT_LIST(V) \
V(Map, byte_array_map, ByteArrayMap) \
@@ -740,6 +743,10 @@ class Heap {
bool IdleNotification(double deadline_in_seconds);
bool IdleNotification(int idle_time_in_ms);
+ void MemoryPressureNotification(MemoryPressureLevel level,
+ bool is_isolate_locked);
+ void CheckMemoryPressure();
+
double MonotonicallyIncreasingTimeInMs();
void RecordStats(HeapStats* stats, bool take_snapshot = false);
@@ -754,6 +761,8 @@ class Heap {
if (PromotedTotalSize() >= adjusted_allocation_limit) return true;
+ if (HighMemoryPressure()) return true;
+
return false;
}
@@ -837,7 +846,12 @@ 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_ || HighMemoryPressure();
+ }
+ bool HighMemoryPressure() {
+ return memory_pressure_level_.Value() != MemoryPressureLevel::kNone;
+ }
// ===========================================================================
// Initialization. ===========================================================
@@ -1634,6 +1648,8 @@ class Heap {
void CompactRetainedMaps(ArrayList* retained_maps);
+ void CollectGarbageOnMemoryPressure(const char* source);
+
// Attempt to over-approximate the weak closure by marking object groups and
// implicit references from global handles, but don't atomically complete
// marking. If we continue to mark incrementally, we might have marked
@@ -2000,6 +2016,10 @@ class Heap {
// count, as scopes can be acquired from multiple tasks (read: threads).
AtomicNumber<size_t> always_allocate_scope_count_;
+ // Stores the memory pressure level that set by MemoryPressureNotification
+ // and reset by a mark-compact garbage collection.
+ AtomicValue<MemoryPressureLevel> memory_pressure_level_;
+
// For keeping track of context disposals.
int contexts_disposed_;
« no previous file with comments | « src/api.cc ('k') | src/heap/heap.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698