Описание
Используйте для конечной точки потока.
Отмечает область ProfilerMarker, в которую включен ProfilerFlowEventType.End, как конечную точку потока.
using System;
using System.Threading;
using Unity.Profiling;
using Unity.Profiling.LowLevel;
using Unity.Profiling.LowLevel.Unsafe;
public class Example
{
public const int k_NumberOfTasks = 4;
static readonly ProfilerMarker k_ScheduleParallelTasksMarker = new ProfilerMarker("Schedule Parallel Tasks");
static readonly ProfilerMarker k_ParallelTaskMarker = new ProfilerMarker("Parallel Task");
static readonly ProfilerMarker k_TaskSyncMarker = new ProfilerMarker("Sync Task");
static void EmitFlowEventAndChainThread(uint flowId)
{
// Mark the next k_ParallelTaskMarker as a beginning of the flow
ProfilerUnsafeUtility.FlowEvent(flowId, ProfilerFlowEventType.ParallelNext);
using (k_ParallelTaskMarker.Auto())
{
// Do work
}
}
static void ScheduleParallelTask()
{
uint flowId;
var threads = new Thread[k_NumberOfTasks];
using (k_ScheduleParallelTasksMarker.Auto())
{
flowId = ProfilerUnsafeUtility.CreateFlow(ProfilerUnsafeUtility.CategoryScripts);
// Mark the parent k_ScheduleParallelTasksMarker as a beginning of the flow
ProfilerUnsafeUtility.FlowEvent(flowId, ProfilerFlowEventType.Begin);
for (var i = 0; i < k_NumberOfTasks; ++i)
{
var thread = new Thread(() => EmitFlowEventAndChainThread(flowId));
thread.Start();
threads[i] = thread;
}
}
using (k_TaskSyncMarker.Auto())
{
// Mark the parent k_TaskSyncMarker as a beginning of the flow
ProfilerUnsafeUtility.FlowEvent(flowId, ProfilerFlowEventType.End);
for (var i = 0; i < k_NumberOfTasks; ++i)
threads[i].Join();
}
}
}
Смотрите так же: ProfilerUnsafeUtility.FlowEvent.