From 1cb7a8813783e017c5ab6fe7764d64209e625720 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sat, 26 Jan 2013 10:44:04 -0800 Subject: [PATCH] Don't use a dynamic string for wait debugging. Happens in release, and shows up on the profiler. Not huge, but should save ~0.5% of cpu time. --- Core/HLE/__sceAudio.cpp | 2 +- Core/HLE/sceCtrl.cpp | 4 ++-- Core/HLE/sceDisplay.cpp | 12 ++++++------ Core/HLE/sceKernelEventFlag.cpp | 4 ++-- Core/HLE/sceKernelMbx.cpp | 4 ++-- Core/HLE/sceKernelMemory.cpp | 4 ++-- Core/HLE/sceKernelMsgPipe.cpp | 8 ++++---- Core/HLE/sceKernelMutex.cpp | 8 ++++---- Core/HLE/sceKernelSemaphore.cpp | 2 +- Core/HLE/sceKernelThread.cpp | 22 +++++++++++----------- Core/HLE/sceKernelThread.h | 2 +- Core/HLE/sceUmd.cpp | 6 +++--- 12 files changed, 39 insertions(+), 39 deletions(-) diff --git a/Core/HLE/__sceAudio.cpp b/Core/HLE/__sceAudio.cpp index c59567077f..402c0ddd34 100644 --- a/Core/HLE/__sceAudio.cpp +++ b/Core/HLE/__sceAudio.cpp @@ -116,7 +116,7 @@ u32 __AudioEnqueue(AudioChannel &chan, int chanNum, bool blocking) if (blocking) { chan.waitingThread = __KernelGetCurThread(); // WARNING: This changes currentThread so must grab waitingThread before (line above). - __KernelWaitCurThread(WAITTYPE_AUDIOCHANNEL, (SceUID)chanNum, 0, 0, false); + __KernelWaitCurThread(WAITTYPE_AUDIOCHANNEL, (SceUID)chanNum, 0, 0, false, "blocking audio waited"); // Fall through to the sample queueing, don't want to lose the samples even though // we're getting full. } diff --git a/Core/HLE/sceCtrl.cpp b/Core/HLE/sceCtrl.cpp index 145f22d1a5..4f3987cd65 100644 --- a/Core/HLE/sceCtrl.cpp +++ b/Core/HLE/sceCtrl.cpp @@ -408,7 +408,7 @@ void sceCtrlReadBufferPositive(u32 ctrlDataPtr, u32 nBufs) else { waitingThreads.push_back(__KernelGetCurThread()); - __KernelWaitCurThread(WAITTYPE_CTRL, CTRL_WAIT_POSITIVE, ctrlDataPtr, 0, false); + __KernelWaitCurThread(WAITTYPE_CTRL, CTRL_WAIT_POSITIVE, ctrlDataPtr, 0, false, "ctrl buffer waited"); DEBUG_LOG(HLE, "sceCtrlReadBufferPositive(%08x, %i) - waiting", ctrlDataPtr, nBufs); } } @@ -424,7 +424,7 @@ void sceCtrlReadBufferNegative(u32 ctrlDataPtr, u32 nBufs) else { waitingThreads.push_back(__KernelGetCurThread()); - __KernelWaitCurThread(WAITTYPE_CTRL, CTRL_WAIT_NEGATIVE, ctrlDataPtr, 0, false); + __KernelWaitCurThread(WAITTYPE_CTRL, CTRL_WAIT_NEGATIVE, ctrlDataPtr, 0, false, "ctrl buffer waited"); DEBUG_LOG(HLE, "sceCtrlReadBufferNegative(%08x, %i) - waiting", ctrlDataPtr, nBufs); } } diff --git a/Core/HLE/sceDisplay.cpp b/Core/HLE/sceDisplay.cpp index 023254403e..74956292a5 100644 --- a/Core/HLE/sceDisplay.cpp +++ b/Core/HLE/sceDisplay.cpp @@ -369,7 +369,7 @@ u32 sceDisplayGetFramebuf(u32 topaddrPtr, u32 linesizePtr, u32 pixelFormatPtr, i u32 sceDisplayWaitVblankStart() { DEBUG_LOG(HLE,"sceDisplayWaitVblankStart()"); vblankWaitingThreads.push_back(WaitVBlankInfo(__KernelGetCurThread())); - __KernelWaitCurThread(WAITTYPE_VBLANK, 0, 0, 0, false); + __KernelWaitCurThread(WAITTYPE_VBLANK, 0, 0, 0, false, "vblank start waited"); return 0; } @@ -377,7 +377,7 @@ u32 sceDisplayWaitVblank() { if (!isVblank) { DEBUG_LOG(HLE,"sceDisplayWaitVblank()"); vblankWaitingThreads.push_back(WaitVBlankInfo(__KernelGetCurThread())); - __KernelWaitCurThread(WAITTYPE_VBLANK, 0, 0, 0, false); + __KernelWaitCurThread(WAITTYPE_VBLANK, 0, 0, 0, false, "vblank waited"); return 0; } else { DEBUG_LOG(HLE,"sceDisplayWaitVblank() - not waiting since in vBlank"); @@ -388,7 +388,7 @@ u32 sceDisplayWaitVblank() { u32 sceDisplayWaitVblankStartMulti() { DEBUG_LOG(HLE,"sceDisplayWaitVblankStartMulti()"); vblankWaitingThreads.push_back(WaitVBlankInfo(__KernelGetCurThread())); - __KernelWaitCurThread(WAITTYPE_VBLANK, 0, 0, 0, false); + __KernelWaitCurThread(WAITTYPE_VBLANK, 0, 0, 0, false, "vblank start multi waited"); return 0; } @@ -396,7 +396,7 @@ u32 sceDisplayWaitVblankCB() { if (!isVblank) { DEBUG_LOG(HLE,"sceDisplayWaitVblankCB()"); vblankWaitingThreads.push_back(WaitVBlankInfo(__KernelGetCurThread())); - __KernelWaitCurThread(WAITTYPE_VBLANK, 0, 0, 0, true); + __KernelWaitCurThread(WAITTYPE_VBLANK, 0, 0, 0, true, "vblank waited"); return 0; } else { DEBUG_LOG(HLE,"sceDisplayWaitVblank() - not waiting since in vBlank"); @@ -407,14 +407,14 @@ u32 sceDisplayWaitVblankCB() { u32 sceDisplayWaitVblankStartCB() { DEBUG_LOG(HLE,"sceDisplayWaitVblankStartCB()"); vblankWaitingThreads.push_back(WaitVBlankInfo(__KernelGetCurThread())); - __KernelWaitCurThread(WAITTYPE_VBLANK, 0, 0, 0, true); + __KernelWaitCurThread(WAITTYPE_VBLANK, 0, 0, 0, true, "vblank start waited"); return 0; } u32 sceDisplayWaitVblankStartMultiCB() { DEBUG_LOG(HLE,"sceDisplayWaitVblankStartMultiCB()"); vblankWaitingThreads.push_back(WaitVBlankInfo(__KernelGetCurThread())); - __KernelWaitCurThread(WAITTYPE_VBLANK, 0, 0, 0, true); + __KernelWaitCurThread(WAITTYPE_VBLANK, 0, 0, 0, true, "vblank start multi waited"); return 0; } diff --git a/Core/HLE/sceKernelEventFlag.cpp b/Core/HLE/sceKernelEventFlag.cpp index 68e182ac2d..0acf655dd5 100644 --- a/Core/HLE/sceKernelEventFlag.cpp +++ b/Core/HLE/sceKernelEventFlag.cpp @@ -417,7 +417,7 @@ int sceKernelWaitEventFlag(SceUID id, u32 bits, u32 wait, u32 outBitsPtr, u32 ti e->waitingThreads.push_back(th); __KernelSetEventFlagTimeout(e, timeoutPtr); - __KernelWaitCurThread(WAITTYPE_EVENTFLAG, id, 0, timeoutPtr, false); + __KernelWaitCurThread(WAITTYPE_EVENTFLAG, id, 0, timeoutPtr, false, "event flag waited"); } return 0; @@ -470,7 +470,7 @@ int sceKernelWaitEventFlagCB(SceUID id, u32 bits, u32 wait, u32 outBitsPtr, u32 e->waitingThreads.push_back(th); __KernelSetEventFlagTimeout(e, timeoutPtr); - __KernelWaitCurThread(WAITTYPE_EVENTFLAG, id, 0, timeoutPtr, true); + __KernelWaitCurThread(WAITTYPE_EVENTFLAG, id, 0, timeoutPtr, true, "event flag waited"); } else hleCheckCurrentCallbacks(); diff --git a/Core/HLE/sceKernelMbx.cpp b/Core/HLE/sceKernelMbx.cpp index a720c710dd..29756f1829 100644 --- a/Core/HLE/sceKernelMbx.cpp +++ b/Core/HLE/sceKernelMbx.cpp @@ -450,7 +450,7 @@ int sceKernelReceiveMbx(SceUID id, u32 packetAddrPtr, u32 timeoutPtr) __KernelMbxRemoveThread(m, __KernelGetCurThread()); m->AddWaitingThread(__KernelGetCurThread(), packetAddrPtr); __KernelWaitMbx(m, timeoutPtr); - __KernelWaitCurThread(WAITTYPE_MBX, id, 0, timeoutPtr, false); + __KernelWaitCurThread(WAITTYPE_MBX, id, 0, timeoutPtr, false, "mbx waited"); return 0; } } @@ -478,7 +478,7 @@ int sceKernelReceiveMbxCB(SceUID id, u32 packetAddrPtr, u32 timeoutPtr) __KernelMbxRemoveThread(m, __KernelGetCurThread()); m->AddWaitingThread(__KernelGetCurThread(), packetAddrPtr); __KernelWaitMbx(m, timeoutPtr); - __KernelWaitCurThread(WAITTYPE_MBX, id, 0, timeoutPtr, true); + __KernelWaitCurThread(WAITTYPE_MBX, id, 0, timeoutPtr, true, "mbx waited"); return 0; } } diff --git a/Core/HLE/sceKernelMemory.cpp b/Core/HLE/sceKernelMemory.cpp index 58f7c7c8a2..b94b27cddf 100644 --- a/Core/HLE/sceKernelMemory.cpp +++ b/Core/HLE/sceKernelMemory.cpp @@ -976,7 +976,7 @@ int sceKernelAllocateVpl(SceUID uid, u32 size, u32 addrPtr, u32 timeoutPtr) } __KernelSetVplTimeout(timeoutPtr); - __KernelWaitCurThread(WAITTYPE_VPL, uid, size, timeoutPtr, false); + __KernelWaitCurThread(WAITTYPE_VPL, uid, size, timeoutPtr, false, "vpl waited"); } } return error; @@ -1002,7 +1002,7 @@ int sceKernelAllocateVplCB(SceUID uid, u32 size, u32 addrPtr, u32 timeoutPtr) } __KernelSetVplTimeout(timeoutPtr); - __KernelWaitCurThread(WAITTYPE_VPL, uid, size, timeoutPtr, true); + __KernelWaitCurThread(WAITTYPE_VPL, uid, size, timeoutPtr, true, "vpl waited"); } } return error; diff --git a/Core/HLE/sceKernelMsgPipe.cpp b/Core/HLE/sceKernelMsgPipe.cpp index 68ef9d6cad..bef7980ef8 100644 --- a/Core/HLE/sceKernelMsgPipe.cpp +++ b/Core/HLE/sceKernelMsgPipe.cpp @@ -289,7 +289,7 @@ void __KernelSendMsgPipe(MsgPipe *m, u32 sendBufAddr, u32 sendSize, int waitMode { m->AddSendWaitingThread(__KernelGetCurThread(), curSendAddr, sendSize, waitMode, resultAddr); RETURN(0); - __KernelWaitCurThread(WAITTYPE_MSGPIPE, 0, 0, 0, cbEnabled); + __KernelWaitCurThread(WAITTYPE_MSGPIPE, 0, 0, 0, cbEnabled, "msgpipe waited"); return; } } @@ -321,7 +321,7 @@ void __KernelSendMsgPipe(MsgPipe *m, u32 sendBufAddr, u32 sendSize, int waitMode { m->AddSendWaitingThread(__KernelGetCurThread(), curSendAddr, sendSize, waitMode, resultAddr); RETURN(0); - __KernelWaitCurThread(WAITTYPE_MSGPIPE, 0, 0, 0, cbEnabled); + __KernelWaitCurThread(WAITTYPE_MSGPIPE, 0, 0, 0, cbEnabled, "msgpipe waited"); return; } } @@ -461,7 +461,7 @@ void __KernelReceiveMsgPipe(MsgPipe *m, u32 receiveBufAddr, u32 receiveSize, int { m->AddReceiveWaitingThread(__KernelGetCurThread(), curReceiveAddr, receiveSize, waitMode, resultAddr); RETURN(0); - __KernelWaitCurThread(WAITTYPE_MSGPIPE, 0, 0, 0, cbEnabled); + __KernelWaitCurThread(WAITTYPE_MSGPIPE, 0, 0, 0, cbEnabled, "msgpipe waited"); return; } } @@ -497,7 +497,7 @@ void __KernelReceiveMsgPipe(MsgPipe *m, u32 receiveBufAddr, u32 receiveSize, int { m->AddReceiveWaitingThread(__KernelGetCurThread(), curReceiveAddr, receiveSize, waitMode, resultAddr); RETURN(0); - __KernelWaitCurThread(WAITTYPE_MSGPIPE, 0, 0, 0, cbEnabled); + __KernelWaitCurThread(WAITTYPE_MSGPIPE, 0, 0, 0, cbEnabled, "msgpipe waited"); return; } } diff --git a/Core/HLE/sceKernelMutex.cpp b/Core/HLE/sceKernelMutex.cpp index 9042fcb58b..b6c18b2f4b 100644 --- a/Core/HLE/sceKernelMutex.cpp +++ b/Core/HLE/sceKernelMutex.cpp @@ -464,7 +464,7 @@ int sceKernelLockMutex(SceUID id, int count, u32 timeoutPtr) if (std::find(mutex->waitingThreads.begin(), mutex->waitingThreads.end(), threadID) == mutex->waitingThreads.end()) mutex->waitingThreads.push_back(threadID); __KernelWaitMutex(mutex, timeoutPtr); - __KernelWaitCurThread(WAITTYPE_MUTEX, id, count, timeoutPtr, false); + __KernelWaitCurThread(WAITTYPE_MUTEX, id, count, timeoutPtr, false, "mutex waited"); // Return value will be overwritten by wait. return 0; @@ -492,7 +492,7 @@ int sceKernelLockMutexCB(SceUID id, int count, u32 timeoutPtr) if (std::find(mutex->waitingThreads.begin(), mutex->waitingThreads.end(), threadID) == mutex->waitingThreads.end()) mutex->waitingThreads.push_back(threadID); __KernelWaitMutex(mutex, timeoutPtr); - __KernelWaitCurThread(WAITTYPE_MUTEX, id, count, timeoutPtr, true); + __KernelWaitCurThread(WAITTYPE_MUTEX, id, count, timeoutPtr, true, "mutex waited"); // Return value will be overwritten by wait. return 0; @@ -846,7 +846,7 @@ int sceKernelLockLwMutex(u32 workareaPtr, int count, u32 timeoutPtr) if (std::find(mutex->waitingThreads.begin(), mutex->waitingThreads.end(), threadID) == mutex->waitingThreads.end()) mutex->waitingThreads.push_back(threadID); __KernelWaitLwMutex(mutex, timeoutPtr); - __KernelWaitCurThread(WAITTYPE_LWMUTEX, workarea.uid, count, timeoutPtr, false); + __KernelWaitCurThread(WAITTYPE_LWMUTEX, workarea.uid, count, timeoutPtr, false, "lwmutex waited"); // Return value will be overwritten by wait. return 0; @@ -882,7 +882,7 @@ int sceKernelLockLwMutexCB(u32 workareaPtr, int count, u32 timeoutPtr) if (std::find(mutex->waitingThreads.begin(), mutex->waitingThreads.end(), threadID) == mutex->waitingThreads.end()) mutex->waitingThreads.push_back(threadID); __KernelWaitLwMutex(mutex, timeoutPtr); - __KernelWaitCurThread(WAITTYPE_LWMUTEX, workarea.uid, count, timeoutPtr, true); + __KernelWaitCurThread(WAITTYPE_LWMUTEX, workarea.uid, count, timeoutPtr, true, "lwmutex waited"); // Return value will be overwritten by wait. return 0; diff --git a/Core/HLE/sceKernelSemaphore.cpp b/Core/HLE/sceKernelSemaphore.cpp index 6c1c8cd1bc..0e11397461 100644 --- a/Core/HLE/sceKernelSemaphore.cpp +++ b/Core/HLE/sceKernelSemaphore.cpp @@ -343,7 +343,7 @@ int __KernelWaitSema(SceUID id, int wantedCount, u32 timeoutPtr, const char *bad if (std::find(s->waitingThreads.begin(), s->waitingThreads.end(), threadID) == s->waitingThreads.end()) s->waitingThreads.push_back(threadID); __KernelSetSemaTimeout(s, timeoutPtr); - __KernelWaitCurThread(WAITTYPE_SEMA, id, wantedCount, timeoutPtr, processCallbacks); + __KernelWaitCurThread(WAITTYPE_SEMA, id, wantedCount, timeoutPtr, processCallbacks, "sema waited"); } return 0; diff --git a/Core/HLE/sceKernelThread.cpp b/Core/HLE/sceKernelThread.cpp index baaefef392..cc38af96d3 100644 --- a/Core/HLE/sceKernelThread.cpp +++ b/Core/HLE/sceKernelThread.cpp @@ -1031,7 +1031,7 @@ bool __KernelTriggerWait(WaitType type, int id, int retVal, bool dontSwitch) } // makes the current thread wait for an event -void __KernelWaitCurThread(WaitType type, SceUID waitID, u32 waitValue, u32 timeoutPtr, bool processCallbacks) +void __KernelWaitCurThread(WaitType type, SceUID waitID, u32 waitValue, u32 timeoutPtr, bool processCallbacks, const char *reason) { // TODO: Need to defer if in callback? if (g_inCbCount > 0) @@ -1049,10 +1049,10 @@ void __KernelWaitCurThread(WaitType type, SceUID waitID, u32 waitValue, u32 time RETURN(0); //pretend all went OK // TODO: time waster - char temp[256]; - sprintf(temp, "started wait %s", waitTypeStrings[(int)type]); + if (!reason) + reason = "started wait"; - hleReSchedule(processCallbacks, temp); + hleReSchedule(processCallbacks, reason); // TODO: Remove thread from Ready queue? } @@ -1728,7 +1728,7 @@ void sceKernelDelayThreadCB() SceUID curThread = __KernelGetCurThread(); __KernelScheduleWakeup(curThread, usec); - __KernelWaitCurThread(WAITTYPE_DELAY, curThread, 0, 0, true); + __KernelWaitCurThread(WAITTYPE_DELAY, curThread, 0, 0, true, "thread delayed"); } void sceKernelDelayThread() @@ -1739,7 +1739,7 @@ void sceKernelDelayThread() SceUID curThread = __KernelGetCurThread(); __KernelScheduleWakeup(curThread, usec); - __KernelWaitCurThread(WAITTYPE_DELAY, curThread, 0, 0, false); + __KernelWaitCurThread(WAITTYPE_DELAY, curThread, 0, 0, false, "thread delayed"); } void sceKernelDelaySysClockThreadCB() @@ -1760,7 +1760,7 @@ void sceKernelDelaySysClockThreadCB() SceUID curThread = __KernelGetCurThread(); __KernelScheduleWakeup(curThread, usec); - __KernelWaitCurThread(WAITTYPE_DELAY, curThread, 0, 0, true); + __KernelWaitCurThread(WAITTYPE_DELAY, curThread, 0, 0, true, "thread delayed"); } void sceKernelDelaySysClockThread() @@ -1781,7 +1781,7 @@ void sceKernelDelaySysClockThread() SceUID curThread = __KernelGetCurThread(); __KernelScheduleWakeup(curThread, usec); - __KernelWaitCurThread(WAITTYPE_DELAY, curThread, 0, 0, false); + __KernelWaitCurThread(WAITTYPE_DELAY, curThread, 0, 0, false, "thread delayed"); } u32 __KernelGetThreadPrio(SceUID id) @@ -1855,7 +1855,7 @@ static void __KernelSleepThread(bool doCallbacks) { RETURN(0); } else { RETURN(0); - __KernelWaitCurThread(WAITTYPE_SLEEP, 0, 0, 0, doCallbacks); + __KernelWaitCurThread(WAITTYPE_SLEEP, 0, 0, 0, doCallbacks, "thread slept"); } } @@ -1886,7 +1886,7 @@ int sceKernelWaitThreadEnd(SceUID threadID, u32 timeoutPtr) { if (Memory::IsValidAddress(timeoutPtr)) __KernelScheduleThreadEndTimeout(currentThread, threadID, Memory::Read_U32(timeoutPtr)); - __KernelWaitCurThread(WAITTYPE_THREADEND, threadID, 0, timeoutPtr, false); + __KernelWaitCurThread(WAITTYPE_THREADEND, threadID, 0, timeoutPtr, false, "thread wait end"); } return t->nt.exitStatus; @@ -1913,7 +1913,7 @@ int sceKernelWaitThreadEndCB(SceUID threadID, u32 timeoutPtr) { if (Memory::IsValidAddress(timeoutPtr)) __KernelScheduleThreadEndTimeout(currentThread, threadID, Memory::Read_U32(timeoutPtr)); - __KernelWaitCurThread(WAITTYPE_THREADEND, threadID, 0, timeoutPtr, true); + __KernelWaitCurThread(WAITTYPE_THREADEND, threadID, 0, timeoutPtr, true, "thread wait end"); } return t->nt.exitStatus; diff --git a/Core/HLE/sceKernelThread.h b/Core/HLE/sceKernelThread.h index 4d1aca0fa6..12117df1a1 100644 --- a/Core/HLE/sceKernelThread.h +++ b/Core/HLE/sceKernelThread.h @@ -129,7 +129,7 @@ u32 __KernelResumeThreadFromWait(SceUID threadID, int retval); u32 __KernelGetWaitValue(SceUID threadID, u32 &error); u32 __KernelGetWaitTimeoutPtr(SceUID threadID, u32 &error); SceUID __KernelGetWaitID(SceUID threadID, WaitType type, u32 &error); -void __KernelWaitCurThread(WaitType type, SceUID waitId, u32 waitValue, u32 timeoutPtr, bool processCallbacks); +void __KernelWaitCurThread(WaitType type, SceUID waitId, u32 waitValue, u32 timeoutPtr, bool processCallbacks, const char *reason); void __KernelReSchedule(const char *reason = "no reason"); void __KernelReSchedule(bool doCallbacks, const char *reason); diff --git a/Core/HLE/sceUmd.cpp b/Core/HLE/sceUmd.cpp index bbe49ed8ad..1f2f2a072a 100644 --- a/Core/HLE/sceUmd.cpp +++ b/Core/HLE/sceUmd.cpp @@ -249,7 +249,7 @@ int sceUmdWaitDriveStat(u32 stat) DEBUG_LOG(HLE,"0=sceUmdWaitDriveStat(stat = %08x)", stat); if ((stat & __KernelUmdGetState()) == 0) - __KernelWaitCurThread(WAITTYPE_UMD, 1, stat, 0, 0); + __KernelWaitCurThread(WAITTYPE_UMD, 1, stat, 0, 0, "umd stat waited"); return 0; } @@ -261,7 +261,7 @@ int sceUmdWaitDriveStatWithTimer(u32 stat, u32 timeout) if ((stat & __KernelUmdGetState()) == 0) { __UmdWaitStat(timeout); - __KernelWaitCurThread(WAITTYPE_UMD, 1, stat, 0, 0); + __KernelWaitCurThread(WAITTYPE_UMD, 1, stat, 0, 0, "umd stat waited"); } else hleReSchedule("umd stat waited with timer"); @@ -287,7 +287,7 @@ int sceUmdWaitDriveStatCB(u32 stat, u32 timeout) timeout = 8000; __UmdWaitStat(timeout); - __KernelWaitCurThread(WAITTYPE_UMD, 1, stat, 0, true); + __KernelWaitCurThread(WAITTYPE_UMD, 1, stat, 0, true, "umd stat waited"); } else hleReSchedule("umd stat waited");