[memprof] Add IndexedMemProfData::addCallStack (#118920)

This patch adds a helper function to replace an idiom like:

  CallStackId CSId = hashCallStack(CallStack)
  MemProfData.CallStacks.try_emplace(CSId, CallStack);
  // Do something with CSId.
This commit is contained in:
Kazu Hirata
2024-12-06 12:10:11 -08:00
committed by GitHub
parent 131b7fe2b1
commit c5e4e8f87d
3 changed files with 18 additions and 14 deletions

View File

@@ -1029,6 +1029,18 @@ struct IndexedMemProfData {
Frames.try_emplace(Id, F);
return Id;
}
CallStackId addCallStack(ArrayRef<FrameId> CS) {
CallStackId CSId = hashCallStack(CS);
CallStacks.try_emplace(CSId, CS);
return CSId;
}
CallStackId addCallStack(SmallVector<FrameId> &&CS) {
CallStackId CSId = hashCallStack(CS);
CallStacks.try_emplace(CSId, std::move(CS));
return CSId;
}
};
struct FrameStat {

View File

@@ -500,8 +500,7 @@ Error RawMemProfReader::mapRawProfileToRecords() {
Callstack.append(Frames.begin(), Frames.end());
}
CallStackId CSId = hashCallStack(Callstack);
MemProfData.CallStacks.insert({CSId, Callstack});
CallStackId CSId = MemProfData.addCallStack(Callstack);
// We attach the memprof record to each function bottom-up including the
// first non-inline frame.
@@ -520,11 +519,8 @@ Error RawMemProfReader::mapRawProfileToRecords() {
// Some functions may have only callsite data and no allocation data. Here
// we insert a new entry for callsite data if we need to.
IndexedMemProfRecord &Record = MemProfData.Records[Id];
for (LocationPtr Loc : Locs) {
CallStackId CSId = hashCallStack(*Loc);
MemProfData.CallStacks.insert({CSId, *Loc});
Record.CallSiteIds.push_back(CSId);
}
for (LocationPtr Loc : Locs)
Record.CallSiteIds.push_back(MemProfData.addCallStack(*Loc));
}
return Error::success();
@@ -769,9 +765,7 @@ void YAMLMemProfReader::parse(StringRef YAMLData) {
IndexedCallStack.reserve(CallStack.size());
for (const Frame &F : CallStack)
IndexedCallStack.push_back(MemProfData.addFrame(F));
CallStackId CSId = hashCallStack(IndexedCallStack);
MemProfData.CallStacks.try_emplace(CSId, std::move(IndexedCallStack));
return CSId;
return MemProfData.addCallStack(std::move(IndexedCallStack));
};
for (const auto &[GUID, Record] : Doc.HeapProfileRecords) {

View File

@@ -434,8 +434,7 @@ TEST(MemProf, BaseMemProfReader) {
MemProfData.addFrame(F2);
llvm::SmallVector<FrameId> CallStack{F1.hash(), F2.hash()};
CallStackId CSId = hashCallStack(CallStack);
MemProfData.CallStacks.try_emplace(CSId, CallStack);
CallStackId CSId = MemProfData.addCallStack(std::move(CallStack));
IndexedMemProfRecord FakeRecord;
MemInfoBlock Block;
@@ -470,8 +469,7 @@ TEST(MemProf, BaseMemProfReaderWithCSIdMap) {
MemProfData.addFrame(F2);
llvm::SmallVector<FrameId> CallStack = {F1.hash(), F2.hash()};
CallStackId CSId = hashCallStack(CallStack);
MemProfData.CallStacks.insert({CSId, CallStack});
MemProfData.addCallStack(CallStack);
IndexedMemProfRecord FakeRecord;
MemInfoBlock Block;