Chromium Code Reviews| 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 c401c9ef6d5fa72d66501e6c52b82349992c73b2..702a2bdfd0fc9e7639d0572698bd49331bfb13af 100644 |
| --- a/third_party/WebKit/Source/platform/heap/HeapPage.h |
| +++ b/third_party/WebKit/Source/platform/heap/HeapPage.h |
| @@ -354,6 +354,13 @@ inline bool isPageHeaderAddress(Address address) { |
| return !((reinterpret_cast<uintptr_t>(address) & blinkPageOffsetMask) - |
| blinkGuardPageSize); |
| } |
| + |
| +// Callback used for unit testing the marking of conservative pointers |
| +// (checkAndMarkPointer().) For each pointer that has been discovered |
| +// to point to a heap object, the callback is invoked with a pointer |
| +// to its header. If the callback returns |true|, the object will not |
| +// be marked. |
| +using MarkedPointerCallback = bool (*)(HeapObjectHeader*); |
|
haraken
2017/01/25 06:14:08
MarkedPointerCallbackForTesting ?
sof
2017/01/25 06:25:24
Done.
|
| #endif |
| // BasePage is a base class for NormalPage and LargeObjectPage. |
| @@ -408,6 +415,11 @@ class BasePage { |
| // conservatively mark all objects that could be referenced from |
| // the stack. |
| virtual void checkAndMarkPointer(Visitor*, Address) = 0; |
| +#if DCHECK_IS_ON() |
| + virtual void checkAndMarkPointer(Visitor*, |
| + Address, |
| + MarkedPointerCallback) = 0; |
| +#endif |
| virtual void markOrphaned(); |
| class HeapSnapshotInfo { |
| @@ -489,6 +501,9 @@ class NormalPage final : public BasePage { |
| void poisonUnmarkedObjects() override; |
| #endif |
| void checkAndMarkPointer(Visitor*, Address) override; |
| +#if DCHECK_IS_ON() |
| + void checkAndMarkPointer(Visitor*, Address, MarkedPointerCallback) override; |
| +#endif |
| void markOrphaned() override; |
| void takeSnapshot(base::trace_event::MemoryAllocatorDump*, |
| @@ -567,6 +582,9 @@ class LargeObjectPage final : public BasePage { |
| void poisonUnmarkedObjects() override; |
| #endif |
| void checkAndMarkPointer(Visitor*, Address) override; |
| +#if DCHECK_IS_ON() |
| + void checkAndMarkPointer(Visitor*, Address, MarkedPointerCallback) override; |
| +#endif |
| void markOrphaned() override; |
| void takeSnapshot(base::trace_event::MemoryAllocatorDump*, |