Files
compute-runtime/runtime/event/event_builder.h
Jobczyk, Lukasz 2e8e6bdb18 Move majority of utilities to the core dir
Related-To: NEO-3677

Change-Id: If2e876028b765ad3ecf5f75db8755623b82955b8
Signed-off-by: Jobczyk, Lukasz <lukasz.jobczyk@intel.com>
2019-09-12 15:07:02 +02:00

67 lines
1.4 KiB
C++

/*
* Copyright (C) 2017-2019 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#pragma once
#include "core/utilities/arrayref.h"
#include "core/utilities/stackvec.h"
#include "CL/cl.h"
#include <type_traits>
namespace NEO {
class Event;
class EventBuilder {
public:
template <typename EventType, typename... ArgsT>
void create(ArgsT &&... args) {
event = new EventType(std::forward<ArgsT>(args)...);
}
EventBuilder() = default;
EventBuilder(const EventBuilder &) = delete;
EventBuilder &operator=(const EventBuilder &) = delete;
EventBuilder(EventBuilder &&) = delete;
EventBuilder &operator=(EventBuilder &&) = delete;
~EventBuilder();
Event *getEvent() const {
return event;
}
void addParentEvent(Event &newParentEvent);
void addParentEvent(Event *newParentEvent) {
if (newParentEvent != nullptr) {
addParentEvent(*newParentEvent);
}
}
void addParentEvents(ArrayRef<const cl_event> newParentEvents);
void finalize();
Event *finalizeAndRelease() {
finalize();
Event *retEvent = this->event;
this->event = nullptr;
finalized = false;
return retEvent;
}
protected:
void clear();
Event *event = nullptr;
bool finalized = false;
StackVec<Event *, 16> parentEvents;
bool doNotRegister = false;
};
} // namespace NEO