mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-07-22 10:04:39 +00:00
equeue: Move small timer check to WaitForEvents. (#3000)
This commit is contained in:
parent
e0309a4b01
commit
95f04b746d
@ -98,6 +98,11 @@ bool EqueueInternal::RemoveEvent(u64 id, s16 filter) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int EqueueInternal::WaitForEvents(SceKernelEvent* ev, int num, u32 micros) {
|
int EqueueInternal::WaitForEvents(SceKernelEvent* ev, int num, u32 micros) {
|
||||||
|
if (HasSmallTimer()) {
|
||||||
|
// If a small timer is set, just wait for it to expire.
|
||||||
|
return WaitForSmallTimer(ev, num, micros);
|
||||||
|
}
|
||||||
|
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
const auto predicate = [&] {
|
const auto predicate = [&] {
|
||||||
@ -267,27 +272,15 @@ int PS4_SYSV_ABI sceKernelWaitEqueue(SceKernelEqueue eq, SceKernelEvent* ev, int
|
|||||||
return ORBIS_KERNEL_ERROR_EINVAL;
|
return ORBIS_KERNEL_ERROR_EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// When the timeout is nullptr, we wait indefinitely
|
if (timo == nullptr) {
|
||||||
if (eq->HasSmallTimer()) {
|
// When the timeout is nullptr, we wait indefinitely
|
||||||
if (timo == nullptr) {
|
*out = eq->WaitForEvents(ev, num, 0);
|
||||||
*out = eq->WaitForSmallTimer(ev, num, 0);
|
} else if (*timo == 0) {
|
||||||
} else if (*timo == 0) {
|
// Only events that have already arrived at the time of this function call can be received
|
||||||
// Only events that have already arrived at the time of this function call can be
|
*out = eq->GetTriggeredEvents(ev, num);
|
||||||
// received
|
|
||||||
*out = eq->GetTriggeredEvents(ev, num);
|
|
||||||
} else {
|
|
||||||
*out = eq->WaitForSmallTimer(ev, num, *timo);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (timo == nullptr) {
|
// Wait for up to the specified timeout value
|
||||||
*out = eq->WaitForEvents(ev, num, 0);
|
*out = eq->WaitForEvents(ev, num, *timo);
|
||||||
} else if (*timo == 0) {
|
|
||||||
// Only events that have already arrived at the time of this function call can be
|
|
||||||
// received
|
|
||||||
*out = eq->GetTriggeredEvents(ev, num);
|
|
||||||
} else {
|
|
||||||
*out = eq->WaitForEvents(ev, num, *timo);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*out == 0) {
|
if (*out == 0) {
|
||||||
|
Loading…
Reference in New Issue
Block a user