Index: third_party/WebKit/Source/platform/heap/HeapCompact.h |
diff --git a/third_party/WebKit/Source/platform/heap/HeapCompact.h b/third_party/WebKit/Source/platform/heap/HeapCompact.h |
deleted file mode 100644 |
index 8565eb9065805e4609d51ee87f0615295b4ed40d..0000000000000000000000000000000000000000 |
--- a/third_party/WebKit/Source/platform/heap/HeapCompact.h |
+++ /dev/null |
@@ -1,207 +0,0 @@ |
-// Copyright 2016 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef HeapCompact_h |
-#define HeapCompact_h |
- |
-#include "platform/PlatformExport.h" |
-#include "platform/heap/BlinkGC.h" |
-#include "wtf/DataLog.h" |
-#include "wtf/PtrUtil.h" |
-#include "wtf/ThreadingPrimitives.h" |
-#include "wtf/Vector.h" |
- |
-#include <bitset> |
-#include <utility> |
- |
-// Compaction-specific debug switches: |
- |
-// Set to 0 to prevent compaction GCs, disabling the heap compaction feature. |
-#define ENABLE_HEAP_COMPACTION 1 |
- |
-// Emit debug info during compaction. |
-#define DEBUG_HEAP_COMPACTION 0 |
- |
-// Emit stats on freelist occupancy. |
-// 0 - disabled, 1 - minimal, 2 - verbose. |
-#define DEBUG_HEAP_FREELIST 0 |
- |
-// Log the amount of time spent compacting. |
-#define DEBUG_LOG_HEAP_COMPACTION_RUNNING_TIME 0 |
- |
-// Compact during all idle + precise GCs; for debugging. |
-#define STRESS_TEST_HEAP_COMPACTION 0 |
- |
-namespace blink { |
- |
-class NormalPageArena; |
-class BasePage; |
-class ThreadState; |
- |
-class PLATFORM_EXPORT HeapCompact final { |
- public: |
- static std::unique_ptr<HeapCompact> create() { |
- return WTF::wrapUnique(new HeapCompact); |
- } |
- |
- ~HeapCompact(); |
- |
- // Determine if a GC for the given type and reason should also perform |
- // additional heap compaction. |
- // |
- bool shouldCompact(ThreadState*, BlinkGC::GCType, BlinkGC::GCReason); |
- |
- // Compaction should be performed as part of the ongoing GC, initialize |
- // the heap compaction pass. Returns the appropriate visitor type to |
- // use when running the marking phase. |
- BlinkGC::GCType initialize(ThreadState*); |
- |
- // Returns true if the ongoing GC will perform compaction. |
- bool isCompacting() const { return m_doCompact; } |
- |
- // Returns true if the ongoing GC will perform compaction for the given |
- // heap arena. |
- bool isCompactingArena(int arenaIndex) const { |
- return m_doCompact && (m_compactableArenas & (0x1u << arenaIndex)); |
- } |
- |
- // Returns |true| if the ongoing GC may compact the given arena/sub-heap. |
- static bool isCompactableArena(int arenaIndex) { |
- return arenaIndex >= BlinkGC::Vector1ArenaIndex && |
- arenaIndex <= BlinkGC::HashTableArenaIndex; |
- } |
- |
- // See |Heap::registerMovingObjectReference()| documentation. |
- void registerMovingObjectReference(MovableReference* slot); |
- |
- // See |Heap::registerMovingObjectCallback()| documentation. |
- void registerMovingObjectCallback(MovableReference, |
- MovingObjectCallback, |
- void* callbackData); |
- |
- // Thread signalling that a compaction pass is starting or has |
- // completed. |
- // |
- // A thread participating in a heap GC will wait on the completion |
- // of compaction across all threads. No thread can be allowed to |
- // potentially access another thread's heap arenas while they're |
- // still being compacted. |
- void startThreadCompaction(); |
- void finishThreadCompaction(); |
- |
- // Perform any relocation post-processing after having completed compacting |
- // the given arena. The number of pages that were freed together with the |
- // total size (in bytes) of freed heap storage, are passed in as arguments. |
- void finishedArenaCompaction(NormalPageArena*, |
- size_t freedPages, |
- size_t freedSize); |
- |
- // Register the heap page as containing live objects that will all be |
- // compacted. Registration happens as part of making the arenas ready |
- // for a GC. |
- void addCompactingPage(BasePage*); |
- |
- // Notify heap compaction that object at |from| has been relocated to.. |to|. |
- // (Called by the sweep compaction pass.) |
- void relocate(Address from, Address to); |
- |
- // For unit testing only: arrange for a compaction GC to be triggered |
- // next time a non-conservative GC is run. Sets the compact-next flag |
- // to the new value, returning old. |
- static bool scheduleCompactionGCForTesting(bool); |
- |
- private: |
- class MovableObjectFixups; |
- |
- HeapCompact(); |
- |
- // Sample the amount of fragmentation and heap memory currently residing |
- // on the freelists of the arenas we're able to compact. The computed |
- // numbers will be subsequently used to determine if a heap compaction |
- // is on order (shouldCompact().) |
- void updateHeapResidency(ThreadState*); |
- |
- // Parameters controlling when compaction should be done: |
- |
- // Number of GCs that must have passed since last compaction GC. |
- static const int kGCCountSinceLastCompactionThreshold = 10; |
- |
- // Freelist size threshold that must be exceeded before compaction |
- // should be considered. |
- static const size_t kFreeListSizeThreshold = 512 * 1024; |
- |
- MovableObjectFixups& fixups(); |
- |
- std::unique_ptr<MovableObjectFixups> m_fixups; |
- |
- // Set to |true| when a compacting sweep will go ahead. |
- bool m_doCompact; |
- size_t m_gcCountSinceLastCompaction; |
- |
- // Lock protecting finishedThreadCompaction() signalling. |
- Mutex m_mutex; |
- |
- // All threads performing a GC must synchronize on completion |
- // of all heap compactions. Not doing so risks one thread resuming |
- // the mutator, which could perform cross-thread access to a heap |
- // that's still in the process of being compacted. |
- ThreadCondition m_finished; |
- |
- // Number of heap threads participating in the compaction. |
- int m_threadCount; |
- |
- // Last reported freelist size, across all compactable arenas. |
- size_t m_freeListSize; |
- |
- // If compacting, i'th heap arena will be compacted |
- // if corresponding bit is set. Indexes are in |
- // the range of BlinkGC::ArenaIndices. |
- unsigned m_compactableArenas; |
- |
- // Stats, number of (complete) pages freed/decommitted + |
- // bytes freed (which will include partial pages.) |
- size_t m_freedPages; |
- size_t m_freedSize; |
- |
-#if DEBUG_LOG_HEAP_COMPACTION_RUNNING_TIME |
- double m_startCompactionTimeMS; |
-#endif |
- |
- static bool s_forceCompactionGC; |
-}; |
- |
-} // namespace blink |
- |
-// Logging macros activated by debug switches. |
- |
-#define LOG_HEAP_COMPACTION_INTERNAL(msg, ...) dataLogF(msg, ##__VA_ARGS__) |
- |
-#if DEBUG_HEAP_COMPACTION |
-#define LOG_HEAP_COMPACTION(msg, ...) \ |
- LOG_HEAP_COMPACTION_INTERNAL(msg, ##__VA_ARGS__) |
-#else |
-#define LOG_HEAP_COMPACTION(msg, ...) \ |
- do { \ |
- } while (0) |
-#endif |
- |
-#if DEBUG_HEAP_FREELIST |
-#define LOG_HEAP_FREELIST(msg, ...) \ |
- LOG_HEAP_COMPACTION_INTERNAL(msg, ##__VA_ARGS__) |
-#else |
-#define LOG_HEAP_FREELIST(msg, ...) \ |
- do { \ |
- } while (0) |
-#endif |
- |
-#if DEBUG_HEAP_FREELIST == 2 |
-#define LOG_HEAP_FREELIST_VERBOSE(msg, ...) \ |
- LOG_HEAP_COMPACTION_INTERNAL(msg, ##__VA_ARGS__) |
-#else |
-#define LOG_HEAP_FREELIST_VERBOSE(msg, ...) \ |
- do { \ |
- } while (0) |
-#endif |
- |
-#endif // HeapCompact_h |