From 1f5249de6f7e81aa6ff2586e386f526676e67c81 Mon Sep 17 00:00:00 2001 From: jacqueline Date: Wed, 17 Jan 2024 15:31:23 +1100 Subject: shift some long-lived allocs into spi ram --- src/database/include/tag_parser.hpp | 2 +- src/database/include/track.hpp | 2 ++ src/database/tag_parser.cpp | 4 ++-- src/database/track.cpp | 7 +++++++ 4 files changed, 12 insertions(+), 3 deletions(-) (limited to 'src/database') diff --git a/src/database/include/tag_parser.hpp b/src/database/include/tag_parser.hpp index 977c9afc..fe7a95f3 100644 --- a/src/database/include/tag_parser.hpp +++ b/src/database/include/tag_parser.hpp @@ -41,7 +41,7 @@ class TagParserImpl : public ITagParser { * cache should be slightly larger than any page sizes in the UI. */ std::mutex cache_mutex_; - util::LruCache<16, std::pmr::string, std::shared_ptr> cache_; + util::LruCache<8, std::pmr::string, std::shared_ptr> cache_; // We could also consider keeping caches of artist name -> std::string and // similar. This hasn't been done yet, as this isn't a common workload in diff --git a/src/database/include/track.hpp b/src/database/include/track.hpp index 610ab487..76b1c56e 100644 --- a/src/database/include/track.hpp +++ b/src/database/include/track.hpp @@ -74,6 +74,8 @@ auto tagToString(const TagValue&) -> std::string; */ class TrackTags { public: + static auto create() -> std::shared_ptr; + TrackTags() : encoding_(Container::kUnsupported), genres_(&memory::kSpiRamResource) {} diff --git a/src/database/tag_parser.cpp b/src/database/tag_parser.cpp index 0efe5804..a3a05a5c 100644 --- a/src/database/tag_parser.cpp +++ b/src/database/tag_parser.cpp @@ -168,7 +168,7 @@ auto TagParserImpl::ReadAndParseTags(const std::string& path) auto GenericTagParser::ReadAndParseTags(const std::string& path) -> std::shared_ptr { libtags::Aux aux; - auto out = std::make_shared(); + auto out = TrackTags::create(); aux.tags = out.get(); { auto lock = drivers::acquire_spi(); @@ -244,7 +244,7 @@ auto OpusTagParser::ReadAndParseTags(const std::string& path) return {}; } - auto out = std::make_shared(); + auto out = TrackTags::create(); out->encoding(Container::kOpus); for (const auto& pair : kVorbisIdToTag) { const char* tag = opus_tags_query(tags, pair.first, 0); diff --git a/src/database/track.cpp b/src/database/track.cpp index 58097cef..943606ce 100644 --- a/src/database/track.cpp +++ b/src/database/track.cpp @@ -8,6 +8,7 @@ #include #include +#include #include #include @@ -90,6 +91,12 @@ auto tagToString(const TagValue& val) -> std::string { return ""; } +auto TrackTags::create() -> std::shared_ptr { + return std::allocate_shared>( + &memory::kSpiRamResource); +} + template auto valueOrMonostate(std::optional t) -> TagValue { if (t) { -- cgit v1.2.3