Files
compute-runtime/runtime/os_interface/linux/drm_gem_close_worker.h
Artur Harasimiuk 40146291ad Update copyright headers
Updating files modified in 2018 only. Older files remain with old style
copyright header

Change-Id: Ic99f2e190ad74b4b7f2bd79dd7b9fa5fbe36ec92
Signed-off-by: Artur Harasimiuk <artur.harasimiuk@intel.com>
2018-09-20 18:02:35 +02:00

58 lines
1.1 KiB
C++

/*
* Copyright (C) 2017-2018 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#pragma once
#include <atomic>
#include <condition_variable>
#include <mutex>
#include <map>
#include <set>
#include <queue>
#include <cstdint>
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