compute-runtime/runtime/os_interface/linux/drm_gem_close_worker.h

58 lines
1.1 KiB
C
Raw Normal View History

/*
* 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 OCLRT {
class DrmMemoryManager;
class BufferObject;
class Thread;
enum 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 OCLRT