20#include "pw_containers/inline_queue.h"
21#include "pw_function/function.h"
22#include "pw_metric/metric.h"
23#include "pw_span/span.h"
24#include "pw_status/status.h"
25#include "pw_sync/interrupt_spin_lock.h"
26#include "pw_sync/lock_annotations.h"
27#include "pw_sync/thread_notification.h"
28#include "pw_thread/thread_core.h"
30namespace pw::work_queue {
59 : stop_requested_(false), queue_(queue) {
60 min_queue_remaining_.Set(
static_cast<uint32_t
>(queue_capacity));
81 return InternalPushWork(std::move(work_item));
108 void Run() override PW_LOCKS_EXCLUDED(lock_);
109 Status InternalPushWork(WorkItem&& work_item) PW_LOCKS_EXCLUDED(lock_);
111 sync::InterruptSpinLock lock_;
112 bool stop_requested_ PW_GUARDED_BY(lock_);
113 InlineQueue<WorkItem>& queue_ PW_GUARDED_BY(lock_);
114 sync::ThreadNotification work_notification_;
123 PW_METRIC_GROUP(metrics_, "
pw::work_queue::
WorkQueue");
124 PW_METRIC(metrics_, max_queue_used_, "max_queue_used", 0u);
125 PW_METRIC(metrics_, min_queue_remaining_, "min_queue_remaining", 0u);
128template <
size_t kWorkQueueEntries>
Definition: inline_queue.h:43
Definition: work_queue.h:50
Status PushWork(WorkItem &&work_item)
Definition: work_queue.h:80
WorkQueue(InlineQueue< WorkItem > &queue, size_t queue_capacity)
Definition: work_queue.h:58
void CheckPushWork(WorkItem &&work_item)
Definition: work_queue.h:129
fit::function_impl< function_internal::config::kInlineCallableSize, !function_internal::config::kEnableDynamicAllocation, FunctionType, PW_FUNCTION_DEFAULT_ALLOCATOR_TYPE > Function
Definition: function.h:74
Provides basic helpers for reading and writing UTF-8 encoded strings.
Definition: alignment.h:27