From 223baa7e458b3f6db1fb5cf8e2d77235c68a3944 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Thu, 6 Jan 2022 16:04:46 -0800 Subject: [PATCH] Removes ProducerConsumerQueue.h and ConcurrentQueue.h from Gems/Vegetation Signed-off-by: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> --- .../Code/Source/Util/ConcurrentQueue.h | 80 ------------ .../Code/Source/Util/ProducerConsumerQueue.h | 119 ------------------ Gems/Vegetation/Code/vegetation_files.cmake | 2 - 3 files changed, 201 deletions(-) delete mode 100644 Gems/Vegetation/Code/Source/Util/ConcurrentQueue.h delete mode 100644 Gems/Vegetation/Code/Source/Util/ProducerConsumerQueue.h diff --git a/Gems/Vegetation/Code/Source/Util/ConcurrentQueue.h b/Gems/Vegetation/Code/Source/Util/ConcurrentQueue.h deleted file mode 100644 index 38a816808d..0000000000 --- a/Gems/Vegetation/Code/Source/Util/ConcurrentQueue.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#pragma once - -#include -#include -#include - -namespace Vegetation -{ - /** - * Manages a light weight producer consumer storage container - */ - template > - class ConcurrentQueue final - { - public: - AZ_INLINE QueueType& ClaimQueue() - { - int lastQueue = Flip(); - return m_queueData[lastQueue]; - } - - AZ_INLINE QueueType& ClaimQueueNoSort() - { - int lastQueue = FlipNoSort(); - return m_queueData[lastQueue]; - } - - AZ_INLINE bool IsCurrentEmpty() const - { - return m_queueData[m_currentQueueIndex].empty(); - } - - AZ_INLINE void EmplaceBack(TItem item) - { - m_queueData[m_currentQueueIndex].emplace_back(AZStd::move(item)); - } - - AZ_INLINE void CopyBack(TItem item) - { - m_queueData[m_currentQueueIndex].push_back(item); - } - - AZ_INLINE void Insert(TItem item) - { - m_queueData[m_currentQueueIndex].insert(item); - } - - protected: - AZ_INLINE int Flip() - { - // get rid of possible duplicates - int processIndex = FlipNoSort(); - m_queueData[processIndex].sort(); - m_queueData[processIndex].unique(); - return processIndex; - } - - AZ_INLINE int FlipNoSort() - { - int processIndex = m_currentQueueIndex; - { - AZStd::lock_guard lock(m_queueMutex); - m_currentQueueIndex = 1 - m_currentQueueIndex; - } - return processIndex; - } - - private: - QueueType m_queueData[2]; - AZStd::atomic_int m_currentQueueIndex{0}; - AZStd::recursive_mutex m_queueMutex; - }; -} diff --git a/Gems/Vegetation/Code/Source/Util/ProducerConsumerQueue.h b/Gems/Vegetation/Code/Source/Util/ProducerConsumerQueue.h deleted file mode 100644 index 55e6385b93..0000000000 --- a/Gems/Vegetation/Code/Source/Util/ProducerConsumerQueue.h +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#pragma once - -#include -#include -#include -#include -#include "ConcurrentQueue.h" - -namespace Vegetation -{ - /** - * A simple producer-consumer class to handle dual-threaded working queues - */ - template , typename ConsumerQueueType = AZStd::list> - class ProducerConsumerQueue final - { - public: - AZ_INLINE void EmplaceBack(TItem item) - { - m_producerQueue.EmplaceBack(AZStd::move(item)); - } - - AZ_INLINE void CopyBack(TItem item) - { - m_producerQueue.CopyBack(item); - } - - AZ_INLINE bool IsEmpty() const - { - if (m_producerQueue.IsCurrentEmpty()) - { - AZStd::lock_guard lock(m_consumerQueueMutex); - return m_consumerQueue.empty(); - } - return false; - } - - using ItemFunc = AZStd::function; - using ContinueFunc = AZStd::function; - - // on ItemFunc return TRUE, remove from consumer queue - AZ_INLINE void Consume(ItemFunc consumeItemFunc, ContinueFunc continueFunc) - { - if (CanConsume()) - { - PrepareConsumer(); - } - - // attempt to consume the items - AZStd::lock_guard lock(m_consumerQueueMutex); - auto itItem = m_consumerQueue.begin(); - while (itItem != m_consumerQueue.end()) - { - if (consumeItemFunc(*itItem)) - { - itItem = m_consumerQueue.erase(itItem); - } - else - { - ++itItem; - } - if (!continueFunc()) - { - break; - } - } - } - - // on ItemFunc return TRUE, stop processing - AZ_INLINE void Process(ItemFunc processItemFunc) - { - if (CanConsume()) - { - PrepareConsumer(); - } - - // process the locked queue - AZStd::lock_guard lock(m_consumerQueueMutex); - auto itItem = m_consumerQueue.begin(); - while (itItem != m_consumerQueue.end()) - { - if (processItemFunc(*itItem)) - { - break; - } - ++itItem; - } - } - - protected: - AZ_INLINE bool CanConsume() const - { - return !m_producerQueue.IsCurrentEmpty(); - } - - AZ_INLINE void PrepareConsumer() - { - AZStd::lock_guard lock(m_consumerQueueMutex); - auto& itemList = m_producerQueue.ClaimQueueNoSort(); - while (!itemList.empty()) - { - m_consumerQueue.emplace_back(AZStd::move(itemList.back())); - itemList.pop_back(); - } - } - - private: - ProducerQueueType m_producerQueue; - ConsumerQueueType m_consumerQueue; - mutable AZStd::recursive_mutex m_consumerQueueMutex; - }; -} diff --git a/Gems/Vegetation/Code/vegetation_files.cmake b/Gems/Vegetation/Code/vegetation_files.cmake index b839222b19..b4e90cab97 100644 --- a/Gems/Vegetation/Code/vegetation_files.cmake +++ b/Gems/Vegetation/Code/vegetation_files.cmake @@ -87,8 +87,6 @@ set(FILES Source/Components/SurfaceMaskFilterComponent.h Source/Components/SurfaceSlopeFilterComponent.cpp Source/Components/SurfaceSlopeFilterComponent.h - Source/Util/ConcurrentQueue.h - Source/Util/ProducerConsumerQueue.h Source/Debugger/AreaDebugComponent.cpp Source/Debugger/AreaDebugComponent.h Source/Debugger/DebugComponent.cpp