1using System.Diagnostics;
28 Log.
Error($
"SubsystemDrawing: Drawable [{drawable.GetType().ToString()}] already added.");
44 foreach (
int key
in drawOrders) {
55 sortedDrawable.
Draw(camera, drawOrder);
62 Type type = sortedDrawable.GetType();
63 long ticksCosted = m_debugStopwatch.ElapsedTicks - ticks;
69 info.TotalTicksCosted += ticksCosted;
70 if (ticksCosted > info.MaxTicksCosted1) {
71 info.MaxTicksCosted1 = ticksCosted;
73 else if (ticksCosted > info.MaxTicksCosted2) {
74 info.MaxTicksCosted2 = ticksCosted;
90 int maxTypeNameLength = 1;
92 maxTypeNameLength =
m_debugInfos.Keys.Max(type => type.FullName?.Length ?? 0) + 1;
94 StringBuilder stringBuilder =
new();
95 stringBuilder.AppendLine(
"====== SubsystemDrawing Performance Analyze ======");
96 stringBuilder.Append(
"TypeName".PadRight(maxTypeNameLength));
97 stringBuilder.Append(
" Counter TotalTime AverageTime MaxTime1 MaxTime2");
98 foreach ((Type type,
DebugInfo info) in
m_debugInfos.OrderByDescending(pair => pair.Value.TotalTicksCosted)) {
99 stringBuilder.AppendLine();
100 stringBuilder.Append(type.FullName?.PadRight(maxTypeNameLength));
101 stringBuilder.Append(info.
Counter.ToString().PadLeft(11));
102 stringBuilder.Append($
"{(float)info.TotalTicksCosted / Stopwatch.Frequency * 1000:F}ms".PadLeft(12));
103 stringBuilder.Append($
"{(float)info.TotalTicksCosted / info.Counter / Stopwatch.Frequency * 1000000f:F}μs".PadLeft(12));
104 stringBuilder.Append($
"{(float)info.MaxTicksCosted1 / Stopwatch.Frequency * 1000000f:F}μs".PadLeft(12));
105 stringBuilder.Append($
"{(float)info.MaxTicksCosted2 / Stopwatch.Frequency * 1000000f:F}μs".PadLeft(12));
114 bool skipVanilla =
false;
118 loader.OnIDrawableAdded(
this, item, skipVanilla, out
bool skip);
static void Error(object message)
static void Information(object message)
override void Save(ValuesDictionary valuesDictionary)
override void Load(ValuesDictionary valuesDictionary)
override void OnEntityRemoved(Entity entity)
Stopwatch m_debugStopwatch
void AddDrawable(IDrawable drawable)
override void OnEntityAdded(Entity entity)
void RemoveDrawable(IDrawable drawable)
SortedMultiCollection< int, IDrawable > m_sortedDrawables
virtual void Draw(Camera camera)
Dictionary< Type, DebugInfo > m_debugInfos
Dictionary< IDrawable, bool > m_drawables
ValuesDictionary ValuesDictionary
static void HookAction(string HookName, Func< ModLoader, bool > action)
执行Hook
void Draw(Camera camera, int drawOrder)