[Player] Add AI Pathfinding on a 2D grid to the player character
This commit is contained in:
123
Assets/External/AstarPathfindingProject/Utilities/ProfileHelper.cs
vendored
Normal file
123
Assets/External/AstarPathfindingProject/Utilities/ProfileHelper.cs
vendored
Normal file
@@ -0,0 +1,123 @@
|
||||
// Disable some warnings since this class compiles out large parts of the code depending on compiler directives
|
||||
#pragma warning disable 0162
|
||||
#pragma warning disable 0414
|
||||
#pragma warning disable 0429
|
||||
//#define PROFILE // Uncomment to enable profiling
|
||||
//#define KEEP_SAMPLES
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Pathfinding {
|
||||
public class Profile {
|
||||
const bool PROFILE_MEM = false;
|
||||
|
||||
public readonly string name;
|
||||
readonly System.Diagnostics.Stopwatch watch;
|
||||
int counter;
|
||||
long mem;
|
||||
long smem;
|
||||
|
||||
#if KEEP_SAMPLES
|
||||
List<float> samples = new List<float>();
|
||||
#endif
|
||||
|
||||
int control = 1 << 30;
|
||||
const bool dontCountFirst = false;
|
||||
|
||||
public int ControlValue () {
|
||||
return control;
|
||||
}
|
||||
|
||||
public Profile (string name) {
|
||||
this.name = name;
|
||||
watch = new System.Diagnostics.Stopwatch();
|
||||
}
|
||||
|
||||
public static void WriteCSV (string path, params Profile[] profiles) {
|
||||
#if KEEP_SAMPLES
|
||||
var s = new System.Text.StringBuilder();
|
||||
s.AppendLine("x, y");
|
||||
foreach (var profile in profiles) {
|
||||
for (int i = 0; i < profile.samples.Count; i++) {
|
||||
s.AppendLine(profile.name + ", " + profile.samples[i].ToString("R"));
|
||||
}
|
||||
}
|
||||
System.IO.File.WriteAllText(path, s.ToString());
|
||||
#endif
|
||||
}
|
||||
|
||||
public void Run (System.Action action) {
|
||||
Start();
|
||||
action();
|
||||
Stop();
|
||||
}
|
||||
|
||||
[System.Diagnostics.ConditionalAttribute("PROFILE")]
|
||||
public void Start () {
|
||||
if (PROFILE_MEM) {
|
||||
smem = GC.GetTotalMemory(false);
|
||||
}
|
||||
if (dontCountFirst && counter == 1) return;
|
||||
watch.Start();
|
||||
}
|
||||
|
||||
[System.Diagnostics.ConditionalAttribute("PROFILE")]
|
||||
public void Stop () {
|
||||
counter++;
|
||||
if (dontCountFirst && counter == 1) return;
|
||||
|
||||
watch.Stop();
|
||||
if (PROFILE_MEM) {
|
||||
mem += GC.GetTotalMemory(false)-smem;
|
||||
}
|
||||
#if KEEP_SAMPLES
|
||||
samples.Add((float)watch.Elapsed.TotalMilliseconds);
|
||||
watch.Reset();
|
||||
#endif
|
||||
}
|
||||
|
||||
[System.Diagnostics.ConditionalAttribute("PROFILE")]
|
||||
/// <summary>Log using Debug.Log</summary>
|
||||
public void Log () {
|
||||
UnityEngine.Debug.Log(ToString());
|
||||
}
|
||||
|
||||
[System.Diagnostics.ConditionalAttribute("PROFILE")]
|
||||
/// <summary>Log using System.Console</summary>
|
||||
public void ConsoleLog () {
|
||||
#if !NETFX_CORE || UNITY_EDITOR
|
||||
System.Console.WriteLine(ToString());
|
||||
#endif
|
||||
}
|
||||
|
||||
[System.Diagnostics.ConditionalAttribute("PROFILE")]
|
||||
public void Stop (int control) {
|
||||
counter++;
|
||||
if (dontCountFirst && counter == 1) return;
|
||||
|
||||
watch.Stop();
|
||||
if (PROFILE_MEM) {
|
||||
mem += GC.GetTotalMemory(false)-smem;
|
||||
}
|
||||
|
||||
if (this.control == 1 << 30) this.control = control;
|
||||
else if (this.control != control) throw new Exception("Control numbers do not match " + this.control + " != " + control);
|
||||
}
|
||||
|
||||
[System.Diagnostics.ConditionalAttribute("PROFILE")]
|
||||
public void Control (Profile other) {
|
||||
if (ControlValue() != other.ControlValue()) {
|
||||
throw new Exception("Control numbers do not match ("+name + " " + other.name + ") " + ControlValue() + " != " + other.ControlValue());
|
||||
}
|
||||
}
|
||||
|
||||
public override string ToString () {
|
||||
string s = name + " #" + counter + " " + watch.Elapsed.TotalMilliseconds.ToString("0.0 ms") + " avg: " + (watch.Elapsed.TotalMilliseconds/counter).ToString("0.00 ms");
|
||||
|
||||
if (PROFILE_MEM) {
|
||||
s += " avg mem: " + (mem/(1.0*counter)).ToString("0 bytes");
|
||||
}
|
||||
return s;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user