Partially revert "Revert "Audit uses of IsRunning and GetState""

This reverts the revert commit bc67fc97c3,
except for the changes in BaseConfigLoader.cpp, which caused the bug
that made us revert 72cf2bdb87. PR 12917
contains an improved change to BaseConfigLoader.cpp, which can be merged
(or rejected) independently.

A few changes have also been made based on review comments.
This commit is contained in:
JosJuice
2024-10-04 18:35:41 +02:00
parent 2da3e49b1e
commit 6ca2da53e8
33 changed files with 143 additions and 114 deletions
@@ -381,10 +381,16 @@ public final class NativeLibrary
*/
public static native boolean IsRunning();
public static native boolean IsRunningAndStarted();
/**
* Returns true if emulation is running and not paused.
*/
public static native boolean IsRunningAndUnpaused();
/**
* Returns true if emulation is fully shut down.
*/
public static native boolean IsUninitialized();
/**
* Writes out the JitBlock Cache log dump
*/
@@ -36,7 +36,7 @@ class Settings : Closeable {
if (isGameSpecific) {
// Loading game INIs while the core is running will mess with the game INIs loaded by the core
check(!NativeLibrary.IsRunning()) { "Attempted to load game INI while emulating" }
check(NativeLibrary.IsUninitialized()) { "Attempted to load game INI while emulating" }
NativeConfig.loadGameInis(gameId, revision)
}
}
@@ -20,5 +20,5 @@ class RunRunnable(
override val setting: AbstractSetting? = null
override val isEditable: Boolean
get() = worksDuringEmulation || !NativeLibrary.IsRunning()
get() = worksDuringEmulation || NativeLibrary.IsUninitialized()
}
@@ -54,7 +54,7 @@ abstract class SettingsItem {
open val isEditable: Boolean
get() {
if (!NativeLibrary.IsRunning()) return true
if (NativeLibrary.IsUninitialized()) return true
val setting = setting
return setting != null && setting.isRuntimeEditable
}
@@ -69,7 +69,7 @@ class SettingsFragmentPresenter(
} else if (
menuTag == MenuTag.GRAPHICS
&& this.gameId.isNullOrEmpty()
&& !NativeLibrary.IsRunning()
&& NativeLibrary.IsUninitialized()
&& GpuDriverHelper.supportsCustomDriverLoading()
) {
this.gpuDriver =
@@ -1303,7 +1303,7 @@ class SettingsFragmentPresenter(
if (
this.gpuDriver != null && this.gameId.isNullOrEmpty()
&& !NativeLibrary.IsRunning()
&& NativeLibrary.IsUninitialized()
&& GpuDriverHelper.supportsCustomDriverLoading()
) {
sl.add(
@@ -180,11 +180,11 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
private fun run(isActivityRecreated: Boolean) {
if (isActivityRecreated) {
if (NativeLibrary.IsRunning()) {
if (NativeLibrary.IsUninitialized()) {
loadPreviousTemporaryState = true
} else {
loadPreviousTemporaryState = false
deleteFile(temporaryStateFilePath)
} else {
loadPreviousTemporaryState = true
}
} else {
Log.debug("[EmulationFragment] activity resumed or fresh start")
@@ -203,7 +203,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
private fun runWithValidSurface() {
runWhenSurfaceIsValid = false
if (!NativeLibrary.IsRunning()) {
if (NativeLibrary.IsUninitialized()) {
NativeLibrary.SetIsBooting()
val emulationThread = Thread({
if (loadPreviousTemporaryState) {
@@ -83,7 +83,7 @@ class InputOverlay(context: Context?, attrs: AttributeSet?) : SurfaceView(contex
fun initTouchPointer() {
// Check if we have all the data we need yet
val aspectRatioAvailable = NativeLibrary.IsRunningAndStarted()
val aspectRatioAvailable = NativeLibrary.IsRunning()
if (!aspectRatioAvailable || surfacePosition == null)
return
+8 -9
View File
@@ -118,8 +118,7 @@ void Host_Message(HostMessageID id)
}
else if (id == HostMessageID::WMUserStop)
{
if (Core::IsRunning(Core::System::GetInstance()))
Core::QueueHostJob(&Core::Stop);
Core::QueueHostJob(&Core::Stop);
}
}
@@ -276,13 +275,6 @@ JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_SetIsBooting
}
JNIEXPORT jboolean JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_IsRunning(JNIEnv*, jclass)
{
return s_is_booting.IsSet() ||
static_cast<jboolean>(Core::IsRunning(Core::System::GetInstance()));
}
JNIEXPORT jboolean JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_IsRunningAndStarted(JNIEnv*,
jclass)
{
return static_cast<jboolean>(Core::IsRunning(Core::System::GetInstance()));
}
@@ -293,6 +285,13 @@ Java_org_dolphinemu_dolphinemu_NativeLibrary_IsRunningAndUnpaused(JNIEnv*, jclas
return static_cast<jboolean>(Core::GetState(Core::System::GetInstance()) == Core::State::Running);
}
JNIEXPORT jboolean JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_IsUninitialized(JNIEnv*,
jclass)
{
return static_cast<jboolean>(Core::IsUninitialized(Core::System::GetInstance()) &&
!s_is_booting.IsSet());
}
JNIEXPORT jstring JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_GetVersionString(JNIEnv* env,
jclass)
{
+6 -1
View File
@@ -211,6 +211,11 @@ bool IsRunningOrStarting(Core::System& system)
return state == State::Running || state == State::Starting;
}
bool IsUninitialized(Core::System& system)
{
return s_state.load() == State::Uninitialized;
}
bool IsCPUThread()
{
return tls_is_cpu_thread;
@@ -237,7 +242,7 @@ bool Init(Core::System& system, std::unique_ptr<BootParameters> boot, const Wind
{
if (s_emu_thread.joinable())
{
if (IsRunning(system))
if (!IsUninitialized(system))
{
PanicAlertFmtT("Emu Thread already running");
return false;
+5
View File
@@ -134,8 +134,13 @@ void UndeclareAsHostThread();
std::string StopMessage(bool main_thread, std::string_view message);
// Returns true when GetState returns Running or Paused.
bool IsRunning(Core::System& system);
// Returns true when GetState returns Starting, Running or Paused.
bool IsRunningOrStarting(Core::System& system);
// Returns true when GetState returns Uninitialized.
bool IsUninitialized(Core::System& system);
bool IsCPUThread(); // this tells us whether we are the CPU thread.
bool IsGPUThread();
bool IsHostThread();
+1 -1
View File
@@ -533,7 +533,7 @@ bool EmulationKernel::BootIOS(const u64 ios_title_id, HangPPC hang_ppc,
void EmulationKernel::InitIPC()
{
if (Core::GetState(m_system) == Core::State::Uninitialized)
if (Core::IsUninitialized(m_system))
return;
INFO_LOG_FMT(IOS, "IPC initialised.");
@@ -177,6 +177,8 @@ void AchievementSettingsWidget::OnControllerInterfaceConfigure()
void AchievementSettingsWidget::LoadSettings()
{
Core::System& system = Core::System::GetInstance();
bool enabled = Config::Get(Config::RA_ENABLED);
bool hardcore_enabled = Config::Get(Config::RA_HARDCORE_ENABLED);
bool logged_out = Config::Get(Config::RA_API_TOKEN).empty();
@@ -192,27 +194,20 @@ void AchievementSettingsWidget::LoadSettings()
SignalBlocking(m_common_password_input)->setVisible(logged_out);
SignalBlocking(m_common_password_input)->setEnabled(enabled);
SignalBlocking(m_common_login_button)->setVisible(logged_out);
SignalBlocking(m_common_login_button)
->setEnabled(enabled && !Core::IsRunning(Core::System::GetInstance()));
if (enabled && Core::IsRunning(Core::System::GetInstance()))
{
SignalBlocking(m_common_login_button)->setText(tr("To log in, stop the current emulation."));
}
else
{
SignalBlocking(m_common_login_button)->setEnabled(enabled && Core::IsUninitialized(system));
if (!enabled || Core::IsUninitialized(system))
SignalBlocking(m_common_login_button)->setText(tr("Log In"));
}
else
SignalBlocking(m_common_login_button)->setText(tr("To log in, stop the current emulation."));
SignalBlocking(m_common_logout_button)->setVisible(!logged_out);
SignalBlocking(m_common_logout_button)->setEnabled(enabled);
SignalBlocking(m_common_hardcore_enabled_input)
->setChecked(Config::Get(Config::RA_HARDCORE_ENABLED));
auto& system = Core::System::GetInstance();
SignalBlocking(m_common_hardcore_enabled_input)
->setEnabled(enabled &&
(hardcore_enabled || (Core::GetState(system) == Core::State::Uninitialized &&
!system.GetMovie().IsPlayingInput())));
->setEnabled(enabled && (hardcore_enabled || (Core::IsUninitialized(system) &&
!system.GetMovie().IsPlayingInput())));
SignalBlocking(m_common_unofficial_enabled_input)
->setChecked(Config::Get(Config::RA_UNOFFICIAL_ENABLED));
@@ -159,8 +159,7 @@ void CheatSearchFactoryWidget::OnNewSearchClicked()
if (m_standard_address_space->isChecked())
{
auto& system = Core::System::GetInstance();
const Core::State core_state = Core::GetState(system);
if (core_state != Core::State::Running && core_state != Core::State::Paused)
if (!Core::IsRunning(system))
{
ModalMessageBox::warning(
this, tr("No game running."),
+3 -2
View File
@@ -102,8 +102,9 @@ void CheatsManager::RefreshCodeTabs(Core::State state)
if (state == Core::State::Starting || state == Core::State::Stopping)
return;
const auto& game_id =
state != Core::State::Uninitialized ? SConfig::GetInstance().GetGameID() : std::string();
const auto& game_id = state == Core::State::Running || state == Core::State::Paused ?
SConfig::GetInstance().GetGameID() :
std::string();
const auto& game_tdb_id = SConfig::GetInstance().GetGameTDBID();
const u16 revision = SConfig::GetInstance().GetRevision();
@@ -24,8 +24,9 @@ CheatWarningWidget::CheatWarningWidget(const std::string& game_id, bool restart_
connect(&Settings::Instance(), &Settings::EnableCheatsChanged, this,
[this] { Update(Core::IsRunning(Core::System::GetInstance())); });
connect(&Settings::Instance(), &Settings::EmulationStateChanged, this,
[this](Core::State state) { Update(state == Core::State::Running); });
connect(&Settings::Instance(), &Settings::EmulationStateChanged, this, [this](Core::State state) {
Update(state == Core::State::Running || state == Core::State::Paused);
});
Update(Core::IsRunning(Core::System::GetInstance()));
}
@@ -43,8 +43,7 @@ AdvancedWidget::AdvancedWidget(GraphicsWindow* parent)
});
OnBackendChanged();
OnEmulationStateChanged(Core::GetState(Core::System::GetInstance()) !=
Core::State::Uninitialized);
OnEmulationStateChanged(!Core::IsUninitialized(Core::System::GetInstance()));
}
void AdvancedWidget::CreateWidgets()
@@ -44,8 +44,7 @@ GeneralWidget::GeneralWidget(GraphicsWindow* parent)
connect(&Settings::Instance(), &Settings::EmulationStateChanged, this, [this](Core::State state) {
OnEmulationStateChanged(state != Core::State::Uninitialized);
});
OnEmulationStateChanged(Core::GetState(Core::System::GetInstance()) !=
Core::State::Uninitialized);
OnEmulationStateChanged(!Core::IsUninitialized(Core::System::GetInstance()));
}
void GeneralWidget::CreateWidgets()
@@ -361,7 +360,8 @@ void GeneralWidget::OnBackendChanged(const QString& backend_name)
const bool supports_adapters = !adapters.empty();
m_adapter_combo->setCurrentIndex(g_Config.iAdapter);
m_adapter_combo->setEnabled(supports_adapters && !Core::IsRunning(Core::System::GetInstance()));
m_adapter_combo->setEnabled(supports_adapters &&
Core::IsUninitialized(Core::System::GetInstance()));
static constexpr char TR_ADAPTER_AVAILABLE_DESCRIPTION[] =
QT_TR_NOOP("Selects a hardware adapter to use.<br><br>"
@@ -791,7 +791,7 @@ bool AssemblerWidget::SaveEditor(AsmEditor* editor)
void AssemblerWidget::OnEmulationStateChanged(Core::State state)
{
m_inject->setEnabled(state != Core::State::Uninitialized);
m_inject->setEnabled(state == Core::State::Running || state == Core::State::Paused);
}
void AssemblerWidget::OnTabClose(int index)
@@ -257,9 +257,9 @@ void BreakpointWidget::UpdateButtonsEnabled()
if (!isVisible())
return;
const bool is_initialised = Core::GetState(m_system) != Core::State::Uninitialized;
m_load->setEnabled(is_initialised);
m_save->setEnabled(is_initialised);
const bool is_running = Core::IsRunning(m_system);
m_load->setEnabled(is_running);
m_save->setEnabled(is_running);
}
void BreakpointWidget::Update()
@@ -565,7 +565,7 @@ void CodeViewWidget::OnContextMenu()
QMenu* menu = new QMenu(this);
menu->setAttribute(Qt::WA_DeleteOnClose, true);
const bool running = Core::GetState(m_system) != Core::State::Uninitialized;
const bool running = Core::IsRunning(m_system);
const bool paused = Core::GetState(m_system) == Core::State::Paused;
const u32 addr = GetContextAddress();

Some files were not shown because too many files have changed in this diff Show More