name | 标记名称。 |
categoryId | 分析器类别标识符。 |
flags | 标记标志。 |
metadataCount | 元数据参数数量,如果没有预期参数则为 0。 |
nameLen | 标记名称字符串长度。 |
IntPtr 返回标记本机句柄。
为代码检测构造新的分析器标记句柄。
仅对 ProfilerUnsafeUtility 方法使用分析器标记句柄。
categoryId 参数将标记与 ProfilerCategory 结构中预定义的类别之一关联。
注意: 使用 CreateMarker 创建的标记都会自动获取 MarkerFlags.Script 标志。
using Unity.Collections.LowLevel.Unsafe; using Unity.Profiling.LowLevel; using Unity.Profiling.LowLevel.Unsafe; using System;
class Example { static readonly IntPtr markerHandle = ProfilerUnsafeUtility.CreateMarker("MyMarker", ProfilerUnsafeUtility.CategoryScripts, MarkerFlags.Default, 0); static unsafe void DoWork(int num) { ProfilerUnsafeUtility.BeginSample(markerHandle); //... ProfilerUnsafeUtility.EndSample(markerHandle); } }
在使用 :ref::BeginSampleWithMetadata 方法传递元数据时,使用 CreateMarker 设置元数据参数名称。
using Unity.Collections.LowLevel.Unsafe; using Unity.Profiling; using Unity.Profiling.LowLevel; using Unity.Profiling.LowLevel.Unsafe; using System;
class Example { static IntPtr MakeMarkerWithIntMetadata(string name, string paramName) { var handle = ProfilerUnsafeUtility.CreateMarker(name, ProfilerUnsafeUtility.CategoryScripts, MarkerFlags.Default, 1); ProfilerUnsafeUtility.SetMarkerMetadata(handle, 0, paramName, (byte)ProfilerMarkerDataType.Int32, (byte)ProfilerMarkerDataUnit.Count); return handle; }
static readonly IntPtr markerHandle = MakeMarkerWithIntMetadata("MyMarker", "Work Idx");
static unsafe void DoWork(int num) { var metadata = stackalloc ProfilerMarkerData[1]; metadata[0].Type = (byte)ProfilerMarkerDataType.Int32; metadata[0].Size = (uint)UnsafeUtility.SizeOf<int>(); metadata[0].Ptr = UnsafeUtility.AddressOf(ref num); ProfilerUnsafeUtility.BeginSampleWithMetadata(markerHandle, 1, metadata); //... ProfilerUnsafeUtility.EndSample(markerHandle); } }
其他资源:ProfilerCategory,MarkerFlags。