Dialog: Respect accessThread priority on shutdown.

This influences shutdown timing.
This commit is contained in:
Unknown W. Brackets
2021-02-27 13:15:12 -08:00
parent d066b39334
commit 52c5f4bf95
4 changed files with 118 additions and 25 deletions
+18 -17
View File
@@ -41,15 +41,10 @@ PSPDialog::DialogStatus PSPDialog::GetStatus() {
if (pendingStatusTicks != 0 && CoreTiming::GetTicks() >= pendingStatusTicks) {
bool changeAllowed = true;
if (pendingStatus == SCE_UTILITY_STATUS_NONE && status == SCE_UTILITY_STATUS_SHUTDOWN) {
if (volatileLocked_) {
FinishVolatile();
UtilityCancelVolatileUnlock();
volatileLocked_ = false;
}
FinishVolatile();
} else if (pendingStatus == SCE_UTILITY_STATUS_RUNNING && status == SCE_UTILITY_STATUS_INITIALIZE) {
if (!volatileLocked_) {
volatileLocked_ = KernelVolatileMemLock(0, 0, 0) == 0;
UtilityCancelVolatileUnlock();
changeAllowed = volatileLocked_;
}
}
@@ -72,16 +67,11 @@ PSPDialog::DialogStatus PSPDialog::GetStatus() {
void PSPDialog::ChangeStatus(DialogStatus newStatus, int delayUs) {
if (delayUs <= 0) {
if (newStatus == SCE_UTILITY_STATUS_NONE && status == SCE_UTILITY_STATUS_SHUTDOWN) {
if (volatileLocked_) {
FinishVolatile();
UtilityCancelVolatileUnlock();
volatileLocked_ = false;
}
FinishVolatile();
} else if (newStatus == SCE_UTILITY_STATUS_RUNNING && status == SCE_UTILITY_STATUS_INITIALIZE) {
if (!volatileLocked_) {
// TODO: Should probably make the status pending instead?
volatileLocked_ = KernelVolatileMemLock(0, 0, 0) == 0;
UtilityCancelVolatileUnlock();
}
}
status = newStatus;
@@ -89,20 +79,27 @@ void PSPDialog::ChangeStatus(DialogStatus newStatus, int delayUs) {
} else {
pendingStatus = newStatus;
pendingStatusTicks = CoreTiming::GetTicks() + usToCycles(delayUs);
if (volatileLocked_ && newStatus == SCE_UTILITY_STATUS_NONE && status == SCE_UTILITY_STATUS_SHUTDOWN) {
UtilityScheduleVolatileUnlock(usToCycles(delayUs));
}
}
}
void PSPDialog::FinishVolatile() {
if (volatileLocked_ && KernelVolatileMemUnlock(0) == 0) {
if (!volatileLocked_)
return;
if (KernelVolatileMemUnlock(0) == 0) {
volatileLocked_ = false;
// Simulate modifications to volatile memory.
Memory::Memset(PSP_GetVolatileMemoryStart(), 0, PSP_GetVolatileMemoryEnd() - PSP_GetVolatileMemoryStart());
}
}
int PSPDialog::FinishShutdown() {
if (ReadStatus() != SCE_UTILITY_STATUS_SHUTDOWN)
return -1;
ChangeStatus(SCE_UTILITY_STATUS_NONE, 0);
return 0;
}
void PSPDialog::ChangeStatusInit(int delayUs) {
status = SCE_UTILITY_STATUS_INITIALIZE;
ChangeStatus(SCE_UTILITY_STATUS_RUNNING, delayUs);
@@ -110,7 +107,11 @@ void PSPDialog::ChangeStatusInit(int delayUs) {
void PSPDialog::ChangeStatusShutdown(int delayUs) {
status = SCE_UTILITY_STATUS_SHUTDOWN;
ChangeStatus(SCE_UTILITY_STATUS_NONE, delayUs);
auto params = GetCommonParam();
if (params)
UtilityDialogShutdown(DialogType(), delayUs, params->accessThread);
else
ChangeStatus(SCE_UTILITY_STATUS_NONE, delayUs);
}
void PSPDialog::StartDraw()
+1
View File
@@ -86,6 +86,7 @@ public:
void EndDraw();
void FinishVolatile();
int FinishShutdown();
protected:
PPGeStyle FadedStyle(PPGeAlign align, float scale);