diff options
| author | 2021-04-23 09:24:19 -0400 | |
|---|---|---|
| committer | 2021-04-23 09:24:21 -0400 | |
| commit | 5ba49f188bf39cdfc71a6b78d7d846b4b0725dc3 (patch) | |
| tree | 39e6a9f9e0310bd98c24a739b9ad0bb757c9637b /src/core/hle/service/lm | |
| parent | lm: Resolve -Wextra-semi warning (diff) | |
| download | yuzu-5ba49f188bf39cdfc71a6b78d7d846b4b0725dc3.tar.gz yuzu-5ba49f188bf39cdfc71a6b78d7d846b4b0725dc3.tar.xz yuzu-5ba49f188bf39cdfc71a6b78d7d846b4b0725dc3.zip | |
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.
Diffstat (limited to 'src/core/hle/service/lm')
| -rw-r--r-- | src/core/hle/service/lm/lm.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/core/hle/service/lm/lm.cpp b/src/core/hle/service/lm/lm.cpp index 70f5272af..b311ad300 100644 --- a/src/core/hle/service/lm/lm.cpp +++ b/src/core/hle/service/lm/lm.cpp | |||
| @@ -95,7 +95,7 @@ private: | |||
| 95 | std::memcpy(&header, data.data(), sizeof(LogPacketHeader)); | 95 | std::memcpy(&header, data.data(), sizeof(LogPacketHeader)); |
| 96 | offset += sizeof(LogPacketHeader); | 96 | offset += sizeof(LogPacketHeader); |
| 97 | 97 | ||
| 98 | LogPacketHeaderEntry entry{ | 98 | const LogPacketHeaderEntry entry{ |
| 99 | .pid = header.pid, | 99 | .pid = header.pid, |
| 100 | .tid = header.tid, | 100 | .tid = header.tid, |
| 101 | .severity = header.severity, | 101 | .severity = header.severity, |
| @@ -107,14 +107,15 @@ private: | |||
| 107 | std::memcpy(tmp.data(), data.data() + offset, tmp.size()); | 107 | std::memcpy(tmp.data(), data.data() + offset, tmp.size()); |
| 108 | entries[entry] = std::move(tmp); | 108 | entries[entry] = std::move(tmp); |
| 109 | } else { | 109 | } else { |
| 110 | const auto entry_iter = entries.find(entry); | ||
| 111 | |||
| 110 | // Append to existing entry | 112 | // Append to existing entry |
| 111 | if (!entries.contains(entry)) { | 113 | if (entry_iter == entries.cend()) { |
| 112 | LOG_ERROR(Service_LM, "Log entry does not exist!"); | 114 | LOG_ERROR(Service_LM, "Log entry does not exist!"); |
| 113 | return; | 115 | return; |
| 114 | } | 116 | } |
| 115 | std::vector<u8> tmp(data.size() - sizeof(LogPacketHeader)); | ||
| 116 | 117 | ||
| 117 | auto& existing_entry = entries[entry]; | 118 | auto& existing_entry = entry_iter->second; |
| 118 | const auto base = existing_entry.size(); | 119 | const auto base = existing_entry.size(); |
| 119 | existing_entry.resize(base + (data.size() - sizeof(LogPacketHeader))); | 120 | existing_entry.resize(base + (data.size() - sizeof(LogPacketHeader))); |
| 120 | std::memcpy(existing_entry.data() + base, data.data() + offset, | 121 | std::memcpy(existing_entry.data() + base, data.data() + offset, |