mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Kernel: Adjust timings of LwMutex and EventFlag.
This better matches tests on real firmware. These funcs are sometimes often used. See #15348 - Corpse Party.
This commit is contained in:
parent
078c61cfc9
commit
41da6d9f48
2 changed files with 10 additions and 1 deletions
|
@ -254,6 +254,7 @@ u32 sceKernelCancelEventFlag(SceUID uid, u32 pattern, u32 numWaitThreadsPtr) {
|
|||
if (__KernelClearEventFlagThreads(e, SCE_KERNEL_ERROR_WAIT_CANCEL))
|
||||
hleReSchedule("event flag canceled");
|
||||
|
||||
hleEatCycles(580);
|
||||
return hleLogSuccessI(SCEKERNEL, 0);
|
||||
} else {
|
||||
return hleLogDebug(SCEKERNEL, error, "invalid event flag");
|
||||
|
@ -405,7 +406,7 @@ int sceKernelWaitEventFlag(SceUID id, u32 bits, u32 wait, u32 outBitsPtr, u32 ti
|
|||
(void)hleLogSuccessI(SCEKERNEL, 0);
|
||||
}
|
||||
|
||||
hleEatCycles(600);
|
||||
hleEatCycles(500);
|
||||
return 0;
|
||||
} else {
|
||||
return hleLogDebug(SCEKERNEL, error, "invalid event flag");
|
||||
|
@ -473,6 +474,7 @@ int sceKernelWaitEventFlagCB(SceUID id, u32 bits, u32 wait, u32 outBitsPtr, u32
|
|||
hleCheckCurrentCallbacks();
|
||||
}
|
||||
|
||||
hleEatCycles(500);
|
||||
return 0;
|
||||
} else {
|
||||
return hleLogDebug(SCEKERNEL, error, "invalid event flag");
|
||||
|
@ -492,6 +494,8 @@ int sceKernelPollEventFlag(SceUID id, u32 bits, u32 wait, u32 outBitsPtr) {
|
|||
return hleLogDebug(SCEKERNEL, SCE_KERNEL_ERROR_EVF_ILPAT, "bad pattern");
|
||||
}
|
||||
|
||||
hleEatCycles(360);
|
||||
|
||||
u32 error;
|
||||
EventFlag *e = kernelObjects.Get<EventFlag>(id, error);
|
||||
if (e) {
|
||||
|
|
|
@ -933,6 +933,7 @@ int sceKernelTryLockLwMutex(u32 workareaPtr, int count)
|
|||
}
|
||||
|
||||
auto workarea = PSPPointer<NativeLwMutexWorkarea>::Create(workareaPtr);
|
||||
hleEatCycles(24);
|
||||
|
||||
u32 error = 0;
|
||||
if (__KernelLockLwMutex(workarea, count, error))
|
||||
|
@ -954,6 +955,7 @@ int sceKernelTryLockLwMutex_600(u32 workareaPtr, int count)
|
|||
}
|
||||
|
||||
auto workarea = PSPPointer<NativeLwMutexWorkarea>::Create(workareaPtr);
|
||||
hleEatCycles(24);
|
||||
|
||||
u32 error = 0;
|
||||
if (__KernelLockLwMutex(workarea, count, error))
|
||||
|
@ -974,6 +976,7 @@ int sceKernelLockLwMutex(u32 workareaPtr, int count, u32 timeoutPtr)
|
|||
}
|
||||
|
||||
auto workarea = PSPPointer<NativeLwMutexWorkarea>::Create(workareaPtr);
|
||||
hleEatCycles(48);
|
||||
|
||||
u32 error = 0;
|
||||
if (__KernelLockLwMutex(workarea, count, error))
|
||||
|
@ -1010,6 +1013,7 @@ int sceKernelLockLwMutexCB(u32 workareaPtr, int count, u32 timeoutPtr)
|
|||
}
|
||||
|
||||
auto workarea = PSPPointer<NativeLwMutexWorkarea>::Create(workareaPtr);
|
||||
hleEatCycles(48);
|
||||
|
||||
u32 error = 0;
|
||||
if (__KernelLockLwMutex(workarea, count, error))
|
||||
|
@ -1046,6 +1050,7 @@ int sceKernelUnlockLwMutex(u32 workareaPtr, int count)
|
|||
}
|
||||
|
||||
auto workarea = PSPPointer<NativeLwMutexWorkarea>::Create(workareaPtr);
|
||||
hleEatCycles(28);
|
||||
|
||||
if (workarea->uid == -1)
|
||||
return PSP_LWMUTEX_ERROR_NO_SUCH_LWMUTEX;
|
||||
|
|
Loading…
Add table
Reference in a new issue