/* * Copyright (C) 2025 Intel Corporation * * SPDX-License-Identifier: MIT * */ #pragma once #include "shared/source/helpers/non_copyable_or_moveable.h" #include #include #include #include #include namespace NEO { class GraphicsAllocation; struct HostFunctionData; class IHostFunctionWorker : public NonCopyableAndNonMovableClass { public: IHostFunctionWorker(bool skipHostFunctionExecution, const std::function &downloadAllocationImpl, GraphicsAllocation *allocation, HostFunctionData *data); virtual ~IHostFunctionWorker() = 0; virtual void start() = 0; virtual void finish() = 0; virtual void submit() noexcept = 0; protected: MOCKABLE_VIRTUAL bool runHostFunction(std::stop_token st) noexcept; std::unique_ptr worker; std::mutex workerMutex; private: std::function downloadAllocationImpl; GraphicsAllocation *allocation = nullptr; HostFunctionData *data = nullptr; bool skipHostFunctionExecution = false; }; static_assert(NonCopyableAndNonMovable); } // namespace NEO