Commit baf05aee authored by sigbjornf's avatar sigbjornf Committed by Commit bot

Add unit test for non-leftmost GC mixin instance.

Verify that deriving from a USING_GARBAGE_COLLECTED_MIXIN() annotated
class is traced as expected.

R=haraken
BUG=

Review URL: https://codereview.chromium.org/1465083002

Cr-Commit-Position: refs/heads/master@{#361072}
parent eaa56600
......@@ -4596,6 +4596,25 @@ public:
Member<IntWrapper> m_obj;
};
class DerivedMultipleMixins : public MultipleMixins {
public:
DerivedMultipleMixins() : m_obj(IntWrapper::create(103)) { }
DEFINE_INLINE_VIRTUAL_TRACE()
{
s_traceCalled++;
visitor->trace(m_obj);
MultipleMixins::trace(visitor);
}
static int s_traceCalled;
private:
Member<IntWrapper> m_obj;
};
int DerivedMultipleMixins::s_traceCalled = 0;
static const bool s_isMixinTrue = IsGarbageCollectedMixin<MultipleMixins>::value;
static const bool s_isMixinFalse = IsGarbageCollectedMixin<IntWrapper>::value;
......@@ -4621,6 +4640,29 @@ TEST(HeapTest, MultipleMixins)
EXPECT_EQ(3, IntWrapper::s_destructorCalls);
}
TEST(HeapTest, DerivedMultipleMixins)
{
clearOutOldGarbage();
IntWrapper::s_destructorCalls = 0;
DerivedMultipleMixins::s_traceCalled = 0;
DerivedMultipleMixins* obj = new DerivedMultipleMixins();
{
Persistent<MixinA> a = obj;
preciselyCollectGarbage();
EXPECT_EQ(0, IntWrapper::s_destructorCalls);
EXPECT_EQ(1, DerivedMultipleMixins::s_traceCalled);
}
{
Persistent<MixinB> b = obj;
preciselyCollectGarbage();
EXPECT_EQ(0, IntWrapper::s_destructorCalls);
EXPECT_EQ(2, DerivedMultipleMixins::s_traceCalled);
}
preciselyCollectGarbage();
EXPECT_EQ(4, IntWrapper::s_destructorCalls);
}
class GCParkingThreadTester {
public:
static void test()
......
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