diff --git a/Source/Core/Core/Analytics.cpp b/Source/Core/Core/Analytics.cpp index f423527d34..b3cddedf16 100644 --- a/Source/Core/Core/Analytics.cpp +++ b/Source/Core/Core/Analytics.cpp @@ -193,7 +193,6 @@ void DolphinAnalytics::MakePerGameBuilder() builder.AddData("cfg-dsp-jit", SConfig::GetInstance().m_DSPEnableJIT); builder.AddData("cfg-dsp-thread", SConfig::GetInstance().bDSPThread); builder.AddData("cfg-cpu-thread", SConfig::GetInstance().bCPUThread); - builder.AddData("cfg-idle-skip", SConfig::GetInstance().bSkipIdle); builder.AddData("cfg-fastmem", SConfig::GetInstance().bFastmem); builder.AddData("cfg-syncgpu", SConfig::GetInstance().bSyncGPU); builder.AddData("cfg-audio-backend", SConfig::GetInstance().sBackend); diff --git a/Source/Core/Core/Boot/Boot.cpp b/Source/Core/Core/Boot/Boot.cpp index 37f51eaaff..76ab156221 100644 --- a/Source/Core/Core/Boot/Boot.cpp +++ b/Source/Core/Core/Boot/Boot.cpp @@ -302,7 +302,7 @@ bool CBoot::BootUp() } // Scan for common HLE functions - if (_StartupPara.bSkipIdle && _StartupPara.bHLE_BS2 && !_StartupPara.bEnableDebugging) + if (_StartupPara.bHLE_BS2 && !_StartupPara.bEnableDebugging) { PPCAnalyst::FindFunctions(0x80004000, 0x811fffff, &g_symbolDB); SignatureDB db; diff --git a/Source/Core/Core/BootManager.cpp b/Source/Core/Core/BootManager.cpp index 732955cf5e..e4dad38079 100644 --- a/Source/Core/Core/BootManager.cpp +++ b/Source/Core/Core/BootManager.cpp @@ -65,7 +65,6 @@ private: bool valid; bool bCPUThread; bool bEnableCheats; - bool bSkipIdle; bool bSyncGPUOnSkipIdleHack; bool bFPRF; bool bAccurateNaNs; @@ -97,7 +96,6 @@ void ConfigCache::SaveConfig(const SConfig& config) bCPUThread = config.bCPUThread; bEnableCheats = config.bEnableCheats; - bSkipIdle = config.bSkipIdle; bSyncGPUOnSkipIdleHack = config.bSyncGPUOnSkipIdleHack; bFPRF = config.bFPRF; bAccurateNaNs = config.bAccurateNaNs; @@ -140,7 +138,6 @@ void ConfigCache::RestoreConfig(SConfig* config) config->bCPUThread = bCPUThread; config->bEnableCheats = bEnableCheats; - config->bSkipIdle = bSkipIdle; config->bSyncGPUOnSkipIdleHack = bSyncGPUOnSkipIdleHack; config->bFPRF = bFPRF; config->bAccurateNaNs = bAccurateNaNs; @@ -250,7 +247,6 @@ bool BootCore(const std::string& _rFilename) core_section->Get("CPUThread", &StartUp.bCPUThread, StartUp.bCPUThread); core_section->Get("EnableCheats", &StartUp.bEnableCheats, StartUp.bEnableCheats); - core_section->Get("SkipIdle", &StartUp.bSkipIdle, StartUp.bSkipIdle); core_section->Get("SyncOnSkipIdle", &StartUp.bSyncGPUOnSkipIdleHack, StartUp.bSyncGPUOnSkipIdleHack); core_section->Get("FPRF", &StartUp.bFPRF, StartUp.bFPRF); @@ -330,7 +326,6 @@ bool BootCore(const std::string& _rFilename) if (Movie::IsPlayingInput() && Movie::IsConfigSaved()) { StartUp.bCPUThread = Movie::IsDualCore(); - StartUp.bSkipIdle = Movie::IsSkipIdle(); StartUp.bDSPHLE = Movie::IsDSPHLE(); StartUp.bProgressive = Movie::IsProgressive(); StartUp.bPAL60 = Movie::IsPAL60(); diff --git a/Source/Core/Core/ConfigManager.cpp b/Source/Core/Core/ConfigManager.cpp index 86cc0b4b1e..e49b5cbd88 100644 --- a/Source/Core/Core/ConfigManager.cpp +++ b/Source/Core/Core/ConfigManager.cpp @@ -220,7 +220,6 @@ void SConfig::SaveCoreSettings(IniFile& ini) core->Set("Fastmem", bFastmem); core->Set("CPUThread", bCPUThread); core->Set("DSPHLE", bDSPHLE); - core->Set("SkipIdle", bSkipIdle); core->Set("SyncOnSkipIdle", bSyncGPUOnSkipIdleHack); core->Set("SyncGPU", bSyncGPU); core->Set("SyncGpuMaxDistance", iSyncGpuMaxDistance); @@ -493,7 +492,6 @@ void SConfig::LoadCoreSettings(IniFile& ini) core->Get("DSPHLE", &bDSPHLE, true); core->Get("TimingVariance", &iTimingVariance, 40); core->Get("CPUThread", &bCPUThread, true); - core->Get("SkipIdle", &bSkipIdle, true); core->Get("SyncOnSkipIdle", &bSyncGPUOnSkipIdleHack, true); core->Get("DefaultISO", &m_strDefaultISO); core->Get("DVDRoot", &m_strDVDRoot); @@ -644,7 +642,6 @@ void SConfig::LoadDefaults() iCPUCore = PowerPC::CORE_JIT64; iTimingVariance = 40; bCPUThread = false; - bSkipIdle = false; bSyncGPUOnSkipIdleHack = true; bRunCompareServer = false; bDSPHLE = true; diff --git a/Source/Core/Core/ConfigManager.h b/Source/Core/Core/ConfigManager.h index 5ea7a58386..d76cf4d83b 100644 --- a/Source/Core/Core/ConfigManager.h +++ b/Source/Core/Core/ConfigManager.h @@ -92,7 +92,6 @@ struct SConfig : NonCopyable bool bCPUThread = true; bool bDSPThread = false; bool bDSPHLE = true; - bool bSkipIdle = true; bool bSyncGPUOnSkipIdleHack = true; bool bNTSC = false; bool bForceNTSCJ = false; diff --git a/Source/Core/Core/Core.cpp b/Source/Core/Core/Core.cpp index e135a60be8..c322997cad 100644 --- a/Source/Core/Core/Core.cpp +++ b/Source/Core/Core/Core.cpp @@ -924,11 +924,9 @@ void UpdateTitle() float TicksPercentage = (float)diff / (float)(SystemTimers::GetTicksPerSecond() / 1000000) * 100; - SFPS += - StringFromFormat(" | CPU: %s%i MHz [Real: %i + IdleSkip: %i] / %i MHz (%s%3.0f%%)", - _CoreParameter.bSkipIdle ? "~" : "", (int)(diff), (int)(diff - idleDiff), - (int)(idleDiff), SystemTimers::GetTicksPerSecond() / 1000000, - _CoreParameter.bSkipIdle ? "~" : "", TicksPercentage); + SFPS += StringFromFormat(" | CPU: ~%i MHz [Real: %i + IdleSkip: %i] / %i MHz (~%3.0f%%)", + (int)(diff), (int)(diff - idleDiff), (int)(idleDiff), + SystemTimers::GetTicksPerSecond() / 1000000, TicksPercentage); } } // This is our final "frame counter" string diff --git a/Source/Core/Core/Movie.cpp b/Source/Core/Core/Movie.cpp index 702fe58e54..68ee999952 100644 --- a/Source/Core/Core/Movie.cpp +++ b/Source/Core/Core/Movie.cpp @@ -67,7 +67,7 @@ static u64 s_totalLagCount = 0; // just stats static u64 s_currentInputCount = 0, s_totalInputCount = 0; // just stats static u64 s_totalTickCount = 0, s_tickCountAtLastInput = 0; // just stats static u64 s_recordingStartTime; // seconds since 1970 that recording started -static bool s_bSaveConfig = false, s_bSkipIdle = false, s_bDualCore = false; +static bool s_bSaveConfig = false, s_bDualCore = false; static bool s_bProgressive = false, s_bPAL60 = false; static bool s_bDSPHLE = false, s_bFastDiscSpeed = false; static bool s_bSyncGPU = false, s_bNetPlay = false; @@ -477,11 +477,6 @@ bool IsPAL60() return s_bPAL60; } -bool IsSkipIdle() -{ - return s_bSkipIdle; -} - bool IsDSPHLE() { return s_bDSPHLE; @@ -952,7 +947,6 @@ void ReadHeader() if (tmpHeader.bSaveConfig) { s_bSaveConfig = true; - s_bSkipIdle = tmpHeader.bSkipIdle; s_bDualCore = tmpHeader.bDualCore; s_bProgressive = tmpHeader.bProgressive; s_bPAL60 = tmpHeader.bPAL60; @@ -1432,7 +1426,7 @@ void SaveRecording(const std::string& filename) header.recordingStartTime = s_recordingStartTime; header.bSaveConfig = true; - header.bSkipIdle = s_bSkipIdle; + header.bSkipIdle = true; header.bDualCore = s_bDualCore; header.bProgressive = s_bProgressive; header.bPAL60 = s_bPAL60; @@ -1518,7 +1512,6 @@ void SetGraphicsConfig() void GetSettings() { s_bSaveConfig = true; - s_bSkipIdle = SConfig::GetInstance().bSkipIdle; s_bDualCore = SConfig::GetInstance().bCPUThread; s_bProgressive = SConfig::GetInstance().bProgressive; s_bPAL60 = SConfig::GetInstance().bPAL60; diff --git a/Source/Core/Core/PowerPC/Interpreter/Interpreter_Branch.cpp b/Source/Core/Core/PowerPC/Interpreter/Interpreter_Branch.cpp index 93530f0c80..ea1766a2fd 100644 --- a/Source/Core/Core/PowerPC/Interpreter/Interpreter_Branch.cpp +++ b/Source/Core/Core/PowerPC/Interpreter/Interpreter_Branch.cpp @@ -22,7 +22,7 @@ void Interpreter::bx(UGeckoInstruction _inst) m_EndBlock = true; - if (NPC == PC && SConfig::GetInstance().bSkipIdle) + if (NPC == PC) { CoreTiming::Idle(); } @@ -58,7 +58,7 @@ void Interpreter::bcx(UGeckoInstruction _inst) // lwz r0, XXXX(r13) // cmpXwi r0,0 // beq -8 - if (NPC == PC - 8 && _inst.hex == 0x4182fff8 /* beq */ && SConfig::GetInstance().bSkipIdle) + if (NPC == PC - 8 && _inst.hex == 0x4182fff8 /* beq */) { if (PowerPC::HostRead_U32(PC - 8) >> 16 == 0x800D /* lwz */) { diff --git a/Source/Core/Core/PowerPC/Jit64/Jit_LoadStore.cpp b/Source/Core/Core/PowerPC/Jit64/Jit_LoadStore.cpp index 24eb65dc1d..98d547e584 100644 --- a/Source/Core/Core/PowerPC/Jit64/Jit_LoadStore.cpp +++ b/Source/Core/Core/PowerPC/Jit64/Jit_LoadStore.cpp @@ -117,26 +117,12 @@ void Jit64::lXXx(UGeckoInstruction inst) signExtend = true; } - // TODO(ector): Make it dynamically enable/disable idle skipping where appropriate - // Will give nice boost to dual core mode - // (mb2): I agree, - // IMHO those Idles should always be skipped and replaced by a more controllable "native" Idle - // methode - // ... maybe the throttle one already do that :p - // TODO: We shouldn't use a debug read here. It should be possible to get - // the following instructions out of the JIT state. - if (SConfig::GetInstance().bSkipIdle && CPU::GetState() != CPU::CPU_STEPPING && inst.OPCD == 32 && - MergeAllowedNextInstructions(2) && (inst.hex & 0xFFFF0000) == 0x800D0000 && + if (CPU::GetState() != CPU::CPU_STEPPING && inst.OPCD == 32 && MergeAllowedNextInstructions(2) && + (inst.hex & 0xFFFF0000) == 0x800D0000 && (js.op[1].inst.hex == 0x28000000 || (SConfig::GetInstance().bWii && js.op[1].inst.hex == 0x2C000000)) && js.op[2].inst.hex == 0x4182fff8) { - // TODO(LinesPrower): - // - Rewrite this! - // It seems to be ugly and inefficient, but I don't know JIT stuff enough to make it right - // It only demonstrates the idea - - // do our job at first s32 offset = (s32)(s16)inst.SIMM_16; gpr.BindToRegister(a, true, false); gpr.BindToRegister(d, false, true); diff --git a/Source/Core/Core/PowerPC/JitArm64/JitArm64_LoadStore.cpp b/Source/Core/Core/PowerPC/JitArm64/JitArm64_LoadStore.cpp index cddaddfcb0..1bdf4ecb2e 100644 --- a/Source/Core/Core/PowerPC/JitArm64/JitArm64_LoadStore.cpp +++ b/Source/Core/Core/PowerPC/JitArm64/JitArm64_LoadStore.cpp @@ -430,7 +430,7 @@ void JitArm64::lXX(UGeckoInstruction inst) SafeLoadToReg(d, update ? a : (a ? a : -1), offsetReg, flags, offset, update); // LWZ idle skipping - if (SConfig::GetInstance().bSkipIdle && inst.OPCD == 32 && MergeAllowedNextInstructions(2) && + if (inst.OPCD == 32 && MergeAllowedNextInstructions(2) && (inst.hex & 0xFFFF0000) == 0x800D0000 && // lwz r0, XXXX(r13) (js.op[1].inst.hex == 0x28000000 || (SConfig::GetInstance().bWii && js.op[1].inst.hex == 0x2C000000)) && // cmpXwi r0,0 diff --git a/Source/Core/Core/PowerPC/JitILCommon/JitILBase_Branch.cpp b/Source/Core/Core/PowerPC/JitILCommon/JitILBase_Branch.cpp index b545cf05b8..5041ab4118 100644 --- a/Source/Core/Core/PowerPC/JitILCommon/JitILBase_Branch.cpp +++ b/Source/Core/Core/PowerPC/JitILCommon/JitILBase_Branch.cpp @@ -145,7 +145,7 @@ void JitILBase::bcx(UGeckoInstruction inst) // If idle skipping is enabled, then this branch will only be reached when the branch is not // taken. // TODO: We shouldn't use debug reads here. - if (SConfig::GetInstance().bSkipIdle && inst.hex == 0x4182fff8 && + if (inst.hex == 0x4182fff8 && (PowerPC::HostRead_U32(js.compilerPC - 8) & 0xFFFF0000) == 0x800D0000 && (PowerPC::HostRead_U32(js.compilerPC - 4) == 0x28000000 || (SConfig::GetInstance().bWii && PowerPC::HostRead_U32(js.compilerPC - 4) == 0x2C000000))) diff --git a/Source/Core/Core/PowerPC/JitILCommon/JitILBase_LoadStore.cpp b/Source/Core/Core/PowerPC/JitILCommon/JitILBase_LoadStore.cpp index c698a6ae00..99f38b2b18 100644 --- a/Source/Core/Core/PowerPC/JitILCommon/JitILBase_LoadStore.cpp +++ b/Source/Core/Core/PowerPC/JitILCommon/JitILBase_LoadStore.cpp @@ -57,8 +57,7 @@ void JitILBase::lXz(UGeckoInstruction inst) // TODO: This really should be done somewhere else. Either lower in the IR // or higher in PPCAnalyst // TODO: We shouldn't use debug reads here. - if (SConfig::GetInstance().bSkipIdle && CPU::GetState() != CPU::CPU_STEPPING && - inst.OPCD == 32 && // Lwx + if (CPU::GetState() != CPU::CPU_STEPPING && inst.OPCD == 32 && // Lwx (inst.hex & 0xFFFF0000) == 0x800D0000 && (PowerPC::HostRead_U32(js.compilerPC + 4) == 0x28000000 || (SConfig::GetInstance().bWii && PowerPC::HostRead_U32(js.compilerPC + 4) == 0x2C000000)) && diff --git a/Source/Core/DolphinWX/Config/GeneralConfigPane.cpp b/Source/Core/DolphinWX/Config/GeneralConfigPane.cpp index e5f81f7736..78501ba14a 100644 --- a/Source/Core/DolphinWX/Config/GeneralConfigPane.cpp +++ b/Source/Core/DolphinWX/Config/GeneralConfigPane.cpp @@ -54,7 +54,6 @@ void GeneralConfigPane::InitializeGUI() m_cpu_engine_array_string.Add(cpu_core.name); m_dual_core_checkbox = new wxCheckBox(this, wxID_ANY, _("Enable Dual Core (speedup)")); - m_idle_skip_checkbox = new wxCheckBox(this, wxID_ANY, _("Enable Idle Skipping (speedup)")); m_cheats_checkbox = new wxCheckBox(this, wxID_ANY, _("Enable Cheats")); m_force_ntscj_checkbox = new wxCheckBox(this, wxID_ANY, _("Force Console as NTSC-J")); m_analytics_checkbox = new wxCheckBox(this, wxID_ANY, _("Enable Usage Statistics Reporting")); @@ -73,8 +72,6 @@ void GeneralConfigPane::InitializeGUI() m_dual_core_checkbox->SetToolTip( _("Splits the CPU and GPU threads so they can be run on separate cores.\nProvides major " "speed improvements on most modern PCs, but can cause occasional crashes/glitches.")); - m_idle_skip_checkbox->SetToolTip( - _("Attempt to detect and skip wait-loops.\nIf unsure, leave this checked.")); m_cheats_checkbox->SetToolTip(_("Enables the use of Action Replay and Gecko cheats.")); m_force_ntscj_checkbox->SetToolTip( _("Forces NTSC-J mode for using the Japanese ROM font.\nIf left unchecked, Dolphin defaults " @@ -92,7 +89,6 @@ void GeneralConfigPane::InitializeGUI() "or lower the audio pitch to prevent audio from stuttering.")); m_dual_core_checkbox->Bind(wxEVT_CHECKBOX, &GeneralConfigPane::OnDualCoreCheckBoxChanged, this); - m_idle_skip_checkbox->Bind(wxEVT_CHECKBOX, &GeneralConfigPane::OnIdleSkipCheckBoxChanged, this); m_cheats_checkbox->Bind(wxEVT_CHECKBOX, &GeneralConfigPane::OnCheatCheckBoxChanged, this); m_force_ntscj_checkbox->Bind(wxEVT_CHECKBOX, &GeneralConfigPane::OnForceNTSCJCheckBoxChanged, this); @@ -116,8 +112,6 @@ void GeneralConfigPane::InitializeGUI() basic_settings_sizer->AddSpacer(space5); basic_settings_sizer->Add(m_dual_core_checkbox, 0, wxLEFT | wxRIGHT, space5); basic_settings_sizer->AddSpacer(space5); - basic_settings_sizer->Add(m_idle_skip_checkbox, 0, wxLEFT | wxRIGHT, space5); - basic_settings_sizer->AddSpacer(space5); basic_settings_sizer->Add(m_cheats_checkbox, 0, wxLEFT | wxRIGHT, space5); basic_settings_sizer->AddSpacer(space5); basic_settings_sizer->Add(throttler_sizer); @@ -155,7 +149,6 @@ void GeneralConfigPane::LoadGUIValues() const SConfig& startup_params = SConfig::GetInstance(); m_dual_core_checkbox->SetValue(startup_params.bCPUThread); - m_idle_skip_checkbox->SetValue(startup_params.bSkipIdle); m_cheats_checkbox->SetValue(startup_params.bEnableCheats); m_force_ntscj_checkbox->SetValue(startup_params.bForceNTSCJ); m_analytics_checkbox->SetValue(startup_params.m_analytics_enabled); @@ -175,7 +168,6 @@ void GeneralConfigPane::RefreshGUI() if (Core::IsRunning()) { m_dual_core_checkbox->Disable(); - m_idle_skip_checkbox->Disable(); m_cheats_checkbox->Disable(); m_force_ntscj_checkbox->Disable(); m_cpu_engine_radiobox->Disable(); @@ -190,11 +182,6 @@ void GeneralConfigPane::OnDualCoreCheckBoxChanged(wxCommandEvent& event) SConfig::GetInstance().bCPUThread = m_dual_core_checkbox->IsChecked(); } -void GeneralConfigPane::OnIdleSkipCheckBoxChanged(wxCommandEvent& event) -{ - SConfig::GetInstance().bSkipIdle = m_idle_skip_checkbox->IsChecked(); -} - void GeneralConfigPane::OnCheatCheckBoxChanged(wxCommandEvent& event) { SConfig::GetInstance().bEnableCheats = m_cheats_checkbox->IsChecked(); diff --git a/Source/Core/DolphinWX/Config/GeneralConfigPane.h b/Source/Core/DolphinWX/Config/GeneralConfigPane.h index f185319b7a..5425cc8ee3 100644 --- a/Source/Core/DolphinWX/Config/GeneralConfigPane.h +++ b/Source/Core/DolphinWX/Config/GeneralConfigPane.h @@ -29,7 +29,6 @@ private: void RefreshGUI(); void OnDualCoreCheckBoxChanged(wxCommandEvent&); - void OnIdleSkipCheckBoxChanged(wxCommandEvent&); void OnCheatCheckBoxChanged(wxCommandEvent&); void OnForceNTSCJCheckBoxChanged(wxCommandEvent&); void OnThrottlerChoiceChanged(wxCommandEvent&); @@ -41,7 +40,6 @@ private: wxArrayString m_cpu_engine_array_string; wxCheckBox* m_dual_core_checkbox; - wxCheckBox* m_idle_skip_checkbox; wxCheckBox* m_cheats_checkbox; wxCheckBox* m_force_ntscj_checkbox; diff --git a/Source/Core/DolphinWX/Frame.cpp b/Source/Core/DolphinWX/Frame.cpp index 92f4fac8fb..01caa28fa6 100644 --- a/Source/Core/DolphinWX/Frame.cpp +++ b/Source/Core/DolphinWX/Frame.cpp @@ -288,7 +288,6 @@ EVT_MENU(IDM_FIFOPLAYER, CFrame::OnFifoPlayer) EVT_MENU(IDM_TOGGLE_FULLSCREEN, CFrame::OnToggleFullscreen) EVT_MENU(IDM_TOGGLE_DUAL_CORE, CFrame::OnToggleDualCore) -EVT_MENU(IDM_TOGGLE_SKIP_IDLE, CFrame::OnToggleSkipIdle) EVT_MENU(IDM_TOGGLE_TOOLBAR, CFrame::OnToggleToolbar) EVT_MENU(IDM_TOGGLE_STATUSBAR, CFrame::OnToggleStatusbar) EVT_MENU_RANGE(IDM_LOG_WINDOW, IDM_VIDEO_WINDOW, CFrame::OnToggleWindow) diff --git a/Source/Core/DolphinWX/Frame.h b/Source/Core/DolphinWX/Frame.h index 32335f2b44..380437205b 100644 --- a/Source/Core/DolphinWX/Frame.h +++ b/Source/Core/DolphinWX/Frame.h @@ -294,7 +294,6 @@ private: void OnToggleFullscreen(wxCommandEvent& event); void OnToggleDualCore(wxCommandEvent& event); - void OnToggleSkipIdle(wxCommandEvent& event); void OnManagerResize(wxAuiManagerEvent& event); void OnMove(wxMoveEvent& event); void OnResize(wxSizeEvent& event); diff --git a/Source/Core/DolphinWX/FrameTools.cpp b/Source/Core/DolphinWX/FrameTools.cpp index 52bca00dc2..ecc692f113 100644 --- a/Source/Core/DolphinWX/FrameTools.cpp +++ b/Source/Core/DolphinWX/FrameTools.cpp @@ -1571,12 +1571,6 @@ void CFrame::OnToggleDualCore(wxCommandEvent& WXUNUSED(event)) SConfig::GetInstance().SaveSettings(); } -void CFrame::OnToggleSkipIdle(wxCommandEvent& WXUNUSED(event)) -{ - SConfig::GetInstance().bSkipIdle = !SConfig::GetInstance().bSkipIdle; - SConfig::GetInstance().SaveSettings(); -} - void CFrame::OnLoadStateFromFile(wxCommandEvent& WXUNUSED(event)) { wxString path = diff --git a/Source/Core/DolphinWX/Globals.h b/Source/Core/DolphinWX/Globals.h index 8a303aa1ef..8af0665f0f 100644 --- a/Source/Core/DolphinWX/Globals.h +++ b/Source/Core/DolphinWX/Globals.h @@ -288,7 +288,6 @@ enum // -------------------------------------------------------------- IDM_TOGGLE_DUAL_CORE, // Other - IDM_TOGGLE_SKIP_IDLE, IDM_TOGGLE_TOOLBAR, IDM_TOGGLE_STATUSBAR, IDM_NOTIFY_MAP_LOADED,