aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/ProfileData/MemProfTest.cpp
diff options
context:
space:
mode:
authorKazu Hirata <kazu@google.com>2024-12-17 13:12:29 -0800
committerGitHub <noreply@github.com>2024-12-17 13:12:29 -0800
commit7f2fb8061e97ff21caa04b9c44cac2f599202232 (patch)
tree4f9c6849d161d7502ffb6999ab988ab90144da8b /llvm/unittests/ProfileData/MemProfTest.cpp
parent48c20e7106bb15398b55a13d0a2ec74cb51d055e (diff)
downloadllvm-7f2fb8061e97ff21caa04b9c44cac2f599202232.zip
llvm-7f2fb8061e97ff21caa04b9c44cac2f599202232.tar.gz
llvm-7f2fb8061e97ff21caa04b9c44cac2f599202232.tar.bz2
[memprof] Don't use Frame::hash or hashCallStacks in unit test (#119984)
This patch checks the result of YAML parsing at the level of MemProfRecord instead of IndexedMemProfRecord, thereby avoiding use of Frame::hash and hashCallStacks. This makes sense because we ultimately care about consumers like MemProfiler.cpp obtaining MemProfRecord correctly; IndexedMemProfData and hash values are just intermediaries. Once this patch lands, we call Frame::hash and hashCallStacks only when adding Frames or call stacks to their respective data structures. In other words, the hash functions are pretty much business internal to IndexedMemProfRecord.
Diffstat (limited to 'llvm/unittests/ProfileData/MemProfTest.cpp')
-rw-r--r--llvm/unittests/ProfileData/MemProfTest.cpp77
1 files changed, 30 insertions, 47 deletions
diff --git a/llvm/unittests/ProfileData/MemProfTest.cpp b/llvm/unittests/ProfileData/MemProfTest.cpp
index 2cb4725..2eb85d5 100644
--- a/llvm/unittests/ProfileData/MemProfTest.cpp
+++ b/llvm/unittests/ProfileData/MemProfTest.cpp
@@ -709,47 +709,33 @@ HeapProfileRecords:
YAMLReader.parse(YAMLData);
IndexedMemProfData MemProfData = YAMLReader.takeMemProfData();
- Frame F1(0x100, 11, 10, true);
- Frame F2(0x200, 22, 20, false);
- Frame F3(0x300, 33, 30, false);
- Frame F4(0x400, 44, 40, true);
- Frame F5(0x500, 55, 50, true);
- Frame F6(0x600, 66, 60, false);
- Frame F7(0x700, 77, 70, true);
- Frame F8(0x800, 88, 80, false);
-
- llvm::SmallVector<FrameId> CS1 = {F1.hash(), F2.hash()};
- llvm::SmallVector<FrameId> CS2 = {F3.hash(), F4.hash()};
- llvm::SmallVector<FrameId> CS3 = {F5.hash(), F6.hash()};
- llvm::SmallVector<FrameId> CS4 = {F7.hash(), F8.hash()};
-
- // Verify the entire contents of MemProfData.Frames.
- EXPECT_THAT(MemProfData.Frames,
- UnorderedElementsAre(Pair(F1.hash(), F1), Pair(F2.hash(), F2),
- Pair(F3.hash(), F3), Pair(F4.hash(), F4),
- Pair(F5.hash(), F5), Pair(F6.hash(), F6),
- Pair(F7.hash(), F7), Pair(F8.hash(), F8)));
-
- // Verify the entire contents of MemProfData.Frames.
- EXPECT_THAT(MemProfData.CallStacks,
- UnorderedElementsAre(Pair(hashCallStack(CS1), CS1),
- Pair(hashCallStack(CS2), CS2),
- Pair(hashCallStack(CS3), CS3),
- Pair(hashCallStack(CS4), CS4)));
-
// Verify the entire contents of MemProfData.Records.
ASSERT_THAT(MemProfData.Records, SizeIs(1));
- const auto &[GUID, Record] = MemProfData.Records.front();
+ const auto &[GUID, IndexedRecord] = MemProfData.Records.front();
EXPECT_EQ(GUID, 0xdeadbeef12345678ULL);
+
+ FrameIdConverter<decltype(MemProfData.Frames)> FrameIdConv(
+ MemProfData.Frames);
+ CallStackIdConverter<decltype(MemProfData.CallStacks)> CSIdConv(
+ MemProfData.CallStacks, FrameIdConv);
+ MemProfRecord Record = IndexedRecord.toMemProfRecord(CSIdConv);
+
ASSERT_THAT(Record.AllocSites, SizeIs(2));
- EXPECT_EQ(Record.AllocSites[0].CSId, hashCallStack(CS1));
+ EXPECT_THAT(
+ Record.AllocSites[0].CallStack,
+ ElementsAre(Frame(0x100, 11, 10, true), Frame(0x200, 22, 20, false)));
EXPECT_EQ(Record.AllocSites[0].Info.getAllocCount(), 777U);
EXPECT_EQ(Record.AllocSites[0].Info.getTotalSize(), 888U);
- EXPECT_EQ(Record.AllocSites[1].CSId, hashCallStack(CS2));
+ EXPECT_THAT(
+ Record.AllocSites[1].CallStack,
+ ElementsAre(Frame(0x300, 33, 30, false), Frame(0x400, 44, 40, true)));
EXPECT_EQ(Record.AllocSites[1].Info.getAllocCount(), 666U);
EXPECT_EQ(Record.AllocSites[1].Info.getTotalSize(), 555U);
- EXPECT_THAT(Record.CallSiteIds,
- ElementsAre(hashCallStack(CS3), hashCallStack(CS4)));
+ EXPECT_THAT(Record.CallSites,
+ ElementsAre(ElementsAre(Frame(0x500, 55, 50, true),
+ Frame(0x600, 66, 60, false)),
+ ElementsAre(Frame(0x700, 77, 70, true),
+ Frame(0x800, 88, 80, false))));
}
// Verify that the YAML parser accepts a GUID expressed as a function name.
@@ -769,24 +755,21 @@ HeapProfileRecords:
YAMLReader.parse(YAMLData);
IndexedMemProfData MemProfData = YAMLReader.takeMemProfData();
- Frame F1(0x100, 11, 10, true);
-
- llvm::SmallVector<FrameId> CS1 = {F1.hash()};
-
- // Verify the entire contents of MemProfData.Frames.
- EXPECT_THAT(MemProfData.Frames, UnorderedElementsAre(Pair(F1.hash(), F1)));
-
- // Verify the entire contents of MemProfData.Frames.
- EXPECT_THAT(MemProfData.CallStacks,
- UnorderedElementsAre(Pair(hashCallStack(CS1), CS1)));
-
// Verify the entire contents of MemProfData.Records.
ASSERT_THAT(MemProfData.Records, SizeIs(1));
- const auto &[GUID, Record] = MemProfData.Records.front();
+ const auto &[GUID, IndexedRecord] = MemProfData.Records.front();
EXPECT_EQ(GUID, IndexedMemProfRecord::getGUID("_Z3fooi"));
+
+ FrameIdConverter<decltype(MemProfData.Frames)> FrameIdConv(
+ MemProfData.Frames);
+ CallStackIdConverter<decltype(MemProfData.CallStacks)> CSIdConv(
+ MemProfData.CallStacks, FrameIdConv);
+ MemProfRecord Record = IndexedRecord.toMemProfRecord(CSIdConv);
+
ASSERT_THAT(Record.AllocSites, SizeIs(1));
- EXPECT_EQ(Record.AllocSites[0].CSId, hashCallStack(CS1));
- EXPECT_THAT(Record.CallSiteIds, IsEmpty());
+ EXPECT_THAT(Record.AllocSites[0].CallStack,
+ ElementsAre(Frame(0x100, 11, 10, true)));
+ EXPECT_THAT(Record.CallSites, IsEmpty());
}
template <typename T> std::string serializeInYAML(T &Val) {