Skip to content

Commit

Permalink
Store Sink children in a vector for better performance
Browse files Browse the repository at this point in the history
Signed-off-by: Pavel Artsishevsky <polter.rnd@gmail.com>
  • Loading branch information
polter-rnd committed Nov 27, 2024
1 parent f3f2dd3 commit f6adc09
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 9 deletions.
8 changes: 8 additions & 0 deletions .clang-tidy
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,14 @@ CheckOptions:
value: CamelCase
- key: readability-identifier-naming.TemplateParameterCase
value: CamelCase
- key: readability-identifier-length.MinimumParameterNameLength
value: 2
- key: readability-identifier-length.MinimumVariableNameLength
value: 2
- key: cppcoreguidelines-avoid-magic-numbers.IgnorePowersOf2IntegerValues
value: true
- key: readability-magic-numbers.IgnorePowersOf2IntegerValues
value: true
# Workaround for https://github.com/llvm/llvm-project/issues/46097
- key: readability-identifier-naming.TypeTemplateParameterIgnoredRegexp
value: expr-type
16 changes: 9 additions & 7 deletions include/slimlog/sink-inl.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@
#include <string_view>
#include <tuple>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>

namespace SlimLog {

Expand Down Expand Up @@ -139,14 +139,16 @@ template<typename Logger, typename ThreadingPolicy>
auto SinkDriver<Logger, ThreadingPolicy>::add_child(SinkDriver* child) -> void
{
const typename ThreadingPolicy::WriteLock lock(m_mutex);
m_children.insert(child);
m_children.push_back(child);
}

template<typename Logger, typename ThreadingPolicy>
auto SinkDriver<Logger, ThreadingPolicy>::remove_child(SinkDriver* child) -> void
{
const typename ThreadingPolicy::WriteLock lock(m_mutex);
m_children.erase(child);
if (auto it = std::find(m_children.begin(), m_children.end(), child); it != m_children.end()) {
m_children.erase(it);
}
}

template<typename Logger, typename ThreadingPolicy>
Expand Down Expand Up @@ -192,16 +194,16 @@ auto SinkDriver<Logger, ThreadingPolicy>::update_effective_sinks(SinkDriver* dri
// Move to the next sibling or parent's sibling
SinkDriver* prev = driver;
while (parent && !next) {
if (auto prev_it = parent->m_children.find(prev);
std::distance(prev_it, parent->m_children.end()) > 1) {
next = *std::next(prev_it);
if (auto it = std::find(parent->m_children.begin(), parent->m_children.end(), prev);
std::distance(it, parent->m_children.end()) > 1) {
next = *std::next(it);
}
prev = parent;
parent = parent->m_parent != this ? parent->m_parent : nullptr;
}
} else {
// Nove to next level
next = *driver->m_children.begin();
next = driver->m_children.front();
}

return next;
Expand Down
4 changes: 2 additions & 2 deletions include/slimlog/sink.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@
#include <string_view>
#include <type_traits>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>

namespace SlimLog {

Expand Down Expand Up @@ -359,7 +359,7 @@ class SinkDriver final {

const Logger* m_logger;
SinkDriver* m_parent;
std::unordered_set<SinkDriver*> m_children;
std::vector<SinkDriver*> m_children;
std::unordered_map<Sink<Logger>*, const Logger*> m_effective_sinks;
std::unordered_map<std::shared_ptr<Sink<Logger>>, bool> m_sinks;
mutable ThreadingPolicy::Mutex m_mutex;
Expand Down

0 comments on commit f6adc09

Please sign in to comment.