[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:
@@ -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 {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user