Files
OpenRA/OpenRA.Game/Support/PerfTickLogger.cs

56 lines
1.9 KiB
C#

#region Copyright & License Information
/*
* Copyright (c) The OpenRA Developers and Contributors
* This file is part of OpenRA, which is free software. It is made
* available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation, either version 3 of
* the License, or (at your option) any later version. For more
* information, see COPYING.
*/
#endregion
using System.Diagnostics;
namespace OpenRA.Support
{
public static class PerfTickLogger
{
public const long TimestampDisabled = 0L;
static float durationThresholdMs = Game.Settings.Debug.LongTickThresholdMs;
static long durationThresholdTicks = PerfTimer.MillisToTicks(Game.Settings.Debug.LongTickThresholdMs);
/// <summary>Retrieve the current timestamp.</summary>
/// <returns>TimestampDisabled if performance logging is disabled.</returns>
public static long GetTimestamp()
{
var settings = Game.Settings.Debug;
if (!settings.EnableSimulationPerfLogging)
return TimestampDisabled;
// TODO: Let settings notify listeners on changes
if (durationThresholdMs != settings.LongTickThresholdMs)
{
durationThresholdMs = Game.Settings.Debug.LongTickThresholdMs;
durationThresholdTicks = PerfTimer.MillisToTicks(durationThresholdMs);
}
return Stopwatch.GetTimestamp();
}
/// <summary>Logs an entry in the performance log when the current time since the start tick exceeds the game debug setting `LongTickThresholdMs`.</summary>
/// <returns>TimestampDisabled if performance logging is disabled.</returns>
public static long LogLongTick(long startTimestamp, string name, object item)
{
if (startTimestamp == TimestampDisabled)
return TimestampDisabled;
var currentTimetamp = Stopwatch.GetTimestamp();
if (currentTimetamp - startTimestamp > durationThresholdTicks)
PerfTimer.LogLongTick(startTimestamp, currentTimetamp, name, item);
return currentTimetamp;
}
}
}