Sysman for Windows: Adding break from Listen.
Breaking from the Listen call via registerEvents(0). Signed-off-by: Daniel Enriquez <daniel.enriquez.montanez@intel.com>
This commit is contained in:
parent
0aa6ec777c
commit
b604ce4da5
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2020 Intel Corporation
|
||||
* Copyright (C) 2020-2021 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
|
@ -44,6 +44,8 @@ void WddmEventsImp::unregisterEvents() {
|
|||
KmdSysman::RequestProperty request;
|
||||
KmdSysman::ResponseProperty response;
|
||||
|
||||
SetEvent(exitHandle);
|
||||
|
||||
request.commandId = KmdSysman::Command::UnregisterEvent;
|
||||
request.componentId = KmdSysman::Component::InterfaceProperties;
|
||||
request.dataSize = sizeof(HANDLE);
|
||||
|
@ -89,6 +91,7 @@ ze_result_t WddmEventsImp::eventRegister(zes_event_type_flags_t events) {
|
|||
|
||||
bool WddmEventsImp::eventListen(zes_event_type_flags_t &pEvent, uint32_t timeout) {
|
||||
HANDLE events[MAXIMUM_WAIT_OBJECTS];
|
||||
pEvent = 0;
|
||||
|
||||
if (eventList.size() == 0) {
|
||||
return false;
|
||||
|
@ -98,9 +101,19 @@ bool WddmEventsImp::eventListen(zes_event_type_flags_t &pEvent, uint32_t timeout
|
|||
events[i] = eventList[i].windowsHandle;
|
||||
}
|
||||
|
||||
uint32_t signaledEvent = WaitForMultipleObjects(static_cast<uint32_t>(eventList.size()), events, FALSE, timeout);
|
||||
events[eventList.size()] = exitHandle;
|
||||
|
||||
// Setting the last handle for the exit handle, then the exit handle is signaled, it breaks from the wait.
|
||||
uint32_t signaledEvent = WaitForMultipleObjects(static_cast<uint32_t>(eventList.size() + 1), events, FALSE, timeout);
|
||||
|
||||
// Was a timeout
|
||||
if (signaledEvent == WAIT_TIMEOUT) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Was the exit event
|
||||
if (signaledEvent >= eventList.size()) {
|
||||
ResetEvent(exitHandle);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -112,6 +125,7 @@ bool WddmEventsImp::eventListen(zes_event_type_flags_t &pEvent, uint32_t timeout
|
|||
WddmEventsImp::WddmEventsImp(OsSysman *pOsSysman) {
|
||||
WddmSysmanImp *pWddmSysmanImp = static_cast<WddmSysmanImp *>(pOsSysman);
|
||||
pKmdSysManager = &pWddmSysmanImp->getKmdSysManager();
|
||||
exitHandle = CreateEvent(NULL, FALSE, FALSE, NULL);
|
||||
}
|
||||
|
||||
OsEvents *OsEvents::create(OsSysman *pOsSysman) {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2020 Intel Corporation
|
||||
* Copyright (C) 2020-2021 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
|
@ -27,7 +27,9 @@ class WddmEventsImp : public OsEvents, NEO::NonCopyableOrMovableClass {
|
|||
bool eventListen(zes_event_type_flags_t &pEvent, uint32_t timeout) override;
|
||||
ze_result_t eventRegister(zes_event_type_flags_t events) override;
|
||||
WddmEventsImp(OsSysman *pOsSysman);
|
||||
~WddmEventsImp() = default;
|
||||
~WddmEventsImp() {
|
||||
CloseHandle(exitHandle);
|
||||
}
|
||||
|
||||
// Don't allow copies of the WddmEventsImp object
|
||||
WddmEventsImp(const WddmEventsImp &obj) = delete;
|
||||
|
@ -36,6 +38,7 @@ class WddmEventsImp : public OsEvents, NEO::NonCopyableOrMovableClass {
|
|||
private:
|
||||
void registerEvents(zes_event_type_flags_t eventId, uint32_t requestId);
|
||||
void unregisterEvents();
|
||||
HANDLE exitHandle;
|
||||
|
||||
protected:
|
||||
KmdSysManager *pKmdSysManager = nullptr;
|
||||
|
|
Loading…
Reference in New Issue