ErrorOr<std::pair<StringRef, MMapInfo>> parseMMapEvent();
/// Parse PERF_RECORD_FORK event.
- Optional<ForkInfo> parseForkEvent();
+ std::optional<ForkInfo> parseForkEvent();
/// Parse 'PERF_RECORD_COMM exec'. Don't consume the string.
- Optional<int32_t> parseCommExecEvent();
+ std::optional<int32_t> parseCommExecEvent();
/// Parse the full output generated by `perf script --show-mmap-events`
/// to generate mapping between binary files and their memory mappings for
std::error_code parseTaskEvents();
/// Parse a single pair of binary full path and associated build-id
- Optional<std::pair<StringRef, StringRef>> parseNameBuildIDPair();
+ std::optional<std::pair<StringRef, StringRef>> parseNameBuildIDPair();
/// Coordinate reading and parsing of pre-aggregated file
///
/// Parse the output generated by "perf buildid-list" to extract build-ids
/// and return a file name matching a given \p FileBuildID.
- Optional<StringRef> getFileNameForBuildID(StringRef FileBuildID);
+ std::optional<StringRef> getFileNameForBuildID(StringRef FileBuildID);
};
} // namespace bolt
} // namespace llvm
FileBuf = std::move(*MB);
ParsingBuf = FileBuf->getBuffer();
- Optional<StringRef> FileName = getFileNameForBuildID(FileBuildID);
+ std::optional<StringRef> FileName = getFileNameForBuildID(FileBuildID);
if (!FileName) {
if (hasAllBuildIDs()) {
errs() << "PERF2BOLT-ERROR: failed to match build-id from perf output. "
outs() << "\n";
}
-Optional<int32_t> DataAggregator::parseCommExecEvent() {
+std::optional<int32_t> DataAggregator::parseCommExecEvent() {
size_t LineEnd = ParsingBuf.find_first_of("\n");
if (LineEnd == StringRef::npos) {
reportError("expected rest of line");
}
namespace {
-Optional<uint64_t> parsePerfTime(const StringRef TimeStr) {
+std::optional<uint64_t> parsePerfTime(const StringRef TimeStr) {
const StringRef SecTimeStr = TimeStr.split('.').first;
const StringRef USecTimeStr = TimeStr.split('.').second;
uint64_t SecTime;
}
}
-Optional<DataAggregator::ForkInfo> DataAggregator::parseForkEvent() {
+std::optional<DataAggregator::ForkInfo> DataAggregator::parseForkEvent() {
while (checkAndConsumeFS()) {
}
const StringRef TimeStr =
Line.substr(0, Pos).rsplit(':').first.rsplit(FieldSeparator).second;
- if (Optional<uint64_t> TimeRes = parsePerfTime(TimeStr)) {
+ if (std::optional<uint64_t> TimeRes = parsePerfTime(TimeStr)) {
FI.Time = *TimeRes;
}
const StringRef TimeStr =
Line.substr(0, Pos).rsplit(':').first.rsplit(FieldSeparator).second;
- if (Optional<uint64_t> TimeRes = parsePerfTime(TimeStr))
+ if (std::optional<uint64_t> TimeRes = parsePerfTime(TimeStr))
ParsedInfo.Time = *TimeRes;
Line = Line.drop_front(Pos);
TimerGroupDesc, opts::TimeAggregator);
while (hasData()) {
- if (Optional<int32_t> CommInfo = parseCommExecEvent()) {
+ if (std::optional<int32_t> CommInfo = parseCommExecEvent()) {
// Remove forked child that ran execve
auto MMapInfoIter = BinaryMMapInfo.find(*CommInfo);
if (MMapInfoIter != BinaryMMapInfo.end() && MMapInfoIter->second.Forked)
continue;
}
- Optional<ForkInfo> ForkInfo = parseForkEvent();
+ std::optional<ForkInfo> ForkInfo = parseForkEvent();
if (!ForkInfo)
continue;
return std::error_code();
}
-Optional<std::pair<StringRef, StringRef>>
+std::optional<std::pair<StringRef, StringRef>>
DataAggregator::parseNameBuildIDPair() {
while (checkAndConsumeFS()) {
}
return !HasInvalidEntries;
}
-Optional<StringRef>
+std::optional<StringRef>
DataAggregator::getFileNameForBuildID(StringRef FileBuildID) {
const StringRef SavedParsingBuf = ParsingBuf;
StringRef FileName;
while (hasData()) {
- Optional<std::pair<StringRef, StringRef>> IDPair = parseNameBuildIDPair();
+ std::optional<std::pair<StringRef, StringRef>> IDPair =
+ parseNameBuildIDPair();
if (!IDPair) {
consumeRestOfLine();
continue;