| Index: third_party/WebKit/Source/platform/heap/HeapPage.h
|
| diff --git a/third_party/WebKit/Source/platform/heap/HeapPage.h b/third_party/WebKit/Source/platform/heap/HeapPage.h
|
| index a006d41adf842693779de4f04436644eacf6caf0..3a43031bba9374f1cfc581d758a89aa01ccb96b8 100644
|
| --- a/third_party/WebKit/Source/platform/heap/HeapPage.h
|
| +++ b/third_party/WebKit/Source/platform/heap/HeapPage.h
|
| @@ -512,6 +512,26 @@ class NormalPage final : public BasePage {
|
|
|
| inline NormalPageArena* arenaForNormalPage() const;
|
|
|
| + // Context object holding the state of the arena page compaction pass,
|
| + // passed in when compacting individual pages.
|
| + class CompactionContext {
|
| + STACK_ALLOCATED();
|
| +
|
| + public:
|
| + // Page compacting into.
|
| + NormalPage* m_currentPage = nullptr;
|
| + // Offset into |m_currentPage| to the next free address.
|
| + size_t m_allocationPoint = 0;
|
| + // Chain of available pages to use for compaction. Page compaction
|
| + // picks the next one when the current one is exhausted.
|
| + BasePage* m_availablePages = nullptr;
|
| + // Chain of pages that have been compacted. Page compaction will
|
| + // add compacted pages once the current one becomes exhausted.
|
| + BasePage** m_compactedPages = nullptr;
|
| + };
|
| +
|
| + void sweepAndCompact(CompactionContext&);
|
| +
|
| private:
|
| HeapObjectHeader* findHeaderFromAddress(Address);
|
| void populateObjectStartBitMap();
|
| @@ -665,6 +685,8 @@ class FreeList {
|
| // All FreeListEntries in the nth list have size >= 2^n.
|
| FreeListEntry* m_freeLists[blinkPageSizeLog2];
|
|
|
| + size_t freeListSize() const;
|
| +
|
| friend class NormalPageArena;
|
| };
|
|
|
| @@ -761,8 +783,14 @@ class PLATFORM_EXPORT NormalPageArena final : public BaseArena {
|
| bool isLazySweeping() const { return m_isLazySweeping; }
|
| void setIsLazySweeping(bool flag) { m_isLazySweeping = flag; }
|
|
|
| + size_t arenaSize();
|
| + size_t freeListSize();
|
| +
|
| + void sweepAndCompact();
|
| +
|
| private:
|
| void allocatePage();
|
| +
|
| Address outOfLineAllocate(size_t allocationSize, size_t gcInfoIndex);
|
| Address allocateFromFreeList(size_t, size_t gcInfoIndex);
|
|
|
|
|