Commit 7a99c782 authored by Michael Lippautz's avatar Michael Lippautz Committed by Chromium LUCI CQ

heap: Avoid dynamic allocation of HeapVector

Bug: 1154667
Change-Id: I421ba6c9d6513dae3a66bddfd50a2de67e4046eb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2571283
Commit-Queue: Michael Lippautz <mlippautz@chromium.org>
Commit-Queue: Anton Bikineev <bikineev@chromium.org>
Auto-Submit: Michael Lippautz <mlippautz@chromium.org>
Reviewed-by: default avatarAnton Bikineev <bikineev@chromium.org>
Cr-Commit-Position: refs/heads/master@{#833291}
parent 185138a3
......@@ -504,79 +504,77 @@ class NonGarbageCollectedContainerRoot {
TEST_F(IncrementalMarkingTest, HeapVectorPushBackMember) {
auto* obj = MakeGarbageCollected<Object>();
auto* vec = MakeGarbageCollected<HeapVector<Member<Object>>>();
HeapVector<Member<Object>> vec;
{
ExpectWriteBarrierFires scope(ThreadState::Current(), {obj});
vec->push_back(obj);
vec.push_back(obj);
}
}
TEST_F(IncrementalMarkingTest, HeapVectorPushBackNonGCedContainer) {
auto* obj = MakeGarbageCollected<Object>();
auto* vec = MakeGarbageCollected<HeapVector<NonGarbageCollectedContainer>>();
HeapVector<NonGarbageCollectedContainer> vec;
{
ExpectWriteBarrierFires scope(ThreadState::Current(), {obj});
vec->push_back(NonGarbageCollectedContainer(obj, 1));
vec.push_back(NonGarbageCollectedContainer(obj, 1));
}
}
TEST_F(IncrementalMarkingTest, HeapVectorPushBackStdPair) {
auto* obj1 = MakeGarbageCollected<Object>();
auto* obj2 = MakeGarbageCollected<Object>();
auto* vec = MakeGarbageCollected<
HeapVector<std::pair<Member<Object>, Member<Object>>>>();
HeapVector<std::pair<Member<Object>, Member<Object>>> vec;
{
ExpectWriteBarrierFires scope(ThreadState::Current(), {obj1, obj2});
vec->push_back(std::make_pair(Member<Object>(obj1), Member<Object>(obj2)));
vec.push_back(std::make_pair(Member<Object>(obj1), Member<Object>(obj2)));
}
}
TEST_F(IncrementalMarkingTest, HeapVectorEmplaceBackMember) {
auto* obj = MakeGarbageCollected<Object>();
auto* vec = MakeGarbageCollected<HeapVector<Member<Object>>>();
HeapVector<Member<Object>> vec;
{
ExpectWriteBarrierFires scope(ThreadState::Current(), {obj});
vec->emplace_back(obj);
vec.emplace_back(obj);
}
}
TEST_F(IncrementalMarkingTest, HeapVectorEmplaceBackNonGCedContainer) {
auto* obj = MakeGarbageCollected<Object>();
auto* vec = MakeGarbageCollected<HeapVector<NonGarbageCollectedContainer>>();
HeapVector<NonGarbageCollectedContainer> vec;
{
ExpectWriteBarrierFires scope(ThreadState::Current(), {obj});
vec->emplace_back(obj, 1);
vec.emplace_back(obj, 1);
}
}
TEST_F(IncrementalMarkingTest, HeapVectorEmplaceBackStdPair) {
auto* obj1 = MakeGarbageCollected<Object>();
auto* obj2 = MakeGarbageCollected<Object>();
auto* vec = MakeGarbageCollected<
HeapVector<std::pair<Member<Object>, Member<Object>>>>();
HeapVector<std::pair<Member<Object>, Member<Object>>> vec;
{
ExpectWriteBarrierFires scope(ThreadState::Current(), {obj1, obj2});
vec->emplace_back(obj1, obj2);
vec.emplace_back(obj1, obj2);
}
}
TEST_F(IncrementalMarkingTest, HeapVectorCopyMember) {
auto* object = MakeGarbageCollected<Object>();
auto* vec1 = MakeGarbageCollected<HeapVector<Member<Object>>>();
vec1->push_back(object);
HeapVector<Member<Object>> vec1;
vec1.push_back(object);
{
ExpectWriteBarrierFires scope(ThreadState::Current(), {object});
MakeGarbageCollected<HeapVector<Member<Object>>>(*vec1);
HeapVector<Member<Object>> vec2(vec1);
}
}
TEST_F(IncrementalMarkingTest, HeapVectorCopyNonGCedContainer) {
auto* obj = MakeGarbageCollected<Object>();
auto* vec1 = MakeGarbageCollected<HeapVector<NonGarbageCollectedContainer>>();
vec1->emplace_back(obj, 1);
HeapVector<NonGarbageCollectedContainer> vec1;
vec1.emplace_back(obj, 1);
{
ExpectWriteBarrierFires scope(ThreadState::Current(), {obj});
MakeGarbageCollected<HeapVector<NonGarbageCollectedContainer>>(*vec1);
HeapVector<NonGarbageCollectedContainer> vec2(vec1);
}
}
......@@ -584,32 +582,31 @@ TEST_F(IncrementalMarkingTest, HeapVectorCopyStdPair) {
using ValueType = std::pair<Member<Object>, Member<Object>>;
auto* obj1 = MakeGarbageCollected<Object>();
auto* obj2 = MakeGarbageCollected<Object>();
auto* vec1 = MakeGarbageCollected<HeapVector<ValueType>>();
vec1->emplace_back(obj1, obj2);
HeapVector<ValueType> vec1;
vec1.emplace_back(obj1, obj2);
{
ExpectWriteBarrierFires scope(ThreadState::Current(), {obj1, obj2});
MakeGarbageCollected<HeapVector<ValueType>>(*vec1);
HeapVector<ValueType> vec2(vec1);
}
}
TEST_F(IncrementalMarkingTest, HeapVectorMoveMember) {
auto* obj = MakeGarbageCollected<Object>();
auto* vec1 = MakeGarbageCollected<HeapVector<Member<Object>>>();
vec1->push_back(obj);
HeapVector<Member<Object>> vec1;
vec1.push_back(obj);
{
ExpectWriteBarrierFires scope(ThreadState::Current(), {obj});
MakeGarbageCollected<HeapVector<Member<Object>>>(std::move(*vec1));
HeapVector<Member<Object>> vec2(std::move(vec1));
}
}
TEST_F(IncrementalMarkingTest, HeapVectorMoveNonGCedContainer) {
auto* obj = MakeGarbageCollected<Object>();
auto* vec1 = MakeGarbageCollected<HeapVector<NonGarbageCollectedContainer>>();
vec1->emplace_back(obj, 1);
HeapVector<NonGarbageCollectedContainer> vec1;
vec1.emplace_back(obj, 1);
{
ExpectWriteBarrierFires scope(ThreadState::Current(), {obj});
MakeGarbageCollected<HeapVector<NonGarbageCollectedContainer>>(
std::move(*vec1));
HeapVector<NonGarbageCollectedContainer> vec2(std::move(vec1));
}
}
......@@ -1750,8 +1747,7 @@ TEST_F(IncrementalMarkingTest, HeapCompactWithStaleSlotInNestedContainer) {
using Nested = HeapVector<HeapVector<Member<Object>>>;
// Allocate dummy storage so that other vector backings are actually moved.
MakeGarbageCollected<HeapVector<Member<Object>>>()->push_back(
MakeGarbageCollected<Object>());
HeapVector<Member<Object>> unused{MakeGarbageCollected<Object>()};
IncrementalMarkingTestDriver driver(ThreadState::Current());
ThreadState::Current()->EnableCompactionForNextGCForTesting();
......
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