| // | |
| // Copyright 2016 The ANGLE Project Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| // | |
| // WorkerThread_unittest: | |
| // Simple tests for the worker thread class. | |
| #include <array> | |
| #include <gtest/gtest.h> | |
| #include "libANGLE/WorkerThread.h" | |
| using namespace angle; | |
| namespace | |
| { | |
| template <typename T> | |
| class WorkerPoolTest : public ::testing::Test | |
| { | |
| public: | |
| T workerPool = {4}; | |
| }; | |
| #if (ANGLE_STD_ASYNC_WORKERS == ANGLE_ENABLED) | |
| using WorkerPoolTypes = ::testing::Types<priv::AsyncWorkerPool, priv::SingleThreadedWorkerPool>; | |
| #else | |
| using WorkerPoolTypes = ::testing::Types<priv::SingleThreadedWorkerPool>; | |
| #endif // (ANGLE_STD_ASYNC_WORKERS == ANGLE_ENABLED) | |
| TYPED_TEST_CASE(WorkerPoolTest, WorkerPoolTypes); | |
| // Tests simple worker pool application. | |
| TYPED_TEST(WorkerPoolTest, SimpleTask) | |
| { | |
| class TestTask : public Closure | |
| { | |
| public: | |
| void operator()() override { fired = true; } | |
| bool fired = false; | |
| }; | |
| std::array<TestTask, 4> tasks; | |
| std::array<typename TypeParam::WaitableEventType, 4> waitables = {{ | |
| this->workerPool.postWorkerTask(&tasks[0]), this->workerPool.postWorkerTask(&tasks[1]), | |
| this->workerPool.postWorkerTask(&tasks[2]), this->workerPool.postWorkerTask(&tasks[3]), | |
| }}; | |
| TypeParam::WaitableEventType::WaitMany(&waitables); | |
| for (const auto &task : tasks) | |
| { | |
| EXPECT_TRUE(task.fired); | |
| } | |
| } | |
| } // anonymous namespace |