Commit 57c198cc authored by Michael Lippautz's avatar Michael Lippautz Committed by Commit Bot

[oilpan] HeapDoublyLinkedList support for incremental marking

No-try: true
Bug: chromium:757440
Change-Id: I9d1935b8aaa08313e2fd87bc88b4bff4b9051db7
Reviewed-on: https://chromium-review.googlesource.com/840242
Commit-Queue: Michael Lippautz <mlippautz@chromium.org>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#525980}
parent 8d8c1d95
...@@ -529,6 +529,59 @@ TEST(IncrementalMarkingTest, HeapVectorEagerTracingStopsAtMember) { ...@@ -529,6 +529,59 @@ TEST(IncrementalMarkingTest, HeapVectorEagerTracingStopsAtMember) {
} }
} }
// =============================================================================
// HeapDoublyLinkedList support. ===============================================
// =============================================================================
namespace {
class ObjectNode : public GarbageCollected<ObjectNode>,
public DoublyLinkedListNode<ObjectNode> {
public:
explicit ObjectNode(Object* obj) : obj_(obj) {}
void Trace(Visitor* visitor) {
visitor->Trace(obj_);
visitor->Trace(prev_);
visitor->Trace(next_);
}
private:
friend class WTF::DoublyLinkedListNode<ObjectNode>;
Member<Object> obj_;
Member<ObjectNode> prev_;
Member<ObjectNode> next_;
};
} // namespace
TEST(IncrementalMarkingTest, HeapDoublyLinkedListPush) {
Object* obj = Object::Create();
ObjectNode* obj_node = new ObjectNode(obj);
HeapDoublyLinkedList<ObjectNode> list;
{
ExpectWriteBarrierFires<ObjectNode> scope(ThreadState::Current(),
{obj_node});
list.Push(obj_node);
// |obj| will be marked once |obj_node| gets processed.
EXPECT_FALSE(obj->IsMarked());
}
}
TEST(IncrementalMarkingTest, HeapDoublyLinkedListAppend) {
Object* obj = Object::Create();
ObjectNode* obj_node = new ObjectNode(obj);
HeapDoublyLinkedList<ObjectNode> list;
{
ExpectWriteBarrierFires<ObjectNode> scope(ThreadState::Current(),
{obj_node});
list.Append(obj_node);
// |obj| will be marked once |obj_node| gets processed.
EXPECT_FALSE(obj->IsMarked());
}
}
} // namespace incremental_marking_test } // namespace incremental_marking_test
} // namespace blink } // namespace blink
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment