Index: src/heap/heap.h |
diff --git a/src/heap/heap.h b/src/heap/heap.h |
index 48b0c6fe5bcfeaceee9c5521d132f070b53b15ce..5c825e77804ad06cd30b1f3ae3ae6b4d562bcd86 100644 |
--- a/src/heap/heap.h |
+++ b/src/heap/heap.h |
@@ -821,9 +821,6 @@ class Heap { |
// should not happen during deserialization. |
void NotifyDeserializationComplete(); |
- // Returns whether SetUp has been called. |
- bool HasBeenSetUp(); |
- |
intptr_t old_generation_allocation_limit() const { |
return old_generation_allocation_limit_; |
} |
@@ -890,12 +887,6 @@ class Heap { |
// Converts the given boolean condition to JavaScript boolean value. |
inline Object* ToBoolean(bool condition); |
- // 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 |
- // objects that die later. |
- void OverApproximateWeakClosure(const char* gc_reason); |
- |
// Check whether the heap is currently iterable. |
bool IsHeapIterable(); |
@@ -1013,7 +1004,7 @@ class Heap { |
// Returns deterministic "time" value in ms. Works only with |
// FLAG_verify_predictable. |
- double synthetic_time() { return allocations_count_ / 2.0; } |
+ double synthetic_time() { return allocations_count() / 2.0; } |
// Print short heap statistics. |
void PrintShortHeapStatistics(); |
@@ -1049,21 +1040,6 @@ class Heap { |
void CreateApiObjects(); |
- // Calculates the allocation limit based on a given growing factor and a |
- // given old generation size. |
- intptr_t CalculateOldGenerationAllocationLimit(double factor, |
- intptr_t old_gen_size); |
- |
- // Sets the allocation limit to trigger the next full garbage collection. |
- void SetOldGenerationAllocationLimit(intptr_t old_gen_size, double gc_speed, |
- double mutator_speed); |
- |
- // Decrease the allocation limit if the new limit based on the given |
- // parameters is lower than the current limit. |
- void DampenOldGenerationAllocationLimit(intptr_t old_gen_size, |
- double gc_speed, |
- double mutator_speed); |
- |
// Implements the corresponding V8 API function. |
bool IdleNotification(double deadline_in_seconds); |
bool IdleNotification(int idle_time_in_ms); |
@@ -1096,15 +1072,6 @@ class Heap { |
return false; |
} |
- void UpdateNewSpaceReferencesInExternalStringTable( |
- ExternalStringTableUpdaterCallback updater_func); |
- |
- void UpdateReferencesInExternalStringTable( |
- ExternalStringTableUpdaterCallback updater_func); |
- |
- void ProcessAllWeakReferences(WeakObjectRetainer* retainer); |
- void ProcessYoungWeakReferences(WeakObjectRetainer* retainer); |
- |
void VisitExternalResources(v8::ExternalResourceVisitor* visitor); |
// An object should be promoted if the object has survived a |
@@ -1129,8 +1096,6 @@ class Heap { |
void FreeQueuedChunks(); |
void WaitUntilUnmappingOfFreeChunksCompleted(); |
- bool RecentIdleNotificationHappened(); |
- |
// Completely clear the Instanceof cache (to stop it keeping objects alive |
// around a GC). |
inline void CompletelyClearInstanceofCache(); |
@@ -1161,8 +1126,6 @@ class Heap { |
void DeoptMarkedAllocationSites(); |
- bool MaximumSizeScavenge() { return maximum_size_scavenges_ > 0; } |
- |
bool DeoptMaybeTenuredAllocationSites() { |
return new_space_.IsAtMaximumCapacity() && maximum_size_scavenges_ == 0; |
} |
@@ -1269,6 +1232,9 @@ class Heap { |
// Destroys all memory allocated by the heap. |
void TearDown(); |
+ // Returns whether SetUp has been called. |
+ bool HasBeenSetUp(); |
+ |
// =========================================================================== |
// Getters for spaces. ======================================================= |
// =========================================================================== |
@@ -1502,7 +1468,6 @@ class Heap { |
return semi_space_copied_object_size_; |
} |
- |
inline intptr_t SurvivedNewSpaceObjectSize() { |
return promoted_objects_size_ + semi_space_copied_object_size_; |
} |
@@ -1529,15 +1494,6 @@ class Heap { |
return static_cast<intptr_t>(total); |
} |
- inline intptr_t OldGenerationSpaceAvailable() { |
- return old_generation_allocation_limit_ - PromotedTotalSize(); |
- } |
- |
- inline intptr_t OldGenerationCapacityAvailable() { |
- return max_old_generation_size_ - PromotedTotalSize(); |
- } |
- |
- |
void UpdateNewSpaceAllocationCounter() { |
new_space_allocation_counter_ = NewSpaceAllocationCounter(); |
} |
@@ -1568,19 +1524,6 @@ class Heap { |
return PromotedSpaceSizeOfObjects() - old_generation_size_at_last_gc_; |
} |
- // Update GC statistics that are tracked on the Heap. |
- void UpdateCumulativeGCStatistics(double duration, double spent_in_mutator, |
- double marking_time); |
- |
- // Returns maximum GC pause. |
- double get_max_gc_pause() { return max_gc_pause_; } |
- |
- // Returns maximum size of objects alive after GC. |
- intptr_t get_max_alive_after_gc() { return max_alive_after_gc_; } |
- |
- // Returns minimal interval between two subsequent collections. |
- double get_min_in_mutator() { return min_in_mutator_; } |
- |
int gc_count() const { return gc_count_; } |
// Returns the size of objects residing in non new spaces. |
@@ -1618,15 +1561,10 @@ class Heap { |
// Allocation methods. ======================================================= |
// =========================================================================== |
- // Returns a deep copy of the JavaScript object. |
- // Properties and elements are copied too. |
- // Optionally takes an AllocationSite to be appended in an AllocationMemento. |
- MUST_USE_RESULT AllocationResult CopyJSObject(JSObject* source, |
- AllocationSite* site = NULL); |
- |
// Creates a filler object and returns a heap object immediately after it. |
MUST_USE_RESULT HeapObject* PrecedeWithFiller(HeapObject* object, |
int filler_size); |
+ |
// Creates a filler object if needed for alignment and returns a heap object |
// immediately after it. If any space is left after the returned object, |
// another filler object is created so the over allocated memory is iterable. |
@@ -1727,6 +1665,11 @@ class Heap { |
return (pretenure == TENURED) ? OLD_SPACE : NEW_SPACE; |
} |
+#define ROOT_ACCESSOR(type, name, camel_name) \ |
+ inline void set_##name(type* value); |
+ ROOT_LIST(ROOT_ACCESSOR) |
+#undef ROOT_ACCESSOR |
+ |
int current_gc_flags() { return current_gc_flags_; } |
void set_current_gc_flags(int flags) { |
@@ -1747,16 +1690,6 @@ class Heap { |
return current_gc_flags_ & kFinalizeIncrementalMarkingMask; |
} |
-#define ROOT_ACCESSOR(type, name, camel_name) \ |
- inline void set_##name(type* value); |
- ROOT_LIST(ROOT_ACCESSOR) |
-#undef ROOT_ACCESSOR |
- |
- // Code that should be run before and after each GC. Includes some |
- // reporting/verification activities when compiled with DEBUG set. |
- void GarbageCollectionPrologue(); |
- void GarbageCollectionEpilogue(); |
- |
void PreprocessStackTraces(); |
// Pretenuring decisions are made based on feedback collected during new |
@@ -1813,9 +1746,6 @@ class Heap { |
HeapObject* DoubleAlignForDeserialization(HeapObject* object, int size); |
- // Performs a minor collection in new generation. |
- void Scavenge(); |
- |
// Commits from space if it is uncommitted. |
void EnsureFromSpaceIsCommitted(); |
@@ -1825,18 +1755,6 @@ class Heap { |
// Fill in bogus values in from space |
void ZapFromSpace(); |
- Address DoScavenge(ObjectVisitor* scavenge_visitor, Address new_space_front); |
- |
- // Performs a major collection in the whole heap. |
- void MarkCompact(); |
- |
- // Code to be run before and after mark-compact. |
- void MarkCompactPrologue(); |
- void MarkCompactEpilogue(); |
- |
- void ProcessNativeContexts(WeakObjectRetainer* retainer); |
- void ProcessAllocationSites(WeakObjectRetainer* retainer); |
- |
// Deopts all code that contains allocation instruction which are tenured or |
// not tenured. Moreover it clears the pretenuring allocation site statistics. |
void ResetAllAllocationSitesDependentCode(PretenureFlag flag); |
@@ -1918,15 +1836,108 @@ class Heap { |
inline void UpdateAllocationsHash(HeapObject* object); |
inline void UpdateAllocationsHash(uint32_t value); |
- inline void PrintAlloctionsHash(); |
+ void PrintAlloctionsHash(); |
void AddToRingBuffer(const char* string); |
void GetFromRingBuffer(char* buffer); |
+ // 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 |
+ // objects that die later. |
+ void OverApproximateWeakClosure(const char* gc_reason); |
+ |
+ // =========================================================================== |
+ // Actual GC. ================================================================ |
+ // =========================================================================== |
+ |
+ // Code that should be run before and after each GC. Includes some |
+ // reporting/verification activities when compiled with DEBUG set. |
+ void GarbageCollectionPrologue(); |
+ void GarbageCollectionEpilogue(); |
+ |
+ // Performs a major collection in the whole heap. |
+ void MarkCompact(); |
+ |
+ // Code to be run before and after mark-compact. |
+ void MarkCompactPrologue(); |
+ void MarkCompactEpilogue(); |
+ |
+ // Performs a minor collection in new generation. |
+ void Scavenge(); |
+ |
+ Address DoScavenge(ObjectVisitor* scavenge_visitor, Address new_space_front); |
+ |
+ void UpdateNewSpaceReferencesInExternalStringTable( |
+ ExternalStringTableUpdaterCallback updater_func); |
+ |
+ void UpdateReferencesInExternalStringTable( |
+ ExternalStringTableUpdaterCallback updater_func); |
+ |
+ void ProcessAllWeakReferences(WeakObjectRetainer* retainer); |
+ void ProcessYoungWeakReferences(WeakObjectRetainer* retainer); |
+ void ProcessNativeContexts(WeakObjectRetainer* retainer); |
+ void ProcessAllocationSites(WeakObjectRetainer* retainer); |
+ |
+ // =========================================================================== |
+ // GC statistics. ============================================================ |
+ // =========================================================================== |
+ |
+ inline intptr_t OldGenerationSpaceAvailable() { |
+ return old_generation_allocation_limit_ - PromotedTotalSize(); |
+ } |
+ |
+ // Returns maximum GC pause. |
+ double get_max_gc_pause() { return max_gc_pause_; } |
+ |
+ // Returns maximum size of objects alive after GC. |
+ intptr_t get_max_alive_after_gc() { return max_alive_after_gc_; } |
+ |
+ // Returns minimal interval between two subsequent collections. |
+ double get_min_in_mutator() { return min_in_mutator_; } |
+ |
+ // Update GC statistics that are tracked on the Heap. |
+ void UpdateCumulativeGCStatistics(double duration, double spent_in_mutator, |
+ double marking_time); |
+ |
+ bool MaximumSizeScavenge() { return maximum_size_scavenges_ > 0; } |
+ |
+ // =========================================================================== |
+ // Growing strategy. ========================================================= |
+ // =========================================================================== |
+ |
+ // Decrease the allocation limit if the new limit based on the given |
+ // parameters is lower than the current limit. |
+ void DampenOldGenerationAllocationLimit(intptr_t old_gen_size, |
+ double gc_speed, |
+ double mutator_speed); |
+ |
+ |
+ // Calculates the allocation limit based on a given growing factor and a |
+ // given old generation size. |
+ intptr_t CalculateOldGenerationAllocationLimit(double factor, |
+ intptr_t old_gen_size); |
+ |
+ // Sets the allocation limit to trigger the next full garbage collection. |
+ void SetOldGenerationAllocationLimit(intptr_t old_gen_size, double gc_speed, |
+ double mutator_speed); |
+ |
+ // =========================================================================== |
+ // Idle notification. ======================================================== |
+ // =========================================================================== |
+ |
+ bool RecentIdleNotificationHappened(); |
+ |
// =========================================================================== |
// Allocation methods. ======================================================= |
// =========================================================================== |
+ // Returns a deep copy of the JavaScript object. |
+ // Properties and elements are copied too. |
+ // Optionally takes an AllocationSite to be appended in an AllocationMemento. |
+ MUST_USE_RESULT AllocationResult CopyJSObject(JSObject* source, |
+ AllocationSite* site = NULL); |
+ |
// Allocates a JS Map in the heap. |
MUST_USE_RESULT AllocationResult |
AllocateMap(InstanceType instance_type, int instance_size, |