diff --git a/Code/Framework/AzCore/AzCore/Task/TaskExecutor.cpp b/Code/Framework/AzCore/AzCore/Task/TaskExecutor.cpp index e8b4735243..293b88b2e6 100644 --- a/Code/Framework/AzCore/AzCore/Task/TaskExecutor.cpp +++ b/Code/Framework/AzCore/AzCore/Task/TaskExecutor.cpp @@ -355,24 +355,8 @@ namespace AZ m_workers[++m_lastSubmission % m_threadCount].Enqueue(&task); } - void TaskExecutor::Drain() - { - m_isDraining = true; - if (m_graphsRemaining == 0) - { - return; - } - m_drainSemaphore.acquire(); - } - void TaskExecutor::ReleaseGraph() { - uint64_t graphsRemaining = --m_graphsRemaining; - - if (graphsRemaining == 0 && m_isDraining) - { - m_drainSemaphore.release(); - m_isDraining = false; - } + --m_graphsRemaining; } } // namespace AZ diff --git a/Code/Framework/AzCore/AzCore/Task/TaskExecutor.h b/Code/Framework/AzCore/AzCore/Task/TaskExecutor.h index ad4c4b81c2..dc2fa5a4c8 100644 --- a/Code/Framework/AzCore/AzCore/Task/TaskExecutor.h +++ b/Code/Framework/AzCore/AzCore/Task/TaskExecutor.h @@ -76,9 +76,6 @@ namespace AZ void Submit(Internal::Task& task); - // Wait until tasks are cleared from the executor (note, does not prevent future tasks from being submitted) - // If this is used, it's expected to be used between frames to shutdown the engine - void Drain(); private: friend class Internal::TaskWorker; @@ -88,7 +85,5 @@ namespace AZ uint32_t m_threadCount = 0; AZStd::atomic m_lastSubmission; AZStd::atomic m_graphsRemaining; - AZStd::atomic m_isDraining; - AZStd::binary_semaphore m_drainSemaphore; }; } // namespace AZ diff --git a/Code/Framework/AzCore/Tests/TaskTests.cpp b/Code/Framework/AzCore/Tests/TaskTests.cpp index eeb523ae26..f2ca484df3 100644 --- a/Code/Framework/AzCore/Tests/TaskTests.cpp +++ b/Code/Framework/AzCore/Tests/TaskTests.cpp @@ -543,95 +543,6 @@ namespace UnitTest EXPECT_EQ(3 | 0b100000, x); } - - TEST_F(TaskGraphTestFixture, ExecutorDrainRetained) - { - bool drainDone = false; - AZStd::binary_semaphore taskStart; - AZStd::binary_semaphore threadLaunched; - AZStd::binary_semaphore threadFinished; - - TaskGraph graph; - auto a = graph.AddTask( - defaultTD, - [&] - { - taskStart.acquire(); - }); - - graph.SubmitOnExecutor(*m_executor); - - AZStd::thread drainThread{ [this, &drainDone, &threadLaunched, &threadFinished] - { - threadLaunched.release(); - m_executor->Drain(); - drainDone = true; - threadFinished.release(); - } }; - - - // Wait until our drain thread has launched - threadLaunched.acquire(); - - // The task itself hasn't started, so the drain should still be blocking - EXPECT_EQ(false, drainDone); - - // Allow the task to finish - taskStart.release(); - - // Wait for the drain thread to wrap up - threadFinished.acquire(); - - // We successfully drained the executor - EXPECT_EQ(true, drainDone); - - drainThread.join(); - } - - TEST_F(TaskGraphTestFixture, ExecutorDrainDetached) - { - bool drainDone = false; - AZStd::binary_semaphore taskStart; - AZStd::binary_semaphore threadLaunched; - AZStd::binary_semaphore threadFinished; - - TaskGraph graph; - auto a = graph.AddTask( - defaultTD, - [&] - { - taskStart.acquire(); - }); - graph.Detach(); - - graph.SubmitOnExecutor(*m_executor); - - AZStd::thread drainThread{ [this, &drainDone, &threadLaunched, &threadFinished] - { - threadLaunched.release(); - m_executor->Drain(); - drainDone = true; - threadFinished.release(); - } }; - - - // Wait until our drain thread has launched - threadLaunched.acquire(); - - // The task itself hasn't started, so the drain should still be blocking - EXPECT_EQ(false, drainDone); - - // Allow the task to finish - taskStart.release(); - - // Wait for the drain thread to wrap up - threadFinished.acquire(); - - // We successfully drained the executor - EXPECT_EQ(true, drainDone); - - drainThread.join(); - } } // namespace UnitTest #if defined(HAVE_BENCHMARK)