Files
compute-runtime/runtime/os_interface/linux/drm_gem_close_worker.h
Jablonski, Mateusz d4ab478bb6 Make gemCloseWorkerMode enum class
Change-Id: I6850ce0d52c52da80e08768f37c617158d8e1b0c
Signed-off-by: Jablonski, Mateusz <mateusz.jablonski@intel.com>
2019-10-31 10:08:52 +01:00

58 lines
1.1 KiB
C++

/*
* Copyright (C) 2017-2019 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#pragma once
#include <atomic>
#include <condition_variable>
#include <cstdint>
#include <map>
#include <mutex>
#include <queue>
#include <set>
namespace NEO {
class DrmMemoryManager;
class BufferObject;
class Thread;
enum class gemCloseWorkerMode {
gemCloseWorkerInactive,
gemCloseWorkerActive
};
class DrmGemCloseWorker {
public:
DrmGemCloseWorker(DrmMemoryManager &memoryManager);
~DrmGemCloseWorker();
DrmGemCloseWorker(const DrmGemCloseWorker &) = delete;
DrmGemCloseWorker &operator=(const DrmGemCloseWorker &) = delete;
void push(BufferObject *allocation);
void close(bool blocking);
bool isEmpty();
protected:
void close(BufferObject *workItem);
void closeThread();
static void *worker(void *arg);
bool active = true;
std::unique_ptr<Thread> thread;
std::queue<BufferObject *> queue;
std::atomic<uint32_t> workCount{0};
DrmMemoryManager &memoryManager;
std::mutex closeWorkerMutex;
std::condition_variable condition;
std::atomic<bool> workerDone{false};
};
} // namespace NEO