-
-
Notifications
You must be signed in to change notification settings - Fork 44
/
PatchProfiler.java
134 lines (110 loc) · 3.9 KB
/
PatchProfiler.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package me.nallar.tickthreading.patched;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import net.minecraft.profiler.Profiler;
import net.minecraft.profiler.ProfilerResult;
public abstract class PatchProfiler extends Profiler {
/**
* Start section
*/
@Override
public void startSection(String par1Str) {
if (this.profilingEnabled) {
if (this.profilingSection.length() > 0) {
this.profilingSection = this.profilingSection + '.';
}
this.profilingSection = this.profilingSection + par1Str;
this.sectionList.add(this.profilingSection);
this.timestampList.add(System.nanoTime());
}
}
/**
* End section
*/
@Override
public void endSection() {
if (this.profilingEnabled) {
synchronized (profilingMap) {
long var1 = System.nanoTime();
long var3 = (Long) this.timestampList.remove(this.timestampList.size() - 1);
this.sectionList.remove(this.sectionList.size() - 1);
long var5 = var1 - var3;
if (this.profilingMap.containsKey(this.profilingSection)) {
this.profilingMap.put(this.profilingSection, (Long) this.profilingMap.get(this.profilingSection) + var5);
} else {
this.profilingMap.put(this.profilingSection, var5);
}
if (var5 > 100000000L) {
System.out.println("Something\'s taking too long! \'" + this.profilingSection + "\' took aprox " + (double) var5 / 1000000.0D + " ms");
}
this.profilingSection = !this.sectionList.isEmpty() ? (String) this.sectionList.get(this.sectionList.size() - 1) : "";
}
}
}
/**
* Get profiling data
*/
@Override
public List getProfilingData(String par1Str) {
if (!this.profilingEnabled) {
return null;
} else {
synchronized (profilingMap) {
long var3 = this.profilingMap.containsKey("root") ? (Long) this.profilingMap.get("root") : 0L;
long var5 = this.profilingMap.containsKey(par1Str) ? (Long) this.profilingMap.get(par1Str) : -1L;
ArrayList var7 = new ArrayList();
if (par1Str.length() > 0) {
par1Str = par1Str + '.';
}
long var8 = 0L;
Iterator var10 = this.profilingMap.keySet().iterator();
while (var10.hasNext()) {
String var11 = (String) var10.next();
if (var11.length() > par1Str.length() && var11.startsWith(par1Str) && var11.indexOf('.', par1Str.length() + 1) < 0) {
var8 += (Long) this.profilingMap.get(var11);
}
}
float var21 = (float) var8;
if (var8 < var5) {
var8 = var5;
}
if (var3 < var8) {
var3 = var8;
}
Iterator var20 = this.profilingMap.keySet().iterator();
String var12;
while (var20.hasNext()) {
var12 = (String) var20.next();
if (var12.length() > par1Str.length() && var12.startsWith(par1Str) && var12.indexOf('.', par1Str.length() + 1) < 0) {
long var13 = (Long) this.profilingMap.get(var12);
double var15 = (double) var13 * 100.0D / (double) var8;
double var17 = (double) var13 * 100.0D / (double) var3;
String var19 = var12.substring(par1Str.length());
var7.add(new ProfilerResult(var19, var15, var17));
}
}
var20 = this.profilingMap.keySet().iterator();
while (var20.hasNext()) {
var12 = (String) var20.next();
this.profilingMap.put(var12, (Long) this.profilingMap.get(var12) * 999L / 1000L);
}
if ((float) var8 > var21) {
var7.add(new ProfilerResult("unspecified", (double) ((float) var8 - var21) * 100.0D / (double) var8, (double) ((float) var8 - var21) * 100.0D / (double) var3));
}
Collections.sort(var7);
var7.add(0, new ProfilerResult(par1Str, 100.0D, (double) var8 * 100.0D / (double) var3));
return var7;
}
}
}
/**
* End current section and start a new section
*/
@Override
public void endStartSection(String par1Str) {
this.endSection();
this.startSection(par1Str);
}
}