| Index: src/heap/heap.h
|
| diff --git a/src/heap/heap.h b/src/heap/heap.h
|
| index 8cc286c7596b13986d2e3f005a6f116991fff7ff..a4ecdf7c79a55d913fe5d9b2eaaae261940eca8e 100644
|
| --- a/src/heap/heap.h
|
| +++ b/src/heap/heap.h
|
| @@ -10,7 +10,6 @@
|
|
|
| #include "src/allocation.h"
|
| #include "src/assert-scope.h"
|
| -#include "src/base/flags.h"
|
| #include "src/globals.h"
|
| #include "src/heap/gc-idle-time-handler.h"
|
| #include "src/heap/incremental-marking.h"
|
| @@ -577,26 +576,6 @@
|
| kSmiRootsStart = kStringTableRootIndex + 1
|
| };
|
|
|
| - // Flags to indicate modes for a GC run.
|
| - enum GCFlag {
|
| - kNoGCFlags = 0u,
|
| - kReduceMemoryFootprintMask = 1u << 0,
|
| - kAbortIncrementalMarkingMask = 1u << 1,
|
| - kFinalizeIncrementalMarkingMask = 1u << 2,
|
| -
|
| - // Making the heap iterable requires us to abort incremental marking.
|
| - kMakeHeapIterableMask = kAbortIncrementalMarkingMask,
|
| - };
|
| - typedef base::Flags<GCFlag> GCFlags;
|
| -
|
| - // A GC invocation always respects the passed flags. Upon finished the current
|
| - // cycle the previously set flags are either restored (kDontOverride), or
|
| - // overriden with the flags indicating no special behavior (kOverride).
|
| - enum GCFlagOverride {
|
| - kOverride,
|
| - kDontOverride,
|
| - };
|
| -
|
| // Indicates whether live bytes adjustment is triggered
|
| // - from within the GC code before sweeping started (SEQUENTIAL_TO_SWEEPER),
|
| // - or from within GC (CONCURRENT_TO_SWEEPER),
|
| @@ -619,36 +598,6 @@
|
| OBJECT_STATS_COUNT = FIRST_CODE_AGE_SUB_TYPE + Code::kCodeAgeCount + 1
|
| };
|
|
|
| - class GCFlagScope {
|
| - public:
|
| - GCFlagScope(Heap* heap, GCFlags gc_flags, GCCallbackFlags callback_flags,
|
| - GCFlagOverride override)
|
| - : heap_(heap), override_(override) {
|
| - if (override_ == kDontOverride) {
|
| - saved_gc_flags_ = heap->current_gc_flags_;
|
| - saved_gc_callback_flags_ = heap->current_gc_callback_flags_;
|
| - }
|
| - heap->set_current_gc_flags(gc_flags);
|
| - heap->current_gc_callback_flags_ = callback_flags;
|
| - }
|
| -
|
| - ~GCFlagScope() {
|
| - if (override_ == kDontOverride) {
|
| - heap_->set_current_gc_flags(saved_gc_flags_);
|
| - heap_->current_gc_callback_flags_ = saved_gc_callback_flags_;
|
| - } else {
|
| - heap_->set_current_gc_flags(kNoGCFlags);
|
| - heap_->current_gc_callback_flags_ = kNoGCCallbackFlags;
|
| - }
|
| - }
|
| -
|
| - private:
|
| - Heap* heap_;
|
| - GCFlagOverride override_;
|
| - GCFlags saved_gc_flags_;
|
| - GCCallbackFlags saved_gc_callback_flags_;
|
| - };
|
| -
|
| // Taking this lock prevents the GC from entering a phase that relocates
|
| // object references.
|
| class RelocationLock {
|
| @@ -750,6 +699,14 @@
|
|
|
| // callee is only valid in sloppy mode.
|
| static const int kArgumentsCalleeIndex = 1;
|
| +
|
| + static const int kNoGCFlags = 0;
|
| + static const int kReduceMemoryFootprintMask = 1;
|
| + static const int kAbortIncrementalMarkingMask = 2;
|
| + static const int kFinalizeIncrementalMarkingMask = 4;
|
| +
|
| + // Making the heap iterable requires us to abort incremental marking.
|
| + static const int kMakeHeapIterableMask = kAbortIncrementalMarkingMask;
|
|
|
| // The roots that have an index less than this are always in old space.
|
| static const int kOldSpaceRoots = 0x20;
|
| @@ -1310,25 +1267,22 @@
|
| // Methods triggering GCs. ===================================================
|
| // ===========================================================================
|
|
|
| - // Perform a garbage collection operation in a given space.
|
| + // Performs garbage collection operation.
|
| // Returns whether there is a chance that another major GC could
|
| // collect more garbage.
|
| inline bool CollectGarbage(
|
| - AllocationSpace space, const char* gc_reason = nullptr,
|
| - const GCFlags flags = kNoGCFlags,
|
| - const GCCallbackFlags callback_flags = kNoGCCallbackFlags,
|
| - const GCFlagOverride override = kOverride);
|
| -
|
| - inline bool CollectGarbageNewSpace(const char* gc_reason = nullptr);
|
| -
|
| - // Performs a full garbage collection.
|
| + AllocationSpace space, const char* gc_reason = NULL,
|
| + const GCCallbackFlags gc_callback_flags = kNoGCCallbackFlags);
|
| +
|
| + // Performs a full garbage collection. If (flags & kMakeHeapIterableMask) is
|
| + // non-zero, then the slower precise sweeper is used, which leaves the heap
|
| + // in a state where we can iterate over the heap visiting all objects.
|
| void CollectAllGarbage(
|
| - const char* gc_reason = nullptr,
|
| - const GCFlags flags = Heap::kFinalizeIncrementalMarkingMask,
|
| + int flags = kFinalizeIncrementalMarkingMask, const char* gc_reason = NULL,
|
| const GCCallbackFlags gc_callback_flags = kNoGCCallbackFlags);
|
|
|
| // Last hope GC, should try to squeeze as much as possible.
|
| - void CollectAllAvailableGarbage(const char* gc_reason = nullptr);
|
| + void CollectAllAvailableGarbage(const char* gc_reason = NULL);
|
|
|
| // Invoked when GC was requested via the stack guard.
|
| void HandleGCRequest();
|
| @@ -1377,7 +1331,7 @@
|
|
|
| // Starts incremental marking assuming incremental marking is currently
|
| // stopped.
|
| - void StartIncrementalMarking(const GCFlags = kNoGCFlags,
|
| + void StartIncrementalMarking(int gc_flags = kNoGCFlags,
|
| const GCCallbackFlags gc_callback_flags =
|
| GCCallbackFlags::kNoGCCallbackFlags,
|
| const char* reason = nullptr);
|
| @@ -1741,7 +1695,7 @@
|
|
|
| StoreBuffer* store_buffer() { return &store_buffer_; }
|
|
|
| - void set_current_gc_flags(GCFlags flags) {
|
| + void set_current_gc_flags(int flags) {
|
| current_gc_flags_ = flags;
|
| DCHECK(!ShouldFinalizeIncrementalMarking() ||
|
| !ShouldAbortIncrementalMarking());
|
| @@ -1783,13 +1737,17 @@
|
| // Performs garbage collection operation.
|
| // Returns whether there is a chance that another major GC could
|
| // collect more garbage.
|
| - bool CollectGarbage(GarbageCollector collector, const char* gc_reason,
|
| - const char* collector_reason);
|
| + bool CollectGarbage(
|
| + GarbageCollector collector, const char* gc_reason,
|
| + const char* collector_reason,
|
| + const GCCallbackFlags gc_callback_flags = kNoGCCallbackFlags);
|
|
|
| // Performs garbage collection
|
| // Returns whether there is a chance another major GC could
|
| // collect more garbage.
|
| - bool PerformGarbageCollection(GarbageCollector collector);
|
| + bool PerformGarbageCollection(
|
| + GarbageCollector collector,
|
| + const GCCallbackFlags gc_callback_flags = kNoGCCallbackFlags);
|
|
|
| inline void UpdateOldSpaceLimits();
|
|
|
| @@ -2410,7 +2368,7 @@
|
| bool configured_;
|
|
|
| // Currently set GC flags that are respected by all GC components.
|
| - GCFlags current_gc_flags_;
|
| + int current_gc_flags_;
|
|
|
| // Currently set GC callback flags that are used to pass information between
|
| // the embedder and V8's GC.
|
|
|