Track execution time after save, add new setting for exit confirmation

This commit is contained in:
Henrik Rydgård 2025-02-17 12:29:23 -06:00
parent 8b1bf43283
commit 408d1b0916
52 changed files with 93 additions and 10 deletions

View file

@ -300,6 +300,7 @@ static const ConfigSetting generalSettings[] = {
ConfigSetting("RemoteTab", &g_Config.bRemoteTab, false, CfgFlag::DEFAULT),
ConfigSetting("RemoteISOSharedDir", &g_Config.sRemoteISOSharedDir, "", CfgFlag::DEFAULT),
ConfigSetting("RemoteISOShareType", &g_Config.iRemoteISOShareType, (int)RemoteISOShareType::RECENT, CfgFlag::DEFAULT),
ConfigSetting("AskForExitConfirmationAfterSeconds", &g_Config.iAskForExitConfirmationAfterSeconds, 60, CfgFlag::PER_GAME),
#ifdef __ANDROID__
ConfigSetting("ScreenRotation", &g_Config.iScreenRotation, ROTATION_AUTO_HORIZONTAL),

View file

@ -137,6 +137,7 @@ public:
bool bMemStickInserted;
int iMemStickSizeGB;
bool bLoadPlugins;
int iAskForExitConfirmationAfterSeconds;
int iScreenRotation; // The rotation angle of the PPSSPP UI. Only supported on Android and possibly other mobile platforms.
int iInternalScreenRotation; // The internal screen rotation angle. Useful for vertical SHMUPs and similar.

View file

@ -29,6 +29,7 @@
#include "Core/Dialog/PSPSaveDialog.h"
#include "Core/FileSystems/MetaFileSystem.h"
#include "Core/Util/PPGeDraw.h"
#include "Common/TimeUtil.h"
#include "Core/HLE/sceCtrl.h"
#include "Core/HLE/sceUtility.h"
#include "Core/HLE/ErrorCodes.h"
@ -38,6 +39,20 @@
#include "Core/Reporting.h"
#include "Core/SaveState.h"
static double g_lastSaveTime = -1.0;
void ResetSecondsSinceLastGameSave() {
g_lastSaveTime = -1.0;
}
double SecondsSinceLastGameSave() {
if (g_lastSaveTime < 0) {
return -1.0;
} else {
return time_now_d() - g_lastSaveTime;
}
}
const static float FONT_SCALE = 0.55f;
// These are rough, it seems to take at least 100ms or so to init, and shutdown depends on threads.
@ -85,8 +100,7 @@ PSPSaveDialog::~PSPSaveDialog() {
JoinIOThread();
}
int PSPSaveDialog::Init(int paramAddr)
{
int PSPSaveDialog::Init(int paramAddr) {
// Ignore if already running
if (GetStatus() != SCE_UTILITY_STATUS_NONE) {
ERROR_LOG_REPORT(Log::sceUtility, "A save request is already running, not starting a new one");
@ -1068,6 +1082,7 @@ void PSPSaveDialog::ExecuteIOAction() {
result = param.Load(param.GetPspParam(), GetSelectedSaveDirName(), currentSelectedSave);
if (result == 0) {
display = DS_LOAD_DONE;
g_lastSaveTime = time_now_d();
} else {
display = DS_LOAD_FAILED;
}
@ -1076,6 +1091,7 @@ void PSPSaveDialog::ExecuteIOAction() {
SaveState::NotifySaveData();
if (param.Save(param.GetPspParam(), GetSelectedSaveDirName()) == 0) {
display = DS_SAVE_DONE;
g_lastSaveTime = time_now_d();
} else {
display = DS_SAVE_FAILED;
}

View file

@ -104,6 +104,8 @@ private:
std::thread *ioThread = nullptr;
std::mutex paramLock;
volatile SaveIOStatus ioThreadStatus;
volatile SaveIOStatus ioThreadStatus = SAVEIO_NONE;
};
void ResetSecondsSinceLastGameSave();
double SecondsSinceLastGameSave();

View file

@ -227,6 +227,8 @@ void __UtilityInit() {
SavedataParam::Init();
currentlyLoadedModules.clear();
volatileUnlockEvent = CoreTiming::RegisterEvent("UtilityVolatileUnlock", UtilityVolatileUnlock);
ResetSecondsSinceLastGameSave();
}
void __UtilityDoState(PointerWrap &p) {

View file

@ -60,8 +60,10 @@
// Slot number is visual only, -2 will display special message
constexpr int LOAD_UNDO_SLOT = -2;
namespace SaveState
{
namespace SaveState {
double g_lastSaveTime = -1.0;
struct SaveStart
{
void DoState(PointerWrap &p);
@ -76,13 +78,10 @@ namespace SaveState
SAVESTATE_SAVE_SCREENSHOT,
};
struct Operation
{
struct Operation {
// The slot number is for visual purposes only. Set to -1 for operations where we don't display a message for example.
Operation(OperationType t, const Path &f, int slot_, Callback cb, void *cbUserData_)
: type(t), filename(f), callback(cb), slot(slot_), cbUserData(cbUserData_)
{
}
: type(t), filename(f), callback(cb), slot(slot_), cbUserData(cbUserData_) {}
OperationType type;
Path filename;
@ -1005,6 +1004,7 @@ namespace SaveState
}
}
#endif
g_lastSaveTime = time_now_d();
} else if (result == CChunkFileReader::ERROR_BROKEN_STATE) {
HandleLoadFailure(false);
callbackMessage = std::string(i18nLoadFailure) + ": " + errorString;
@ -1040,6 +1040,7 @@ namespace SaveState
}
}
#endif
g_lastSaveTime = time_now_d();
} else if (result == CChunkFileReader::ERROR_BROKEN_STATE) {
// TODO: What else might we want to do here? This should be very unusual.
callbackMessage = i18nSaveFailure;
@ -1155,6 +1156,8 @@ namespace SaveState
saveDataGeneration = 0;
lastSaveDataGeneration = 0;
saveStateInitialGitVersion.clear();
g_lastSaveTime = -1.0;
}
void Shutdown()
@ -1162,4 +1165,12 @@ namespace SaveState
std::lock_guard<std::mutex> guard(mutex);
rewindStates.Clear();
}
double SecondsSinceLastSavestate() {
if (g_lastSaveTime < 0) {
return -1.0;
} else {
return time_now_d() - g_lastSaveTime;
}
}
}

View file

@ -111,4 +111,7 @@ namespace SaveState
// Cleanup by triggering a restart if needed.
void Cleanup();
// Returns the time since last save. -1 if N/A.
double SecondsSinceLastSavestate();
};

View file

@ -1300,6 +1300,9 @@ void GameSettingsScreen::CreateSystemSettings(UI::ViewGroup *systemSettings) {
systemSettings->Add(new ItemHeader(sy->T("General")));
PopupSliderChoice *exitConfirmation = systemSettings->Add(new PopupSliderChoice(&g_Config.iAskForExitConfirmationAfterSeconds, 0, 1200, 60, sy->T("Ask for exit confirmation after seconds"), screenManager(), "s"));
exitConfirmation->SetZeroLabel(sy->T("Off"));
#if PPSSPP_PLATFORM(ANDROID)
if (System_GetPropertyInt(SYSPROP_DEVICE_TYPE) == DEVICE_TYPE_MOBILE) {
auto co = GetI18NCategory(I18NCat::CONTROLS);

View file

@ -1294,6 +1294,7 @@ Vulkan Features = Vulkan features
12HR = 12 ساعة
24HR = 24 ساعة
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = ‎تلقائي
Auto Load Savestate = Auto load savestate
AVI Dump started. = AVI dump started

View file

@ -1286,6 +1286,7 @@ Vulkan Features = Vulkan features
12HR = 12HR
24HR = 24HR
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Auto
Auto Load Savestate = Auto load savestate
AVI Dump started. = AVI dump started

View file

@ -1286,6 +1286,7 @@ Vulkan Features = Vulkan features
12HR = 12ч.
24HR = 24ч.
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Auto
Auto Load Savestate = Auto load savestate
AVI Dump started. = AVI dump started

View file

@ -1286,6 +1286,7 @@ Vulkan Features = Vulkan features
12HR = 12HR
24HR = 24HR
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Auto
Auto Load Savestate = Auto load savestate
AVI Dump started. = AVI dump started

View file

@ -1286,6 +1286,7 @@ Vulkan Features = Vulkan features
12HR = 12HOD
24HR = 24HOD
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Auto
Auto Load Savestate = Auto load savestate
AVI Dump started. = AVI dump started

View file

@ -1286,6 +1286,7 @@ Vulkan Features = Vulkan features
12HR = 12 timer
24HR = 24 timer
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Auto
Auto Load Savestate = Auto load savestate
AVI Dump started. = AVI Dump startet.

View file

@ -1286,6 +1286,7 @@ Vulkan Features = Vulkan Besonderheiten
12HR = 12 Std
24HR = 24 Std
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Auto
Auto Load Savestate = Spielstand automatisch laden
AVI Dump started. = AVI Dump gestartet.

View file

@ -1286,6 +1286,7 @@ Vulkan Features = Vulkan features
12HR = 12jang
24HR = 24jang
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Auto
Auto Load Savestate = Auto load savestate
AVI Dump started. = AVI dump started

View file

@ -1302,6 +1302,7 @@ Display Color Formats = Display Color Formats
12HR = 12HR
24HR = 24HR
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Auto
Auto Load Savestate = Auto load savestate
AVI Dump started. = AVI dump started

View file

@ -1287,6 +1287,7 @@ Vulkan Features = Funciones Vulkan
12HR = 12 horas
24HR = 24 horas
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Automático
Auto Load Savestate = Carga automática de estados de guardado
AVI Dump started. = Grabación iniciada.

View file

@ -1288,6 +1288,7 @@ Vulkan Features = Funciones Vulkan
12HR = 12HR
24HR = 24HR
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Automático
Auto Load Savestate = Carga automática de estados de guardado
AVI Dump started. = Grabación iniciada.

View file

@ -1286,6 +1286,7 @@ Vulkan Features = Vulkan features
12HR = 12 ساعت
24HR = 24 ساعت
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = ‎خودکار
Auto Load Savestate = Auto load savestate
AVI Dump started. = AVI dump started

View file

@ -1286,6 +1286,7 @@ Vulkan Features = Vulkan features
12HR = 12HR
24HR = 24HR
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Automaattinen
Auto Load Savestate = Lataa tilatallennus automaattisesti
AVI Dump started. = AVI-tallennus aloitettu.

View file

@ -1277,6 +1277,7 @@ Vulkan Features = Fonctionnalités Vulkan
12HR = 12h
24HR = 24h
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Automatique
Auto Load Savestate = Charger un état automatiquement
AVI Dump started. = Dump AVI démarré

View file

@ -1286,6 +1286,7 @@ Vulkan Features = Vulkan features
12HR = 12 hrs
24HR = 24 hrs
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Auto
Auto Load Savestate = Auto load savestate
AVI Dump started. = AVI dump started

View file

@ -1286,6 +1286,7 @@ Vulkan Features = Δυνατότητες Vulkan
12HR = 12ωρο
24HR = 24ωρο
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Auto
Auto Load Savestate = Auto load savestate
AVI Dump started. = Καταγραφή AVI ξεκίνησε.

View file

@ -1286,6 +1286,7 @@ Vulkan Features = Vulkan features
12HR = PM/FM
24HR = 24HR
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Auto
Auto Load Savestate = Auto load savestate
AVI Dump started. = AVI dump started

View file

@ -1286,6 +1286,7 @@ Vulkan Features = Vulkan features
12HR = PM/FM
24HR = 24HR
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Auto
Auto Load Savestate = Auto load savestate
AVI Dump started. = AVI dump started

View file

@ -1286,6 +1286,7 @@ Vulkan Features = Vulkan svojstva
12HR = 12HR
24HR = 24HR
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Auto
Auto Load Savestate = Auto učitaj savestate
AVI Dump started. = AVI dump započelo

View file

@ -1286,6 +1286,7 @@ Vulkan Features = Vulkan funkciók
12HR = 12ó
24HR = 24ó
App switching mode = Alkalmazásváltás módja
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Auto
Auto Load Savestate = Állapotmentés automatikus betöltése
AVI Dump started. = AVI írás elindítva

View file

@ -1286,6 +1286,7 @@ Vulkan Features = Fitur-fitur Vulkan
12HR = 12 jam
24HR = 24 jam
App switching mode = Mode peralihan aplikasi
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Otomatis
Auto Load Savestate = Muat otomatis simpanan status
AVI Dump started. = Pembuangan AVI dimulai.

View file

@ -1287,6 +1287,7 @@ Vulkan Features = Funzionalità Vulkan
12HR = 12 ore
24HR = 24 ore
App switching mode = Modalità di commutazione delle app
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Automatico
Auto Load Savestate = Carica automaticam. uno stato
AVI Dump started. = Dump AVI avviato

View file

@ -1286,6 +1286,7 @@ Vulkan Features = Vulkanの機能
12HR = 12時間
24HR = 24時間
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = 自動
Auto Load Savestate = 自動的にセーブステートをロードする
AVI Dump started. = AVIダンプを開始しました

View file

@ -1286,6 +1286,7 @@ Vulkan Features = Vulkan features
12HR = 12-Jam
24HR = 24-Jam
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Otomatis
Auto Load Savestate = Auto load savestate
AVI Dump started. = AVI dump started

View file

@ -1278,6 +1278,7 @@ Display Color Formats = 디스플레이 색상 형식
12HR = 12시간
24HR = 24시간
App switching mode = 앱 전환 모드
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = 자동
Auto Load Savestate = 상태 저장 자동 불러오기
AVI Dump started. = AVI 덤프가 시작됨

View file

@ -1292,6 +1292,7 @@ Display Color Formats = Display Color Formats
12HR = 12 کاتژمێری
24HR = 24 کاتژمێری
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Auto
Auto Load Savestate = Auto load savestate
AVI Dump started. = AVI dump started

View file

@ -1286,6 +1286,7 @@ Vulkan Features = Vulkan features
12HR = 12 ຊົ່ວໂມງ
24HR = 24 ຊົ່ວໂມງ
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = ອັດຕະໂນມັດ
Auto Load Savestate = Auto load savestate
AVI Dump started. = ເລີ່ມຖ່າຍໂອນຂໍ້ມູນ AVI ແລ້ວ.

View file

@ -1286,6 +1286,7 @@ Vulkan Features = Vulkan features
12HR = 12HR
24HR = 24HR
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Auto
Auto Load Savestate = Auto load savestate
AVI Dump started. = AVI dump started

View file

@ -1286,6 +1286,7 @@ Vulkan Features = Vulkan features
12HR = 12 JAM
24HR = 24 JAM
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Auto
Auto Load Savestate = Auto load savestate
AVI Dump started. = AVI dump started

View file

@ -1286,6 +1286,7 @@ Vulkan Features = Vulkan-functies
12HR = 12-uursweergave
24HR = 24-uursweergave
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Auto
Auto Load Savestate = Auto load savestate
AVI Dump started. = AVI-dump gestart

View file

@ -1286,6 +1286,7 @@ Vulkan Features = Vulkan features
12HR = 12HR
24HR = 24HR
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Auto
Auto Load Savestate = Auto load savestate
AVI Dump started. = AVI dump started

View file

@ -1291,6 +1291,7 @@ Vulkan Features = Opcje Vulkana
12HR = 12 godzinny
24HR = 24 godzinny
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Automatyczny
Auto Load Savestate = Automatyczne wczytywanie stanów zapisu
AVI Dump started. = Rozpoczęto zrzut do AVI

View file

@ -1302,6 +1302,7 @@ Display Color Formats = Exibir Formatos das Cores
12HR = 12 HRs
24HR = 24 HRs
App switching mode = Modo de troca do App
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Auto
Auto Load Savestate = Auto-carregar o state salvo
AVI Dump started. = Dump do AVI iniciado

View file

@ -1304,6 +1304,7 @@ Display Color Formats = Mostrar Formatos das Cores
12HR = 12 HRs
24HR = 24 HRs
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Automático
Auto Load Savestate = Carregar automaticamente o Estado salvo
AVI Dump started. = Dump do AVI iniciado

View file

@ -1287,6 +1287,7 @@ Vulkan Features = Vulkan features
12HR = 12HR
24HR = 24HR
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Auto
Auto Load Savestate = Auto load savestate
AVI Dump started. = AVI dump started

View file

@ -1286,6 +1286,7 @@ Vulkan Features = Возможности Vulkan
12HR = 12-часовой
24HR = 24-часовой
App switching mode = Режим переключения приложений
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Авто
Auto Load Savestate = Автозагрузка состояния
AVI Dump started. = Дамп AVI запущен

View file

@ -1287,6 +1287,7 @@ Vulkan Features = Vulkan-features
12HR = 12HR
24HR = 24HR
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Auto
Auto Load Savestate = Ladda savestate automatiskt
AVI Dump started. = AVI dump started

View file

@ -1289,6 +1289,7 @@ Vulkan Features = Mga Features ni Vulkan
12HR = 12 Oras
24HR = 24 Oras
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Awto
Auto Load Savestate = Awtomatik na pag load sa savestate
AVI Dump started. = Nasimula na ang AVI dump

View file

@ -1324,6 +1324,7 @@ Warning = คำเตือน
12HR = 12 ชั่วโมง
24HR = 24 ชั่วโมง
App switching mode = โหมดการสลับแอพ
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = อัตโนมัติ
Auto Load Savestate = โหลดเซฟสเตทให้อัตโนมัติ
AVI Dump started. = เริ่มการอัดบันทึกวีดีโอ

View file

@ -1287,6 +1287,7 @@ Vulkan Features = Vulkan özellikleri
12HR = 12 saat
24HR = 24 saat
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Otomatik
Auto Load Savestate = Otomatik durum kaydı yükle
AVI Dump started. = AVI kaydı başladı.

View file

@ -1286,6 +1286,7 @@ Vulkan Features = Особливості Vulkan
12HR = 12 годин
24HR = 24 години
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Авто
Auto Load Savestate = Автоматичне завантаження збережень
AVI Dump started. = Дамп AVI запущено

View file

@ -1286,6 +1286,7 @@ Vulkan Features = Tính năng Vulkan
12HR = 12H
24HR = 24H
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = Tự động
Auto Load Savestate = Auto load savestate
AVI Dump started. = Đưa AVI vào bắt đầu

View file

@ -1279,6 +1279,7 @@ No GPU driver bugs detected = GPU驱动运行良好
12HR = 12小时制
24HR = 24小时制
App switching mode = App 切换模式
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = 自动
Auto Load Savestate = 自动载入即时存档
AVI Dump started. = AVI转储开始

View file

@ -1278,6 +1278,7 @@ Display Color Formats = 顯示器色彩格式
12HR = 12 小時制
24HR = 24 小時制
App switching mode = App switching mode
Ask for exit confirmation after seconds = Ask for exit confirmation after seconds
Auto = 自動
Auto Load Savestate = 自動載入存檔
AVI Dump started. = AVI 傾印已啟動