Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
gpu_audio_provider_pool.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <cstddef>
4#include <cstdint>
5#include <memory>
6#include <string>
7
9
10namespace pulp::gpu_audio {
11
12namespace detail {
13struct GpuAudioProviderPoolTestAccess;
14class WaveNetRealtimeChannel;
15} // namespace detail
16
41 public:
42 struct Config {
44 std::uint64_t keep_warm_ns = 30'000'000'000;
47 std::uint32_t capacity = 4;
51 std::uint64_t release_budget_ns = 250'000'000;
52 };
53 struct Stats {
54 std::uint64_t hits = 0; // prepare() borrowed a warm provider
55 std::uint64_t misses = 0; // prepare() found no matching provider
56 std::uint64_t returned = 0; // release() kept a provider warm
57 std::uint64_t evictions = 0; // providers destroyed by age, capacity or clear()
58 std::uint32_t warm_entries = 0; // providers held now
59 };
60
62 explicit GpuAudioProviderPool(const Config& config);
69
71 void evict_expired() noexcept;
73 void clear() noexcept;
74 Stats stats() const noexcept;
75
76 private:
79 // Node-facing. A null result is a miss; the caller creates a provider.
80 // `provider_key` names the provider kind and revision; providers found
81 // lost on the way are released within `release_budget_ns` in total (zero:
82 // Config::release_budget_ns).
83 std::unique_ptr<detail::WaveNetRealtimeChannel>
84 acquire(const GpuWaveNetSession::Config&, const std::string& provider_key,
85 std::uint64_t release_budget_ns) noexcept;
86 // Takes a drained, resumable channel; false hands it back to the caller.
87 bool give(const GpuWaveNetSession::Config&, const std::string& provider_key,
88 std::unique_ptr<detail::WaveNetRealtimeChannel>&) noexcept;
89
90 struct Impl;
91 std::unique_ptr<Impl> impl_;
92};
93
94} // namespace pulp::gpu_audio
GpuAudioProviderPool(GpuAudioProviderPool &&)=delete
GpuAudioProviderPool(const Config &config)
void clear() noexcept
Destroys every warm provider.
~GpuAudioProviderPool()
Destroys every warm provider.
GpuAudioProviderPool(const GpuAudioProviderPool &)=delete
friend class GpuWaveNetRealtimeNode
Definition gpu_audio_provider_pool.hpp:77
void evict_expired() noexcept
Destroys providers held longer than keep_warm_ns.
GpuAudioProviderPool & operator=(const GpuAudioProviderPool &)=delete
GpuAudioProviderPool & operator=(GpuAudioProviderPool &&)=delete
friend struct detail::GpuAudioProviderPoolTestAccess
Definition gpu_audio_provider_pool.hpp:78
A prepared, one-stream shared-memory WaveNet session.
Definition gpu_wavenet.hpp:121
Definition gpu_audio_node.hpp:78
Definition flow_pans.hpp:19
STL namespace.
Definition gpu_audio_provider_pool.hpp:42
std::uint64_t release_budget_ns
Budget for releasing each evicted provider.
Definition gpu_audio_provider_pool.hpp:51
std::uint32_t capacity
Warm providers kept at once; returning one more evicts the least recently returned.
Definition gpu_audio_provider_pool.hpp:47
std::uint64_t keep_warm_ns
How long a returned provider stays warm before eviction.
Definition gpu_audio_provider_pool.hpp:44
Definition gpu_audio_provider_pool.hpp:53
std::uint64_t hits
Definition gpu_audio_provider_pool.hpp:54
std::uint64_t misses
Definition gpu_audio_provider_pool.hpp:55
std::uint32_t warm_entries
Definition gpu_audio_provider_pool.hpp:58
std::uint64_t returned
Definition gpu_audio_provider_pool.hpp:56
std::uint64_t evictions
Definition gpu_audio_provider_pool.hpp:57