Files
coplaydev--unity-mcp/MCPForUnity/Editor/Tools/Profiler/Operations/FrameTimingOps.cs
T
2026-07-13 12:49:17 +08:00

57 lines
2.0 KiB
C#

using MCPForUnity.Editor.Helpers;
using Newtonsoft.Json.Linq;
using UnityEngine;
namespace MCPForUnity.Editor.Tools.Profiler
{
internal static class FrameTimingOps
{
internal static object GetFrameTiming(JObject @params)
{
#if UNITY_2022_2_OR_NEWER
if (!FrameTimingManager.IsFeatureEnabled())
{
return new ErrorResponse(
"Frame Timing Stats is not enabled. "
+ "Enable it in Project Settings > Player > Other Settings > 'Frame Timing Stats', "
+ "or use a Development Build (always enabled).");
}
#endif
FrameTimingManager.CaptureFrameTimings();
var timings = new FrameTiming[1];
uint count = FrameTimingManager.GetLatestTimings(1, timings);
if (count == 0)
{
return new SuccessResponse("No frame timing data available yet (need a few frames).", new
{
available = false,
});
}
var t = timings[0];
return new SuccessResponse("Frame timing captured.", new
{
available = true,
cpu_frame_time_ms = t.cpuFrameTime,
#if UNITY_2022_2_OR_NEWER
cpu_main_thread_frame_time_ms = t.cpuMainThreadFrameTime,
cpu_main_thread_present_wait_time_ms = t.cpuMainThreadPresentWaitTime,
cpu_render_thread_frame_time_ms = t.cpuRenderThreadFrameTime,
#endif
gpu_frame_time_ms = t.gpuFrameTime,
#if UNITY_2022_2_OR_NEWER
frame_start_timestamp = t.frameStartTimestamp,
first_submit_timestamp = t.firstSubmitTimestamp,
#endif
cpu_time_present_called = t.cpuTimePresentCalled,
cpu_time_frame_complete = t.cpuTimeFrameComplete,
height_scale = t.heightScale,
width_scale = t.widthScale,
sync_interval = t.syncInterval,
});
}
}
}