match more methods

This commit is contained in:
JohnCorby 2025-01-29 15:52:40 -08:00
parent f5ac2fd920
commit 68c969493f

View File

@ -2,7 +2,6 @@
using HarmonyLib;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using UnityEngine.Profiling;
@ -14,19 +13,28 @@ namespace NewHorizons.Patches;
[HarmonyPatch]
public static class ProfilerPatch
{
private static string FriendlyName(this MethodBase @this) => $"{@this.DeclaringType.Name}.{@this.Name}";
[HarmonyTargetMethods]
public static IEnumerable<MethodBase> TargetMethods()
{
foreach (var type in Assembly.GetExecutingAssembly().GetTypes())
{
if (!type.Name.EndsWith("Builder")) continue;
// if (!type.Name.EndsWith("Builder")) continue;
// if (!(type.FullName.Contains("Builder") || type.FullName.Contains("Utility"))) continue;
foreach (var method in type.GetRuntimeMethods())
foreach (var method in type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly))
{
if (!(method.Name.StartsWith("Make") || method.Name.StartsWith("Init"))) continue;
if (method.IsGenericMethod) continue;
if (!(
method.Name.Contains("Make") ||
method.Name.Contains("Init") ||
method.Name.Contains("Find") ||
method.Name.Contains("OnSceneLoaded")
)) continue;
Main.Instance.ModHelper.Console.WriteLine($"[profiler] profiling {method.DeclaringType.Name}.{method.Name}");
if (method.ContainsGenericParameters) continue;
Main.Instance.ModHelper.Console.WriteLine($"[profiler] profiling {method.FriendlyName()}");
yield return method;
}
}
@ -35,7 +43,7 @@ public static class ProfilerPatch
[HarmonyPrefix]
public static void Prefix(MethodBase __originalMethod /*, out Stopwatch __state*/)
{
Profiler.BeginSample($"{__originalMethod.DeclaringType.Name}.{__originalMethod.Name}");
Profiler.BeginSample(__originalMethod.FriendlyName());
// __state = new Stopwatch();
// __state.Start();
@ -47,6 +55,6 @@ public static class ProfilerPatch
Profiler.EndSample();
// __state.Stop();
// Main.Instance.ModHelper.Console.WriteLine($"[profiler] {__originalMethod.DeclaringType.Name}.{__originalMethod.Name} took {__state.Elapsed.TotalMilliseconds:f1} ms");
// Main.Instance.ModHelper.Console.WriteLine($"[profiler] {__originalMethod.MethodName()} took {__state.Elapsed.TotalMilliseconds:f1} ms");
}
}