// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once #include "SynchronizationMechanism.hpp" #include #include #include #include #include namespace service::gui { class DrawCommandsQueue { public: using CommandList = std::list>; struct QueueItem { CommandList commands; ::gui::RefreshModes refreshMode = ::gui::RefreshModes::GUI_REFRESH_FAST; }; using QueueContainer = std::vector; explicit DrawCommandsQueue( std::size_t expectedSize, std::unique_ptr &&synchronization = getFreeRtosSynchronizationMechanism()); void enqueue(QueueItem &&item); [[nodiscard]] auto dequeue() -> QueueItem; [[nodiscard]] auto getMaxRefreshModeAndClear() -> ::gui::RefreshModes; void clear(); [[nodiscard]] auto size() const noexcept -> QueueContainer::size_type; private: QueueContainer queue; mutable cpp_freertos::MutexStandard queueMutex; std::unique_ptr synchronization; }; } // namespace service::gui