41 const char*
reason =
"within-budget";
74 && policy.shed_opportunistic_on_overload) {
78 && policy.shed_background_on_overload) {
83 const std::uint64_t reserve =
85 ? policy.critical_audio_reserve
87 const bool has_budget =
88 request.remaining_budget >= reserve
107 , remaining_budget_(budget)
113 std::uint64_t estimated_cost,
114 bool required =
false) noexcept {
117 request.estimated_cost = estimated_cost;
118 request.remaining_budget = remaining_budget_;
119 request.required = required;
120 request.overload_active = overload_active_;
123 record(decision.action, estimated_cost);
135 const auto previous = remaining_budget_;
136 remaining_budget_ += budget;
137 if (remaining_budget_ < previous) {
138 remaining_budget_ = std::numeric_limits<std::uint64_t>::max();
140 stats_.remaining_budget = remaining_budget_;
149 > std::numeric_limits<std::uint64_t>::max() - estimated_cost) {
154 if (remaining_budget_ >= estimated_cost) {
155 remaining_budget_ -= estimated_cost;
157 remaining_budget_ = 0;
161 ++stats_.defer_count;
167 ++stats_.bypass_count;
170 stats_.remaining_budget = remaining_budget_;
173 RuntimeBudgetPolicy policy_{};
174 std::uint64_t remaining_budget_ = 0;
175 bool overload_active_ =
false;
176 RuntimeBudgetFrameStats stats_{};
std::uint64_t remaining_budget() const noexcept
Definition budget_policy.hpp:127
void set_overload_active(bool active) noexcept
Definition budget_policy.hpp:132
bool overload_active() const noexcept
Definition budget_policy.hpp:128
RuntimeBudgetDecision evaluate(RuntimeWorkLane lane, std::uint64_t estimated_cost, bool required=false) noexcept
Definition budget_policy.hpp:112
const RuntimeBudgetFrameStats & stats() const noexcept
Definition budget_policy.hpp:130
void add_budget(std::uint64_t budget) noexcept
Definition budget_policy.hpp:134
RuntimeBudgetFrame(std::uint64_t budget, RuntimeBudgetPolicy policy={}, bool overload_active=false) noexcept
Definition budget_policy.hpp:103
const RuntimeBudgetPolicy & policy() const noexcept
Definition budget_policy.hpp:129
Definition generated_event_source.hpp:33
RuntimeBudgetAction
Definition budget_policy.hpp:18
@ Bypass
Definition budget_policy.hpp:22
@ Defer
Definition budget_policy.hpp:20
@ Run
Definition budget_policy.hpp:19
@ Shed
Definition budget_policy.hpp:21
RuntimeBudgetDecision evaluate_runtime_budget(const RuntimeBudgetRequest &request, const RuntimeBudgetPolicy &policy={}) noexcept
Definition budget_policy.hpp:65
const char * to_string(RuntimeBudgetAction action) noexcept
Definition budget_policy.hpp:55
RuntimeWorkLane
Definition budget_policy.hpp:11
@ Interactive
Definition budget_policy.hpp:13
@ Opportunistic
Definition budget_policy.hpp:15
@ Background
Definition budget_policy.hpp:14
@ CriticalAudio
Definition budget_policy.hpp:12
Definition budget_policy.hpp:39
RuntimeBudgetAction action
Definition budget_policy.hpp:40
bool should_run() const noexcept
Definition budget_policy.hpp:43
const char * reason
Definition budget_policy.hpp:41
Definition budget_policy.hpp:46
std::uint64_t consumed_budget
Definition budget_policy.hpp:51
std::uint32_t shed_count
Definition budget_policy.hpp:49
std::uint64_t remaining_budget
Definition budget_policy.hpp:52
std::uint32_t bypass_count
Definition budget_policy.hpp:50
std::uint32_t run_count
Definition budget_policy.hpp:47
std::uint32_t defer_count
Definition budget_policy.hpp:48
Definition budget_policy.hpp:25
bool shed_opportunistic_on_overload
Definition budget_policy.hpp:28
std::uint64_t critical_audio_reserve
Definition budget_policy.hpp:26
bool shed_background_on_overload
Definition budget_policy.hpp:27
Definition budget_policy.hpp:31
std::uint64_t estimated_cost
Definition budget_policy.hpp:33
bool required
Definition budget_policy.hpp:35
RuntimeWorkLane lane
Definition budget_policy.hpp:32
bool overload_active
Definition budget_policy.hpp:36
std::uint64_t remaining_budget
Definition budget_policy.hpp:34