diff options
| author | jacqueline <me@jacqueline.id.au> | 2024-01-17 15:31:23 +1100 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2024-01-17 15:31:23 +1100 |
| commit | 1f5249de6f7e81aa6ff2586e386f526676e67c81 (patch) | |
| tree | 5fcc9737e71b3b6b20b7156ea4e759b558f732a3 /src/database | |
| parent | 08d16e858075e66df1bae3fea9d955e1b6cb73a9 (diff) | |
| download | tangara-fw-1f5249de6f7e81aa6ff2586e386f526676e67c81.tar.gz | |
shift some long-lived allocs into spi ram
Diffstat (limited to 'src/database')
| -rw-r--r-- | src/database/include/tag_parser.hpp | 2 | ||||
| -rw-r--r-- | src/database/include/track.hpp | 2 | ||||
| -rw-r--r-- | src/database/tag_parser.cpp | 4 | ||||
| -rw-r--r-- | src/database/track.cpp | 7 |
4 files changed, 12 insertions, 3 deletions
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<TrackTags>> cache_; + util::LruCache<8, std::pmr::string, std::shared_ptr<TrackTags>> 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>; + 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<TrackTags> { libtags::Aux aux; - auto out = std::make_shared<TrackTags>(); + 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<TrackTags>(); + 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 <iomanip> #include <iostream> +#include <memory_resource> #include <sstream> #include <string> @@ -90,6 +91,12 @@ auto tagToString(const TagValue& val) -> std::string { return ""; } +auto TrackTags::create() -> std::shared_ptr<TrackTags> { + return std::allocate_shared<TrackTags, + std::pmr::polymorphic_allocator<TrackTags>>( + &memory::kSpiRamResource); +} + template <typename T> auto valueOrMonostate(std::optional<T> t) -> TagValue { if (t) { |
