diff options
| author | jpbruyere <jp.bruyere@hotmail.com> | 2017-01-05 15:47:33 +0100 |
|---|---|---|
| committer | jpbruyere <jp.bruyere@hotmail.com> | 2017-01-05 15:47:33 +0100 |
| commit | 49346012274739fd39745f9e035ee8853149bc73 (patch) | |
| tree | b8757165c6b31a6d08b7caad2118ed76f463c287 /src/PerformanceMeasure.cs | |
| parent | 9c0f77e860a1852ee7de381a82118e6d8c7fb819 (diff) | |
| parent | 40b16003066ad42604fd82dc0eec9cfa0a4abeca (diff) | |
Merge branch 'master' into CrowIDE
Diffstat (limited to 'src/PerformanceMeasure.cs')
| -rw-r--r-- | src/PerformanceMeasure.cs | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/src/PerformanceMeasure.cs b/src/PerformanceMeasure.cs new file mode 100644 index 00000000..8fc0e531 --- /dev/null +++ b/src/PerformanceMeasure.cs @@ -0,0 +1,86 @@ +// +// PerformanceMeasure.cs +// +// Author: +// Jean-Philippe Bruyère <jp.bruyere@hotmail.com> +// +// Copyright (c) 2017 jp +// +// This program is free software: you can redistribute it and/or modify +// it 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. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <http://www.gnu.org/licenses/>. +using System; +using System.Diagnostics; + +namespace Crow +{ + public class PerformanceMeasure : IValueChange { + #region IValueChange implementation + public event EventHandler<ValueChangeEventArgs> ValueChanged; + public virtual void NotifyValueChanged(string MemberName, object _value) + { + if (ValueChanged != null) + ValueChanged.Invoke(this, new ValueChangeEventArgs(MemberName, _value)); + } + #endregion + + public Stopwatch timer = new Stopwatch (); + public string Name; + public long current, minimum, maximum, total, cptMeasures; + public long cancelLimit; + + public PerformanceMeasure(string name = "unamed", long _cancelLimit = 0){ + Name = name; + cancelLimit = _cancelLimit; + ResetStats (); + } + + public void StartCycle(){ + timer.Restart(); + } + public void StopCycle(){ + timer.Stop(); + computeStats (); + } + public void NotifyChanges(){ + if (cptMeasures == 0) + return; + NotifyValueChanged("minimum", minimum); + NotifyValueChanged("maximum", maximum); + NotifyValueChanged("current", current); + // NotifyValueChanged("total", total); + // NotifyValueChanged("cptMeasures", cptMeasures); + NotifyValueChanged("mean", total / cptMeasures); + } + + void computeStats(){ + current = timer.ElapsedTicks; + if (current < cancelLimit) + return; + cptMeasures++; + total += timer.ElapsedTicks; + if (timer.ElapsedTicks < minimum) + minimum = timer.ElapsedTicks; + if (timer.ElapsedTicks > maximum) + maximum = timer.ElapsedTicks; + } + void ResetStats(){ + Debug.WriteLine("reset measure cpt:{0}",cptMeasures); + cptMeasures = total = current = maximum = 0; + minimum = long.MaxValue; + } + void onResetClick(object sender, MouseButtonEventArgs e){ + ResetStats(); + } + } +} + |