revert IM changes for now due to instability (#1226)

Revert "hook Present and ResizeBuffers immediately when InterfaceManager is created"

This reverts commit e1a56d6d64.

Revert "add a bunch of logging to IM setup"

This reverts commit 6870c8e7d2.

Revert "more IM logging tweaks"

This reverts commit 4139dc14e7.

Revert "IM logs on information"

This reverts commit d393bd4e2a.
This commit is contained in:
Ava Chaney 2023-05-28 22:30:12 -07:00 committed by GitHub
parent d393bd4e2a
commit 0014bfa6fc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -20,12 +20,12 @@ using Dalamud.Interface.Internal.ManagedAsserts;
using Dalamud.Interface.Internal.Notifications; using Dalamud.Interface.Internal.Notifications;
using Dalamud.Interface.Style; using Dalamud.Interface.Style;
using Dalamud.Interface.Windowing; using Dalamud.Interface.Windowing;
using Dalamud.Logging.Internal;
using Dalamud.Utility; using Dalamud.Utility;
using Dalamud.Utility.Timing; using Dalamud.Utility.Timing;
using ImGuiNET; using ImGuiNET;
using ImGuiScene; using ImGuiScene;
using PInvoke; using PInvoke;
using Serilog;
// general dev notes, here because it's easiest // general dev notes, here because it's easiest
@ -47,8 +47,6 @@ namespace Dalamud.Interface.Internal;
[ServiceManager.BlockingEarlyLoadedService] [ServiceManager.BlockingEarlyLoadedService]
internal class InterfaceManager : IDisposable, IServiceType internal class InterfaceManager : IDisposable, IServiceType
{ {
private static ModuleLog Log = new ModuleLog("IM");
private const float DefaultFontSizePt = 12.0f; private const float DefaultFontSizePt = 12.0f;
private const float DefaultFontSizePx = DefaultFontSizePt * 4.0f / 3.0f; private const float DefaultFontSizePx = DefaultFontSizePt * 4.0f / 3.0f;
private const ushort Fallback1Codepoint = 0x3013; // Geta mark; FFXIV uses this to indicate that a glyph is missing. private const ushort Fallback1Codepoint = 0x3013; // Geta mark; FFXIV uses this to indicate that a glyph is missing.
@ -78,41 +76,16 @@ internal class InterfaceManager : IDisposable, IServiceType
private bool isOverrideGameCursor = true; private bool isOverrideGameCursor = true;
[ServiceManager.ServiceConstructor] [ServiceManager.ServiceConstructor]
private InterfaceManager(SigScanner sigScanner) private InterfaceManager()
{ {
Log.Information("ctor called");
this.dispatchMessageWHook = Hook<DispatchMessageWDelegate>.FromImport( this.dispatchMessageWHook = Hook<DispatchMessageWDelegate>.FromImport(
null, "user32.dll", "DispatchMessageW", 0, this.DispatchMessageWDetour); null, "user32.dll", "DispatchMessageW", 0, this.DispatchMessageWDetour);
this.setCursorHook = Hook<SetCursorDelegate>.FromImport( this.setCursorHook = Hook<SetCursorDelegate>.FromImport(
null, "user32.dll", "SetCursor", 0, this.SetCursorDetour); null, "user32.dll", "SetCursor", 0, this.SetCursorDetour);
Log.Information("Import hooks applied");
this.fontBuildSignal = new ManualResetEvent(false); this.fontBuildSignal = new ManualResetEvent(false);
this.address = new SwapChainVtableResolver(); this.address = new SwapChainVtableResolver();
this.address.Setup();
Log.Information("Resolver setup complete");
Log.Information("===== S W A P C H A I N =====");
Log.Information($"Is ReShade: {this.address.IsReshade}");
Log.Information($"Present address 0x{this.address.Present.ToInt64():X}");
Log.Information($"ResizeBuffers address 0x{this.address.ResizeBuffers.ToInt64():X}");
this.presentHook = Hook<PresentDelegate>.FromAddress(this.address.Present, this.PresentDetour);
this.resizeBuffersHook = Hook<ResizeBuffersDelegate>.FromAddress(this.address.ResizeBuffers, this.ResizeBuffersDetour);
Log.Information("Present and ResizeBuffers hooked");
var wndProcAddress = sigScanner.ScanText("E8 ?? ?? ?? ?? 80 7C 24 ?? ?? 74 ?? B8");
Log.Information($"WndProc address 0x{wndProcAddress.ToInt64():X}");
this.processMessageHook = Hook<ProcessMessageDelegate>.FromAddress(wndProcAddress, this.ProcessMessageDetour);
this.setCursorHook.Enable();
this.presentHook.Enable();
this.resizeBuffersHook.Enable();
this.dispatchMessageWHook.Enable();
this.processMessageHook.Enable();
Log.Information("Hooks enabled");
} }
[UnmanagedFunctionPointer(CallingConvention.ThisCall)] [UnmanagedFunctionPointer(CallingConvention.ThisCall)]
@ -1009,9 +982,10 @@ internal class InterfaceManager : IDisposable, IServiceType
} }
[ServiceManager.CallWhenServicesReady] [ServiceManager.CallWhenServicesReady]
private void ContinueConstruction() private void ContinueConstruction(SigScanner sigScanner, Framework framework)
{ {
this.framework.RunOnFrameworkThread(() => this.address.Setup(sigScanner);
framework.RunOnFrameworkThread(() =>
{ {
while ((this.GameWindowHandle = NativeFunctions.FindWindowEx(IntPtr.Zero, this.GameWindowHandle, "FFXIVGAME", IntPtr.Zero)) != IntPtr.Zero) while ((this.GameWindowHandle = NativeFunctions.FindWindowEx(IntPtr.Zero, this.GameWindowHandle, "FFXIVGAME", IntPtr.Zero)) != IntPtr.Zero)
{ {
@ -1030,6 +1004,23 @@ internal class InterfaceManager : IDisposable, IServiceType
{ {
Log.Error(ex, "Could not enable immersive mode"); Log.Error(ex, "Could not enable immersive mode");
} }
this.presentHook = Hook<PresentDelegate>.FromAddress(this.address.Present, this.PresentDetour, true);
this.resizeBuffersHook = Hook<ResizeBuffersDelegate>.FromAddress(this.address.ResizeBuffers, this.ResizeBuffersDetour, true);
Log.Verbose("===== S W A P C H A I N =====");
Log.Verbose($"Present address 0x{this.presentHook!.Address.ToInt64():X}");
Log.Verbose($"ResizeBuffers address 0x{this.resizeBuffersHook!.Address.ToInt64():X}");
var wndProcAddress = sigScanner.ScanText("E8 ?? ?? ?? ?? 80 7C 24 ?? ?? 74 ?? B8");
Log.Verbose($"WndProc address 0x{wndProcAddress.ToInt64():X}");
this.processMessageHook = Hook<ProcessMessageDelegate>.FromAddress(wndProcAddress, this.ProcessMessageDetour);
this.setCursorHook.Enable();
this.presentHook.Enable();
this.resizeBuffersHook.Enable();
this.dispatchMessageWHook.Enable();
this.processMessageHook.Enable();
}); });
} }