From 5c89d0cb15e757b8f901585842a387fefaa5de9e Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Tue, 19 Jan 2021 01:09:52 +1000 Subject: [PATCH] Cache ApiContainer instead of GuiApi in Win32LuaLibraries --- .../tools/Lua/Win32LuaLibraries.cs | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/BizHawk.Client.EmuHawk/tools/Lua/Win32LuaLibraries.cs b/src/BizHawk.Client.EmuHawk/tools/Lua/Win32LuaLibraries.cs index a933a5c6b3..91e18ad2cb 100644 --- a/src/BizHawk.Client.EmuHawk/tools/Lua/Win32LuaLibraries.cs +++ b/src/BizHawk.Client.EmuHawk/tools/Lua/Win32LuaLibraries.cs @@ -48,8 +48,7 @@ namespace BizHawk.Client.EmuHawk _mainForm = mainForm; LuaWait = new AutoResetEvent(false); Docs.Clear(); - var apiContainer = ApiManager.RestartLua(serviceProvider, LogToLuaConsole, _mainForm, _displayManager, _inputManager, _mainForm.MovieSession, _mainForm.Tools, config, emulator, game); - _guiAPI = (GuiApi) apiContainer.Gui; + _apiContainer = ApiManager.RestartLua(serviceProvider, LogToLuaConsole, _mainForm, _displayManager, _inputManager, _mainForm.MovieSession, _mainForm.Tools, config, emulator, game); // Register lua libraries foreach (var lib in Client.Common.ReflectionCache.Types.Concat(EmuHawk.ReflectionCache.Types) @@ -64,7 +63,7 @@ namespace BizHawk.Client.EmuHawk if (addLibrary) { - var instance = (LuaLibraryBase) Activator.CreateInstance(lib, this, apiContainer, (Action) LogToLuaConsole); + var instance = (LuaLibraryBase) Activator.CreateInstance(lib, this, _apiContainer, (Action) LogToLuaConsole); ServiceInjector.UpdateServices(serviceProvider, instance); // TODO: make EmuHawk libraries have a base class with common properties such as this @@ -105,9 +104,11 @@ namespace BizHawk.Client.EmuHawk EnumerateLuaFunctions(nameof(LuaCanvas), typeof(LuaCanvas), null); // add LuaCanvas to Lua function reference table } + private ApiContainer _apiContainer; + private readonly IDisplayManagerForApi _displayManager; - private GuiApi _guiAPI; + private GuiApi GuiAPI => (GuiApi) _apiContainer.Gui; private readonly InputManager _inputManager; @@ -148,11 +149,10 @@ namespace BizHawk.Client.EmuHawk IEmulator emulator, IGameInfo game) { - var apiContainer = ApiManager.RestartLua(newServiceProvider, LogToLuaConsole, _mainForm, _displayManager, _inputManager, _mainForm.MovieSession, _mainForm.Tools, config, emulator, game); - _guiAPI = (GuiApi) apiContainer.Gui; + _apiContainer = ApiManager.RestartLua(newServiceProvider, LogToLuaConsole, _mainForm, _displayManager, _inputManager, _mainForm.MovieSession, _mainForm.Tools, config, emulator, game); foreach (var lib in Libraries.Values) { - lib.APIs = apiContainer; + lib.APIs = _apiContainer; ServiceInjector.UpdateServices(newServiceProvider, lib); } } @@ -292,9 +292,9 @@ namespace BizHawk.Client.EmuHawk { LuaLibraryBase.SetCurrentThread(lf); - _guiAPI.LockEmuSurfaceLua(); + GuiAPI.LockEmuSurfaceLua(); var execResult = _currThread.Resume(0); - _guiAPI.UnlockEmuSurfaceLua(); + GuiAPI.UnlockEmuSurfaceLua(); _lua.RunScheduledDisposes(); // TODO: I don't think this is needed anymore, we run this regularly anyway @@ -311,7 +311,7 @@ namespace BizHawk.Client.EmuHawk } catch (Exception) { - _guiAPI.UnlockEmuSurfaceLua(); + GuiAPI.UnlockEmuSurfaceLua(); throw; } finally