mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-06-14 14:43:15 +00:00
equeue: Move small timer check to WaitForEvents. (#3000)
Some checks are pending
Build and Release / reuse (push) Waiting to run
Build and Release / clang-format (push) Waiting to run
Build and Release / get-info (push) Waiting to run
Build and Release / windows-sdl (push) Blocked by required conditions
Build and Release / windows-qt (push) Blocked by required conditions
Build and Release / macos-sdl (push) Blocked by required conditions
Build and Release / macos-qt (push) Blocked by required conditions
Build and Release / linux-sdl (push) Blocked by required conditions
Build and Release / linux-qt (push) Blocked by required conditions
Build and Release / linux-sdl-gcc (push) Blocked by required conditions
Build and Release / linux-qt-gcc (push) Blocked by required conditions
Build and Release / pre-release (push) Blocked by required conditions
Some checks are pending
Build and Release / reuse (push) Waiting to run
Build and Release / clang-format (push) Waiting to run
Build and Release / get-info (push) Waiting to run
Build and Release / windows-sdl (push) Blocked by required conditions
Build and Release / windows-qt (push) Blocked by required conditions
Build and Release / macos-sdl (push) Blocked by required conditions
Build and Release / macos-qt (push) Blocked by required conditions
Build and Release / linux-sdl (push) Blocked by required conditions
Build and Release / linux-qt (push) Blocked by required conditions
Build and Release / linux-sdl-gcc (push) Blocked by required conditions
Build and Release / linux-qt-gcc (push) Blocked by required conditions
Build and Release / pre-release (push) Blocked by required conditions
This commit is contained in:
parent
e0309a4b01
commit
95f04b746d
1 changed files with 13 additions and 20 deletions
|
@ -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…
Add table
Add a link
Reference in a new issue