Optimize GC for log in gameplay scene.
This commit is contained in:
@@ -47,10 +47,8 @@ namespace Cryville.Crtr {
|
|||||||
bool started = false;
|
bool started = false;
|
||||||
|
|
||||||
static bool initialized;
|
static bool initialized;
|
||||||
static Text logs;
|
TextMeshProUGUI logs;
|
||||||
TextMeshProUGUI status;
|
TextMeshProUGUI status;
|
||||||
readonly TargetString statusstr = new TargetString();
|
|
||||||
readonly StringBuffer statusbuf = new StringBuffer();
|
|
||||||
|
|
||||||
static Vector2 screenSize;
|
static Vector2 screenSize;
|
||||||
public static Rect hitRect;
|
public static Rect hitRect;
|
||||||
@@ -79,7 +77,7 @@ namespace Cryville.Crtr {
|
|||||||
void Start() {
|
void Start() {
|
||||||
var logobj = GameObject.Find("Logs");
|
var logobj = GameObject.Find("Logs");
|
||||||
if (logobj != null)
|
if (logobj != null)
|
||||||
logs = logobj.GetComponent<Text>();
|
logs = logobj.GetComponent<TextMeshProUGUI>();
|
||||||
if (!initialized) {
|
if (!initialized) {
|
||||||
Game.Init();
|
Game.Init();
|
||||||
GenericResources.LoadDefault();
|
GenericResources.LoadDefault();
|
||||||
@@ -222,8 +220,14 @@ namespace Cryville.Crtr {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
readonly TargetString statusstr = new TargetString();
|
||||||
|
readonly StringBuffer statusbuf = new StringBuffer();
|
||||||
|
readonly TargetString logsstr = new TargetString();
|
||||||
|
readonly StringBuffer logsbuf = new StringBuffer();
|
||||||
|
readonly List<string> logEntries = new List<string>();
|
||||||
|
int logsLength = 0;
|
||||||
void LogUpdate() {
|
void LogUpdate() {
|
||||||
string _logs = logs.text;
|
logsbuf.Clear();
|
||||||
Game.MainLogger.Enumerate((level, module, msg) => {
|
Game.MainLogger.Enumerate((level, module, msg) => {
|
||||||
string color;
|
string color;
|
||||||
switch (level) {
|
switch (level) {
|
||||||
@@ -235,12 +239,25 @@ namespace Cryville.Crtr {
|
|||||||
case 5: color = "#bb0000"; break;
|
case 5: color = "#bb0000"; break;
|
||||||
default: color = "#ff00ff"; break;
|
default: color = "#ff00ff"; break;
|
||||||
}
|
}
|
||||||
_logs += string.Format(
|
var l = string.Format(
|
||||||
"\r\n<color={1}bb><{2}> {3}</color>",
|
"\n<color={1}bb><{2}> {3}</color>",
|
||||||
DateTime.UtcNow.ToString("s"), color, module, msg
|
DateTime.UtcNow.ToString("s"), color, module, msg
|
||||||
);
|
);
|
||||||
|
logEntries.Add(l);
|
||||||
|
logsLength += l.Length;
|
||||||
});
|
});
|
||||||
logs.text = _logs.Substring(Mathf.Max(0, _logs.IndexOf('\n', Mathf.Max(0, _logs.Length - 4096))));
|
while (logsLength >= 4096) {
|
||||||
|
logsLength -= logEntries[0].Length;
|
||||||
|
logEntries.RemoveAt(0);
|
||||||
|
}
|
||||||
|
foreach (var l in logEntries) {
|
||||||
|
logsbuf.Append(l);
|
||||||
|
}
|
||||||
|
logsstr.Length = logsbuf.Count;
|
||||||
|
var larr = logsstr.TrustedAsArray();
|
||||||
|
logsbuf.CopyTo(0, larr, 0, logsbuf.Count);
|
||||||
|
logs.SetText(larr, 0, logsbuf.Count);
|
||||||
|
|
||||||
statusbuf.Clear();
|
statusbuf.Clear();
|
||||||
statusbuf.AppendFormat(
|
statusbuf.AppendFormat(
|
||||||
"FPS: i{0:0} / s{1:0}\nSMem: {2:N0} / {3:N0}\nIMem: {4:N0} / {5:N0}",
|
"FPS: i{0:0} / s{1:0}\nSMem: {2:N0} / {3:N0}\nIMem: {4:N0} / {5:N0}",
|
||||||
@@ -281,9 +298,9 @@ namespace Cryville.Crtr {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
statusstr.Length = statusbuf.Count;
|
statusstr.Length = statusbuf.Count;
|
||||||
var arr = statusstr.TrustedAsArray();
|
var sarr = statusstr.TrustedAsArray();
|
||||||
statusbuf.CopyTo(0, arr, 0, statusbuf.Count);
|
statusbuf.CopyTo(0, sarr, 0, statusbuf.Count);
|
||||||
status.SetText(arr, 0, statusbuf.Count);
|
status.SetText(sarr, 0, statusbuf.Count);
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@@ -313,7 +330,8 @@ namespace Cryville.Crtr {
|
|||||||
|
|
||||||
bool logEnabled = true;
|
bool logEnabled = true;
|
||||||
public void ToggleLogs() {
|
public void ToggleLogs() {
|
||||||
logs.text = "";
|
logEntries.Clear();
|
||||||
|
logsLength = 0;
|
||||||
status.SetText("");
|
status.SetText("");
|
||||||
logEnabled = !logEnabled;
|
logEnabled = !logEnabled;
|
||||||
}
|
}
|
||||||
@@ -450,7 +468,8 @@ namespace Cryville.Crtr {
|
|||||||
timer.Stop();
|
timer.Stop();
|
||||||
Logger.Log("main", 1, "Load/Prehandle", "Prehandling done ({0}ms)", timer.Elapsed.TotalMilliseconds);
|
Logger.Log("main", 1, "Load/Prehandle", "Prehandling done ({0}ms)", timer.Elapsed.TotalMilliseconds);
|
||||||
if (Settings.Default.ClearLogOnPlay) {
|
if (Settings.Default.ClearLogOnPlay) {
|
||||||
logs.text = "";
|
logEntries.Clear();
|
||||||
|
logsLength = 0;
|
||||||
Game.MainLogger.Enumerate((level, module, msg) => { });
|
Game.MainLogger.Enumerate((level, module, msg) => { });
|
||||||
}
|
}
|
||||||
Game.AudioSequencer.Playing = true;
|
Game.AudioSequencer.Playing = true;
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user