Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
paragraph_cache.hpp
Go to the documentation of this file.
1#pragma once
2
37
38#ifdef PULP_HAS_SKIA
39
40#include <cstddef>
41#include <cstdint>
42#include <functional>
43#include <string_view>
44
45namespace pulp::canvas {
46
47class ParagraphCache {
48 public:
49 static ParagraphCache& instance();
50
51 struct Stats {
52 std::uint64_t hits = 0;
53 std::uint64_t builds = 0;
54 std::uint64_t evictions = 0;
55 std::uint64_t invalidations = 0;
56 std::size_t entries = 0;
57 std::size_t protected_entries = 0;
58 std::size_t bytes = 0;
59 std::size_t max_entries = 0;
60 std::size_t max_bytes = 0;
61 };
62 Stats stats() const;
63 void reset_stats();
64
66 void clear();
67
70 void set_enabled(bool enabled);
71 bool enabled() const;
72
74 void set_limits(std::size_t max_entries, std::size_t max_bytes);
75
79 using BuildObserver = std::function<void(std::string_view text)>;
80 void set_build_observer(BuildObserver observer);
81
84 static std::size_t estimated_entry_bytes(std::size_t text_bytes) noexcept;
85
86 // About 1000 short labels fill 16 MiB, so the two bounds bind for short and
87 // long text respectively.
88 static constexpr std::size_t kDefaultMaxEntries = 1024;
89 static constexpr std::size_t kDefaultMaxBytes = 16u * 1024u * 1024u;
90
91 private:
92 ParagraphCache() = default;
93};
94
95} // namespace pulp::canvas
96
97#endif // PULP_HAS_SKIA
Definition affine_transform.hpp:24