diff --git a/Bootstrap.cs b/Bootstrap.cs index a716ba5..021108d 100644 --- a/Bootstrap.cs +++ b/Bootstrap.cs @@ -272,6 +272,7 @@ namespace MSCO void OnApplicationQuit() { + try { PerfStats.FinalReport(); } catch { } // Wer beendet das Spiel? (Diagnose) Bootstrap.Log("Game is quitting (scene " + Application.loadedLevelName + "): " + System.Environment.StackTrace); } diff --git a/CHANGELOG.md b/CHANGELOG.md index 1c614a8..b90dd58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## 2.10.15 + +- Leistungsbericht: der erste kommt 2 Minuten nach dem Laden der Welt (das Laden zählt nicht mehr mit), danach alle + 5 Minuten, und beim Beenden des Spiels einer für die letzten Minuten + ## 2.10.14 - **Hinweis bei Debug-Startoptionen:** Stehen in den Steam-Startoptionen von My Summer Car noch diff --git a/MSCO.cs b/MSCO.cs index 44c9018..6735fc1 100644 --- a/MSCO.cs +++ b/MSCO.cs @@ -11,7 +11,7 @@ namespace MSCO /// Version der Mod. Kleine Updates: nur die dritte Stelle erhöhen (2.9.1, 2.9.2 ...) - sie bleiben mit /// Servern und Mitspielern derselben ersten zwei Stellen kompatibel. /// - public const string ModVersion = "2.10.14"; + public const string ModVersion = "2.10.15"; /// /// Netzwerk-Version (die ersten beiden Stellen). Nur erhöhen, wenn sich das Protokoll inkompatibel ändert - dann /// auch GameServer.ModVersion im Server. diff --git a/PerfStats.cs b/PerfStats.cs index 6b30578..f1b195a 100644 --- a/PerfStats.cs +++ b/PerfStats.cs @@ -18,6 +18,8 @@ namespace MSCO static int frames, gcStart = -1; static double frameSeconds, worstFrame; static float started = -1f; + static int level = -1; + static int reports; static readonly bool autoLog = Array.IndexOf(Environment.GetCommandLineArgs(), "-msco-perf") >= 0; public static void Add(string part, double ms) @@ -30,20 +32,28 @@ namespace MSCO /// Einmal pro Bild (Update). public static void Frame(float dt) { - if (started < 0f) Reset(); + // Neue Szene (Menü -> Spiel): neu anfangen, sonst zählt das Laden mit + if (started < 0f || Application.loadedLevel != level) { level = Application.loadedLevel; reports = 0; Reset(); } frames++; frameSeconds += dt; if (dt > worstFrame) worstFrame = dt; - // Mit -msco-perf alle 30 s, sonst im Spiel alle 5 Minuten ein Bericht in MSCO_Loader.txt - so lässt sich bei - // "wenig FPS" nachsehen, ob MSCO, eine Mod oder das Spiel selbst die Zeit braucht - float every = autoLog ? 30f : 300f; + // Mit -msco-perf alle 30 s, sonst im Spiel nach 2 Minuten und dann alle 5 Minuten ein Bericht in MSCO_Loader.txt - + // so lässt sich bei "wenig FPS" nachsehen, ob MSCO, eine Mod oder das Spiel selbst die Zeit braucht + float every = autoLog ? 30f : reports == 0 ? 120f : 300f; if ((autoLog || MenuHelper.InGame) && Time.realtimeSinceStartup - started >= every) { Bootstrap.Log(Report()); + reports++; Reset(); } } + /// Beim Beenden: was seit dem letzten Bericht gemessen wurde (mindestens 20 s im Spiel). + public static void FinalReport() + { + if (frames > 0 && MenuHelper.InGame && Time.realtimeSinceStartup - started >= 20f) Bootstrap.Log(Report()); + } + public static void Reset() { totals.Clear();