/* * Copyright (C) 2019-2021 Intel Corporation * * SPDX-License-Identifier: MIT * */ #pragma once #include #include #include #include namespace NEO { class MemoryManager; class CommandStreamReceiver; class Thread; class DirectSubmissionController { public: DirectSubmissionController(); virtual ~DirectSubmissionController(); void registerDirectSubmission(CommandStreamReceiver *csr); void unregisterDirectSubmission(CommandStreamReceiver *csr); void startControlling(); static bool isSupported(); protected: struct DirectSubmissionState { bool isStopped = false; uint32_t taskCount = 0u; }; static void *controlDirectSubmissionsState(void *self); void checkNewSubmissions(); std::unordered_map directSubmissions; std::mutex directSubmissionsMutex; std::unique_ptr directSubmissionControllingThread; std::atomic_bool keepControlling = true; std::atomic_bool runControlling = false; int timeout = 5; }; } // namespace NEO