diff options
author | Oren Hurvitz | 2015-07-27 09:03:14 +0300 |
---|---|---|
committer | Oren Hurvitz | 2015-08-11 07:35:41 +0100 |
commit | 287096d826060d96454d2b186e082a95f1e5724a (patch) | |
tree | 79b1a97e593945b023745f70e055fbdfa5884f71 /OpenSim/Region/ScriptEngine | |
parent | Fixed mistakes related to confusion between Environment.TickCount (millisecon... (diff) | |
download | opensim-SC_OLD-287096d826060d96454d2b186e082a95f1e5724a.zip opensim-SC_OLD-287096d826060d96454d2b186e082a95f1e5724a.tar.gz opensim-SC_OLD-287096d826060d96454d2b186e082a95f1e5724a.tar.bz2 opensim-SC_OLD-287096d826060d96454d2b186e082a95f1e5724a.tar.xz |
Improved calculation of Script Execution TimeStarted
1. Use a Stopwatch (a high-resolution timer)
2. Whenever we start a new measurement period, zero out the total execution time (previously it just kept accumulating)
3. Changed the measurement period from 30 minutes to 30 seconds. This is much more useful in the "Top Scripts" dialog, as it shows currently active scripts
Diffstat (limited to 'OpenSim/Region/ScriptEngine')
-rw-r--r-- | OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs | 18 | ||||
-rwxr-xr-x | OpenSim/Region/ScriptEngine/XEngine/XEngine.cs | 2 |
2 files changed, 13 insertions, 7 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs index bae66e8..05dea5d 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs | |||
@@ -51,6 +51,7 @@ using OpenSim.Region.ScriptEngine.Shared.Api.Runtime; | |||
51 | using OpenSim.Region.ScriptEngine.Shared.ScriptBase; | 51 | using OpenSim.Region.ScriptEngine.Shared.ScriptBase; |
52 | using OpenSim.Region.ScriptEngine.Shared.CodeTools; | 52 | using OpenSim.Region.ScriptEngine.Shared.CodeTools; |
53 | using OpenSim.Region.ScriptEngine.Interfaces; | 53 | using OpenSim.Region.ScriptEngine.Interfaces; |
54 | using System.Diagnostics; | ||
54 | 55 | ||
55 | namespace OpenSim.Region.ScriptEngine.Shared.Instance | 56 | namespace OpenSim.Region.ScriptEngine.Shared.Instance |
56 | { | 57 | { |
@@ -202,7 +203,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
202 | 203 | ||
203 | public long MeasurementPeriodExecutionTime { get; private set; } | 204 | public long MeasurementPeriodExecutionTime { get; private set; } |
204 | 205 | ||
205 | public static readonly long MaxMeasurementPeriod = 30 * (TimeSpan.TicksPerMinute / TimeSpan.TicksPerMillisecond); | 206 | public static readonly int MaxMeasurementPeriod = 30 * 1000; // show the *recent* time used by the script, to find currently active scripts |
206 | 207 | ||
207 | private bool m_coopTermination; | 208 | private bool m_coopTermination; |
208 | 209 | ||
@@ -831,15 +832,20 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance | |||
831 | m_EventStart = DateTime.Now; | 832 | m_EventStart = DateTime.Now; |
832 | m_InEvent = true; | 833 | m_InEvent = true; |
833 | 834 | ||
834 | int start = Util.EnvironmentTickCount(); | ||
835 | |||
836 | // Reset the measurement period when we reach the end of the current one. | 835 | // Reset the measurement period when we reach the end of the current one. |
837 | if (start - MeasurementPeriodTickStart > MaxMeasurementPeriod) | 836 | if (Util.EnvironmentTickCountSubtract((int)MeasurementPeriodTickStart) > MaxMeasurementPeriod) |
838 | MeasurementPeriodTickStart = start; | 837 | { |
838 | MeasurementPeriodTickStart = Util.EnvironmentTickCount(); | ||
839 | MeasurementPeriodExecutionTime = 0; | ||
840 | } | ||
839 | 841 | ||
842 | Stopwatch executionTime = new Stopwatch(); | ||
843 | executionTime.Start(); | ||
844 | |||
840 | m_Script.ExecuteEvent(State, data.EventName, data.Params); | 845 | m_Script.ExecuteEvent(State, data.EventName, data.Params); |
841 | 846 | ||
842 | MeasurementPeriodExecutionTime += Util.EnvironmentTickCount() - start; | 847 | executionTime.Stop(); |
848 | MeasurementPeriodExecutionTime += executionTime.ElapsedMilliseconds; | ||
843 | 849 | ||
844 | m_InEvent = false; | 850 | m_InEvent = false; |
845 | m_CurrentEvent = String.Empty; | 851 | m_CurrentEvent = String.Empty; |
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs index e5e5698..ae02877 100755 --- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs | |||
@@ -2384,7 +2384,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine | |||
2384 | 2384 | ||
2385 | private float CalculateAdjustedExectionTime(IScriptInstance si, long tickNow) | 2385 | private float CalculateAdjustedExectionTime(IScriptInstance si, long tickNow) |
2386 | { | 2386 | { |
2387 | long ticksElapsed = tickNow - si.MeasurementPeriodTickStart; | 2387 | long ticksElapsed = Util.EnvironmentTickCountSubtract((int)tickNow, (int)si.MeasurementPeriodTickStart); |
2388 | 2388 | ||
2389 | // Avoid divide by zero | 2389 | // Avoid divide by zero |
2390 | if (ticksElapsed == 0) | 2390 | if (ticksElapsed == 0) |