testss
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
public class ProfiledSegment
|
||||
{
|
||||
public ProfiledSegment(ProfiledSegment parent, string name)
|
||||
{
|
||||
this.parent = parent;
|
||||
this.name = name;
|
||||
stopwatch = new Stopwatch();
|
||||
children = new ProfiledSegmentCollection();
|
||||
}
|
||||
|
||||
public string name { get; private set; }
|
||||
public Stopwatch stopwatch { get; private set; }
|
||||
public long calls { get; set; }
|
||||
public ProfiledSegment parent { get; private set; }
|
||||
public ProfiledSegmentCollection children { get; private set; }
|
||||
}
|
||||
}
|
@@ -0,0 +1,12 @@
|
||||
using System.Collections.ObjectModel;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
public class ProfiledSegmentCollection : KeyedCollection<string, ProfiledSegment>
|
||||
{
|
||||
protected override string GetKeyForItem(ProfiledSegment item)
|
||||
{
|
||||
return item.name;
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,17 @@
|
||||
using System;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
public struct ProfilingScope : IDisposable
|
||||
{
|
||||
public ProfilingScope(string name)
|
||||
{
|
||||
ProfilingUtility.BeginSample(name);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
ProfilingUtility.EndSample();
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,68 @@
|
||||
using System.Diagnostics;
|
||||
using System.Threading;
|
||||
using UnityEngine.Profiling;
|
||||
|
||||
namespace Unity.VisualScripting
|
||||
{
|
||||
public static class ProfilingUtility
|
||||
{
|
||||
static ProfilingUtility()
|
||||
{
|
||||
currentSegment = rootSegment = new ProfiledSegment(null, "Root");
|
||||
}
|
||||
|
||||
private static readonly object @lock = new object();
|
||||
|
||||
public static ProfiledSegment rootSegment { get; private set; }
|
||||
public static ProfiledSegment currentSegment { get; set; }
|
||||
|
||||
[Conditional("ENABLE_PROFILER")]
|
||||
public static void Clear()
|
||||
{
|
||||
currentSegment = rootSegment = new ProfiledSegment(null, "Root");
|
||||
}
|
||||
|
||||
public static ProfilingScope SampleBlock(string name)
|
||||
{
|
||||
return new ProfilingScope(name);
|
||||
}
|
||||
|
||||
[Conditional("ENABLE_PROFILER")]
|
||||
public static void BeginSample(string name)
|
||||
{
|
||||
Monitor.Enter(@lock);
|
||||
|
||||
if (!currentSegment.children.Contains(name))
|
||||
{
|
||||
currentSegment.children.Add(new ProfiledSegment(currentSegment, name));
|
||||
}
|
||||
|
||||
currentSegment = currentSegment.children[name];
|
||||
currentSegment.calls++;
|
||||
currentSegment.stopwatch.Start();
|
||||
|
||||
if (UnityThread.allowsAPI)
|
||||
{
|
||||
Profiler.BeginSample(name);
|
||||
}
|
||||
}
|
||||
|
||||
[Conditional("ENABLE_PROFILER")]
|
||||
public static void EndSample()
|
||||
{
|
||||
currentSegment.stopwatch.Stop();
|
||||
|
||||
if (currentSegment.parent != null)
|
||||
{
|
||||
currentSegment = currentSegment.parent;
|
||||
}
|
||||
|
||||
if (UnityThread.allowsAPI)
|
||||
{
|
||||
Profiler.EndSample();
|
||||
}
|
||||
|
||||
Monitor.Exit(@lock);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user