| Index: src/heap/heap.h
|
| diff --git a/src/heap/heap.h b/src/heap/heap.h
|
| index aa63a00650ea3c4e8074e0786a80fce06a84819e..68de80b855e9ab5b02a1601fce0759e0a1213e58 100644
|
| --- a/src/heap/heap.h
|
| +++ b/src/heap/heap.h
|
| @@ -422,16 +422,13 @@ namespace internal {
|
| PRIVATE_SYMBOL_LIST(V)
|
|
|
| // Forward declarations.
|
| +class HeapObjectsFilter;
|
| class HeapStats;
|
| class Isolate;
|
| class MemoryReducer;
|
| class WeakObjectRetainer;
|
|
|
|
|
| -typedef String* (*ExternalStringTableUpdaterCallback)(Heap* heap,
|
| - Object** pointer);
|
| -
|
| -
|
| // A queue of objects promoted during scavenge. Each object is accompanied
|
| // by it's size to avoid dereferencing a map pointer for scanning.
|
| // The last page in to-space is used for the promotion queue. On conflict
|
| @@ -541,46 +538,6 @@ typedef void (*ScavengingCallback)(Map* map, HeapObject** slot,
|
| HeapObject* object);
|
|
|
|
|
| -// External strings table is a place where all external strings are
|
| -// registered. We need to keep track of such strings to properly
|
| -// finalize them.
|
| -class ExternalStringTable {
|
| - public:
|
| - // Registers an external string.
|
| - inline void AddString(String* string);
|
| -
|
| - inline void Iterate(ObjectVisitor* v);
|
| -
|
| - // Restores internal invariant and gets rid of collected strings.
|
| - // Must be called after each Iterate() that modified the strings.
|
| - void CleanUp();
|
| -
|
| - // Destroys all allocated memory.
|
| - void TearDown();
|
| -
|
| - private:
|
| - explicit ExternalStringTable(Heap* heap) : heap_(heap) {}
|
| -
|
| - friend class Heap;
|
| -
|
| - inline void Verify();
|
| -
|
| - inline void AddOldString(String* string);
|
| -
|
| - // Notifies the table that only a prefix of the new list is valid.
|
| - inline void ShrinkNewStrings(int position);
|
| -
|
| - // To speed up scavenge collections new space string are kept
|
| - // separate from old space strings.
|
| - List<Object*> new_space_strings_;
|
| - List<Object*> old_space_strings_;
|
| -
|
| - Heap* heap_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(ExternalStringTable);
|
| -};
|
| -
|
| -
|
| enum ArrayStorageAllocationMode {
|
| DONT_INITIALIZE_ARRAY_ELEMENTS,
|
| INITIALIZE_ARRAY_ELEMENTS_WITH_HOLE
|
| @@ -870,10 +827,6 @@ class Heap {
|
| // index.
|
| void MoveElements(FixedArray* array, int dst_index, int src_index, int len);
|
|
|
| - // Finalizes an external string by deleting the associated external
|
| - // data and clearing the resource pointer.
|
| - inline void FinalizeExternalString(String* string);
|
| -
|
| // Initialize a filler object to keep the ability to iterate over the heap
|
| // when introducing gaps within pages.
|
| void CreateFillerObjectAt(Address addr, int size);
|
| @@ -1220,10 +1173,6 @@ class Heap {
|
| return &mark_compact_collector_;
|
| }
|
|
|
| - ExternalStringTable* external_string_table() {
|
| - return &external_string_table_;
|
| - }
|
| -
|
| // ===========================================================================
|
| // Root set access. ==========================================================
|
| // ===========================================================================
|
| @@ -1393,6 +1342,17 @@ class Heap {
|
| IncrementalMarking* incremental_marking() { return &incremental_marking_; }
|
|
|
| // ===========================================================================
|
| + // External string table API. ================================================
|
| + // ===========================================================================
|
| +
|
| + // Registers an external string.
|
| + inline void RegisterExternalString(String* string);
|
| +
|
| + // Finalizes an external string by deleting the associated external
|
| + // data and clearing the resource pointer.
|
| + inline void FinalizeExternalString(String* string);
|
| +
|
| + // ===========================================================================
|
| // Methods checking/returning the space of a given object/address. ===========
|
| // ===========================================================================
|
|
|
| @@ -1613,6 +1573,45 @@ class Heap {
|
| private:
|
| class UnmapFreeMemoryTask;
|
|
|
| + // External strings table is a place where all external strings are
|
| + // registered. We need to keep track of such strings to properly
|
| + // finalize them.
|
| + class ExternalStringTable {
|
| + public:
|
| + // Registers an external string.
|
| + inline void AddString(String* string);
|
| +
|
| + inline void Iterate(ObjectVisitor* v);
|
| +
|
| + // Restores internal invariant and gets rid of collected strings.
|
| + // Must be called after each Iterate() that modified the strings.
|
| + void CleanUp();
|
| +
|
| + // Destroys all allocated memory.
|
| + void TearDown();
|
| +
|
| + private:
|
| + explicit ExternalStringTable(Heap* heap) : heap_(heap) {}
|
| +
|
| + inline void Verify();
|
| +
|
| + inline void AddOldString(String* string);
|
| +
|
| + // Notifies the table that only a prefix of the new list is valid.
|
| + inline void ShrinkNewStrings(int position);
|
| +
|
| + // To speed up scavenge collections new space string are kept
|
| + // separate from old space strings.
|
| + List<Object*> new_space_strings_;
|
| + List<Object*> old_space_strings_;
|
| +
|
| + Heap* heap_;
|
| +
|
| + friend class Heap;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(ExternalStringTable);
|
| + };
|
| +
|
| struct StrongRootsList;
|
|
|
| struct StringTypeTable {
|
| @@ -1646,6 +1645,9 @@ class Heap {
|
| bool pass_isolate;
|
| };
|
|
|
| + typedef String* (*ExternalStringTableUpdaterCallback)(Heap* heap,
|
| + Object** pointer);
|
| +
|
| static const int kInitialStringTableSize = 2048;
|
| static const int kInitialEvalCacheSize = 64;
|
| static const int kInitialNumberStringCacheSize = 256;
|
| @@ -2569,8 +2571,6 @@ class SpaceIterator : public Malloced {
|
| // nodes filtering uses GC marks, it can't be used during MS/MC GC
|
| // phases. Also, it is forbidden to interrupt iteration in this mode,
|
| // as this will leave heap objects marked (and thus, unusable).
|
| -class HeapObjectsFilter;
|
| -
|
| class HeapIterator BASE_EMBEDDED {
|
| public:
|
| enum HeapObjectsFiltering { kNoFiltering, kFilterUnreachable };
|
|
|