Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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.cs21
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 ()