Documentation

Unity Engine


User Manual

Script Reference

Unity Engine


BeginSampleWithMetadata(IntPtr, int, void*)

Starts profiling a piece of code marked with a custom name that the markerPtr handle and metadata parameters has defined.
Read time 1 minuteLast updated 11 days ago

Definition

public static void BeginSampleWithMetadata(IntPtr markerPtr, int metadataCount, void* metadata)

Parameters

markerPtr

Profiler marker handle.

metadataCount

Metadata parameters count.

metadata

Unsafe pointer to the ProfilerMarkerData array.

Remarks

Code marked with ProfilerUnsafeUtility.BeginSampleWithMetadata and ProfilerUnsafeUtility.EndSample shows up in the Profiler hierarchy. Always use ProfilerUnsafeUtility.EndSample to close a started section of the instrumented code.
In the Timeline view of the Profiler Window the provided metadata is available in the tooltip message. Use HierarchyFrameDataView.GetItemMetadata to retrieve metadata programmatically.
Note: Both ProfilerUnsafeUtility.BeginSampleWithMetadata and ProfilerUnsafeUtility.EndSample are thread safe and can be used in jobified code.
The low level Profiler API is included in a Release Build.
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); }}
Use Recorder to obtain per-frame timings in the Player for the specific marker name.