1
0
Fork 0
forked from suyu/suyu

lm: Prevent redundant map lookups in Log()

We can perform the lookup and then do the contains check by checking the
end iterator. The benefit of this is that if we *do* find an entry, then
we aren't hashing into the map again to find it.

We can also get rid of an unused std::vector temporary while we're at
it.
This commit is contained in:
Lioncash 2021-04-23 09:24:19 -04:00
parent 6e2040c955
commit 5ba49f188b

View file

@ -95,7 +95,7 @@ private:
std::memcpy(&header, data.data(), sizeof(LogPacketHeader)); std::memcpy(&header, data.data(), sizeof(LogPacketHeader));
offset += sizeof(LogPacketHeader); offset += sizeof(LogPacketHeader);
LogPacketHeaderEntry entry{ const LogPacketHeaderEntry entry{
.pid = header.pid, .pid = header.pid,
.tid = header.tid, .tid = header.tid,
.severity = header.severity, .severity = header.severity,
@ -107,14 +107,15 @@ private:
std::memcpy(tmp.data(), data.data() + offset, tmp.size()); std::memcpy(tmp.data(), data.data() + offset, tmp.size());
entries[entry] = std::move(tmp); entries[entry] = std::move(tmp);
} else { } else {
const auto entry_iter = entries.find(entry);
// Append to existing entry // Append to existing entry
if (!entries.contains(entry)) { if (entry_iter == entries.cend()) {
LOG_ERROR(Service_LM, "Log entry does not exist!"); LOG_ERROR(Service_LM, "Log entry does not exist!");
return; return;
} }
std::vector<u8> tmp(data.size() - sizeof(LogPacketHeader));
auto& existing_entry = entries[entry]; auto& existing_entry = entry_iter->second;
const auto base = existing_entry.size(); const auto base = existing_entry.size();
existing_entry.resize(base + (data.size() - sizeof(LogPacketHeader))); existing_entry.resize(base + (data.size() - sizeof(LogPacketHeader)));
std::memcpy(existing_entry.data() + base, data.data() + offset, std::memcpy(existing_entry.data() + base, data.data() + offset,