Files
2026-07-13 12:49:17 +08:00

86 lines
3.5 KiB
C#

using System;
using System.Threading.Tasks;
using MCPForUnity.Editor.Helpers;
using Newtonsoft.Json.Linq;
namespace MCPForUnity.Editor.Tools.Profiler
{
[McpForUnityTool("manage_profiler", AutoRegister = false, Group = "profiling")]
public static class ManageProfiler
{
public static async Task<object> HandleCommand(JObject @params)
{
if (@params == null)
return new ErrorResponse("Parameters cannot be null.");
var p = new ToolParams(@params);
string action = p.Get("action")?.ToLowerInvariant();
if (string.IsNullOrEmpty(action))
return new ErrorResponse("'action' parameter is required.");
try
{
switch (action)
{
// Session
case "profiler_start":
return SessionOps.Start(@params);
case "profiler_stop":
return SessionOps.Stop(@params);
case "profiler_status":
return SessionOps.Status(@params);
case "profiler_set_areas":
return SessionOps.SetAreas(@params);
// Counters
case "get_frame_timing":
return FrameTimingOps.GetFrameTiming(@params);
case "get_counters":
return await CounterOps.GetCountersAsync(@params);
case "get_object_memory":
return ObjectMemoryOps.GetObjectMemory(@params);
// Memory Snapshot
case "memory_take_snapshot":
return await MemorySnapshotOps.TakeSnapshotAsync(@params);
case "memory_list_snapshots":
return MemorySnapshotOps.ListSnapshots(@params);
case "memory_compare_snapshots":
return MemorySnapshotOps.CompareSnapshots(@params);
// Frame Debugger
case "frame_debugger_enable":
return FrameDebuggerOps.Enable(@params);
case "frame_debugger_disable":
return FrameDebuggerOps.Disable(@params);
case "frame_debugger_get_events":
return FrameDebuggerOps.GetEvents(@params);
// Utility
case "ping":
return new SuccessResponse("manage_profiler is available.", new
{
tool = "manage_profiler",
group = "profiling"
});
default:
return new ErrorResponse(
$"Unknown action: '{action}'. Valid actions: "
+ "profiler_start, profiler_stop, profiler_status, profiler_set_areas, "
+ "get_frame_timing, get_counters, get_object_memory, "
+ "memory_take_snapshot, memory_list_snapshots, memory_compare_snapshots, "
+ "frame_debugger_enable, frame_debugger_disable, frame_debugger_get_events, "
+ "ping.");
}
}
catch (Exception ex)
{
McpLog.Error($"[ManageProfiler] Action '{action}' failed: {ex}");
return new ErrorResponse($"Error in action '{action}': {ex.Message}");
}
}
}
}