diff options
Diffstat (limited to 'main/src/core/MonoDevelop.Core/MonoDevelop.Core.Instrumentation/TimeCounter.cs')
-rw-r--r-- | main/src/core/MonoDevelop.Core/MonoDevelop.Core.Instrumentation/TimeCounter.cs | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Instrumentation/TimeCounter.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Instrumentation/TimeCounter.cs index 140f84f899..55227a859f 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Instrumentation/TimeCounter.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Instrumentation/TimeCounter.cs @@ -25,6 +25,7 @@ // THE SOFTWARE. using System; +using System.Collections.Generic; namespace MonoDevelop.Core.Instrumentation { @@ -55,6 +56,7 @@ namespace MonoDevelop.Core.Instrumentation TimerTraceList traceList; TimerTrace lastTrace; TimerCounter counter; + object linkedTrackers; internal TimeCounter (TimerCounter counter) { @@ -62,6 +64,18 @@ namespace MonoDevelop.Core.Instrumentation traceList = new TimerTraceList (); Begin (); } + + public void AddHandlerTracker (IDisposable t) + { + if (linkedTrackers == null) + linkedTrackers = t; + else if (!(linkedTrackers is List<IDisposable>)) { + var list = new List<IDisposable> (); + list.Add ((IDisposable)linkedTrackers); + list.Add (t); + } else + ((List<IDisposable>)linkedTrackers).Add (t); + } internal TimerTraceList TraceList { get { return this.traceList; } @@ -98,6 +112,13 @@ namespace MonoDevelop.Core.Instrumentation else counter.AddTime (traceList.TotalTime); counter = null; + + if (linkedTrackers is List<IDisposable>) { + foreach (var t in (List<IDisposable>)linkedTrackers) + t.Dispose (); + } else if (linkedTrackers != null) + ((IDisposable)linkedTrackers).Dispose (); + } void IDisposable.Dispose () |