Просмотр исходного кода

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.
Lioncash 5 лет назад
Родитель
Сommit
5ba49f188b
1 измененных файлов с 5 добавлено и 4 удалено
  1. 5 4
      src/core/hle/service/lm/lm.cpp

+ 5 - 4
src/core/hle/service/lm/lm.cpp

@@ -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,